mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-11-01 01:06:33 +00:00
205 lines
2.8 KiB
ArmAsm
205 lines
2.8 KiB
ArmAsm
|
; horizontal star wipe
|
||
|
|
||
|
; initial code = 164 bytes
|
||
|
|
||
|
GBASL = $26
|
||
|
GBASH = $27
|
||
|
BASL = $28
|
||
|
BASH = $29
|
||
|
|
||
|
OFFSET_POINTER = $FE
|
||
|
LINE = $FF
|
||
|
|
||
|
|
||
|
SET_GR = $C050
|
||
|
SET_TEXT = $C051
|
||
|
FULLGR = $C052
|
||
|
TEXTGR = $C053
|
||
|
PAGE0 = $C054
|
||
|
PAGE1 = $C055
|
||
|
LORES = $C056 ; Enable LORES graphics
|
||
|
HIRES = $C057 ; Enable HIRES graphics
|
||
|
|
||
|
PLOT = $F800 ;; PLOT AT Y,A
|
||
|
PLOT1 = $F80E ;; PLOT at (GBASL),Y (need MASK to be $0f or $f0)
|
||
|
HLINE = $F819 ;; HLINE Y,$2C at A
|
||
|
VLINE = $F828 ;; VLINE A,$2D at Y
|
||
|
CLRSCR = $F832 ;; Clear low-res screen
|
||
|
CLRTOP = $F836 ;; clear only top of low-res screen
|
||
|
GBASCALC= $F847 ;; take Y-coord/2 in A, put address in GBASL/H ( a trashed, C clear)
|
||
|
SETCOL = $F864 ;; COLOR=A
|
||
|
|
||
|
SETTXT = $FB36
|
||
|
SETGR = $FB40
|
||
|
|
||
|
BASCALC = $FBC1 ; Y-Coord in A, address in BASL/H, X,Y preserved
|
||
|
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
|
||
|
|
||
|
|
||
|
;================================
|
||
|
; Clear screen and setup graphics
|
||
|
;================================
|
||
|
horiz:
|
||
|
|
||
|
jsr SETGR ; set lo-res 40x40 mode
|
||
|
bit SET_GR
|
||
|
bit FULLGR ; make it 40x48
|
||
|
|
||
|
lda #3
|
||
|
sta LINE
|
||
|
lda #0
|
||
|
sta OFFSET_POINTER
|
||
|
|
||
|
forever_loop:
|
||
|
|
||
|
lda #$0
|
||
|
sta OFFSET_POINTER
|
||
|
|
||
|
ldx #0
|
||
|
big_loop:
|
||
|
|
||
|
txa
|
||
|
pha
|
||
|
jsr BASCALC
|
||
|
|
||
|
ldy #39
|
||
|
ldx OFFSET_POINTER
|
||
|
hlin:
|
||
|
tya
|
||
|
|
||
|
; if signed (y>offset) && (y<endoffset) draw
|
||
|
; if signed (y<=offset) || (y>endoffset) don't draw
|
||
|
|
||
|
clc
|
||
|
sbc offsets,X
|
||
|
bvs gurg
|
||
|
eor #$80
|
||
|
gurg:
|
||
|
bpl skip_pixel ; neg if A<=offset
|
||
|
|
||
|
tya
|
||
|
clc
|
||
|
sbc endoffsets,X
|
||
|
bvs gurg2
|
||
|
eor #$80
|
||
|
gurg2:
|
||
|
bmi skip_pixel ; neg if A<=endoffset
|
||
|
|
||
|
color_smc:
|
||
|
lda #$3b
|
||
|
jmp blah ; TODO: USE BIT TRICK
|
||
|
skip_pixel:
|
||
|
lda #$0 ;
|
||
|
blah:
|
||
|
sta (BASL),Y
|
||
|
dey
|
||
|
bpl hlin
|
||
|
|
||
|
lda #$bb
|
||
|
sta color_smc+1
|
||
|
|
||
|
|
||
|
;==========================================
|
||
|
; draw star at beginning of line
|
||
|
|
||
|
lda offsets,X
|
||
|
bmi skip_star
|
||
|
|
||
|
clc
|
||
|
lda BASL
|
||
|
adc offsets,X
|
||
|
sta BASL
|
||
|
|
||
|
ldx LINE
|
||
|
|
||
|
ldy #7 ; 8-bits wide
|
||
|
lda star_bitmap-1,X ; get low bit of bitmap into carry
|
||
|
draw_line_loop:
|
||
|
lsr
|
||
|
|
||
|
pha
|
||
|
|
||
|
bcc its_transparent
|
||
|
|
||
|
lda #$ff ; white
|
||
|
sta (BASL),Y ; draw on screen
|
||
|
its_transparent:
|
||
|
|
||
|
pla
|
||
|
|
||
|
dey
|
||
|
bpl draw_line_loop
|
||
|
|
||
|
skip_star:
|
||
|
|
||
|
; see if new line
|
||
|
|
||
|
ldx OFFSET_POINTER
|
||
|
|
||
|
dec LINE
|
||
|
bne not3
|
||
|
|
||
|
lda #$b3
|
||
|
sta color_smc+1
|
||
|
|
||
|
dec offsets,X
|
||
|
dec endoffsets,X
|
||
|
|
||
|
inc OFFSET_POINTER
|
||
|
lda #3
|
||
|
sta LINE
|
||
|
|
||
|
not3:
|
||
|
|
||
|
;==========================
|
||
|
|
||
|
pla
|
||
|
tax
|
||
|
|
||
|
inx
|
||
|
cpx #24
|
||
|
bne big_loop
|
||
|
|
||
|
|
||
|
; set/flip pages
|
||
|
; we want to flip pages and then draw to the offscreen one
|
||
|
|
||
|
;flip_pages:
|
||
|
; ldx #0 ; x already 0
|
||
|
; lda draw_page_smc+1 ; DRAW_PAGE
|
||
|
;; beq done_page
|
||
|
; inx
|
||
|
;done_page:
|
||
|
; ldy PAGE0,X ; set display page to PAGE1 or PAGE2
|
||
|
; eor #$4 ; flip draw page between $400/$800
|
||
|
; sta draw_page_smc+1 ; DRAW_PAGE
|
||
|
|
||
|
|
||
|
lda #80
|
||
|
jsr WAIT
|
||
|
|
||
|
jmp forever_loop
|
||
|
|
||
|
|
||
|
offsets:
|
||
|
.byte 5,4,3,2,1,2,3,4,5
|
||
|
|
||
|
endoffsets:
|
||
|
.byte 30,20,10,20,30,40,50,12
|
||
|
|
||
|
; 76543210
|
||
|
; @
|
||
|
; @@@@@
|
||
|
; @ @
|
||
|
|
||
|
star_bitmap:
|
||
|
.byte $50
|
||
|
.byte $f8
|
||
|
.byte $20
|
||
|
|
||
|
|
||
|
|
||
|
; for bot
|
||
|
|
||
|
jmp horiz
|