mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-02-03 07:35:42 +00:00
200 lines
2.5 KiB
ArmAsm
200 lines
2.5 KiB
ArmAsm
; star
|
|
|
|
; by Vince `deater` Weaver
|
|
|
|
SPEAKER = $C030
|
|
SET_GR = $C050
|
|
SET_TEXT = $C051
|
|
FULLGR = $C052
|
|
PAGE1 = $C054
|
|
PAGE2 = $C055
|
|
LORES = $C056 ; Enable LORES graphics
|
|
|
|
HGR2 = $F3D8
|
|
PLOT = $F800 ; PLOT AT Y,A (A colors output, Y preserved)
|
|
GBASCALC = $F847 ; Y in A, put addr in GBASL/GBASH
|
|
SETGR = $FB40
|
|
WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us
|
|
|
|
GBASL = $26
|
|
GBASH = $27
|
|
|
|
OUTL = $74
|
|
OUTH = $75
|
|
YPOS = $76
|
|
|
|
FRAME = $6D
|
|
PAGE = $6E
|
|
LINE = $6F
|
|
|
|
pattern1 = $d000 ; location in memory
|
|
|
|
;.zeropage
|
|
;.globalzp pattern_smc
|
|
|
|
|
|
star:
|
|
|
|
jsr SETGR ; set LORES
|
|
|
|
lda #0
|
|
sta OUTL
|
|
|
|
bit FULLGR ; set FULL 48x40
|
|
|
|
main_loop:
|
|
sta PAGE ; start at page 1
|
|
|
|
asl ; make OUTH $4 or $8 depending on value in PAGE
|
|
; which we have in A above or at end of loop
|
|
asl ; C is 0
|
|
adc #4
|
|
|
|
sta OUTH
|
|
|
|
lda #100
|
|
jsr WAIT
|
|
|
|
inc FRAME
|
|
|
|
;============================
|
|
; clear screen
|
|
;============================
|
|
full_loop:
|
|
ldx #3
|
|
|
|
line_loop:
|
|
ldy #119
|
|
|
|
screen_loop:
|
|
|
|
tya ; extrapolate X from Y
|
|
|
|
lda #$44
|
|
|
|
;inner_loop_smc:
|
|
|
|
sta (OUTL),Y
|
|
|
|
dey
|
|
bpl screen_loop
|
|
|
|
; move to next line by adding $80
|
|
; we save a byte by using EOR instead
|
|
|
|
lda OUTL
|
|
eor #$80 ; add $80
|
|
sta OUTL
|
|
|
|
bne line_loop
|
|
|
|
; we overflowed, so increment OUTH
|
|
|
|
inc OUTH
|
|
|
|
dex
|
|
bpl line_loop
|
|
|
|
;============================
|
|
; end clear screen
|
|
;============================
|
|
|
|
|
|
done_bg:
|
|
|
|
|
|
;======================
|
|
; draw 8x8 bitmap
|
|
;======================
|
|
|
|
lda FRAME
|
|
and #$7
|
|
tax
|
|
lda bounce,X
|
|
sta YPOS
|
|
|
|
ldx #7
|
|
boxloop:
|
|
txa
|
|
clc
|
|
adc YPOS
|
|
jsr GBASCALC ; calc address of X
|
|
; note we center to middle of screen
|
|
; by noting the middle 8 lines
|
|
; are offset by $28 from first 8 lines
|
|
|
|
; GBASL is in A at this point
|
|
|
|
clc
|
|
adc #12
|
|
sta GBASL ; center x-coord and y-coord at same time
|
|
|
|
|
|
lda PAGE ; want to add 0 or 4 (not 0 or 1)
|
|
asl
|
|
asl ; this sets C to 0
|
|
adc GBASH
|
|
sta GBASH
|
|
|
|
|
|
ldy #7
|
|
draw_line_loop:
|
|
|
|
lda bitmap,X ; get low bit of bitmap2 into carry
|
|
lsr
|
|
|
|
lda #$00 ; black is default color
|
|
|
|
ror bitmap,X ; 16-bit rotate (in memory)
|
|
|
|
bcc its_black
|
|
|
|
lda #$dd ; yellow
|
|
its_black:
|
|
sta (GBASL),Y ; partway down screen
|
|
|
|
dey
|
|
bpl draw_line_loop
|
|
|
|
dex
|
|
bpl boxloop
|
|
|
|
;======================
|
|
; switch page
|
|
;======================
|
|
|
|
lda PAGE
|
|
|
|
tax
|
|
ldy PAGE1,X ; flip page
|
|
|
|
eor #$1
|
|
|
|
bpl main_loop ; bra
|
|
|
|
|
|
; star bitmap
|
|
|
|
;012|456|
|
|
; @ ;
|
|
; @@ ;
|
|
; @@@@@ ;
|
|
;@@@@@@@ ;
|
|
; @@@@@ ;
|
|
; @@@@@ ;
|
|
; @@ @@ ;
|
|
;@@ @@ ;
|
|
|
|
bitmap:
|
|
.byte $10
|
|
.byte $18
|
|
.byte $1f
|
|
.byte $fe
|
|
.byte $7c
|
|
.byte $3e
|
|
.byte $66
|
|
.byte $C3
|
|
|
|
bounce:
|
|
.byte 10,11,12,13,13,12,11,10
|