dos33fsprogs/graphics/hgr/solaris/solaris2.s
2022-08-21 23:46:35 -04:00

99 lines
1.6 KiB
ArmAsm

; Solaris scrolling code
; 235 bytes = direct port
; 162 bytes = updated version
; 158 bytes = offset in X
; 156 bytes = bit trick
; 153 bytes = eliminate count
; 151 bytes = questionably init count to value in Y
; 150 bytes = remove unnecessary init
; zero page
GBASL = $26
GBASH = $27
HGR_X = $E0
HGR_XH = $E1
HGR_Y = $E2
HGR_COLOR = $E4
HGR_PAGE = $E6
; soft-switches
FULLGR = $C052
PAGE1 = $C054
; ROM routines
HGR2 = $F3D8
HPOSN = $F411 ; (Y,X),(A) (values stores in HGRX,XH,Y)
; put in GBASL/GBASH
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
COUNT = $FE
FRAME = $FF
solaris2:
jsr HGR2
outer_loop:
sty COUNT ; reset count to 0 (first) or FF (from loop)
dex ; decrement offset
txa
and #$f ; make sure stays less than 16
tax
inner_loop:
sec
lda #160
sbc COUNT ; YY = 160-COUNT
jsr HPOSN ; calculate line addr in GBASL/H, trashes all
ldx HGR_X ; restore offset
lda lookup,X ; see if match count
cmp COUNT
bne skip_color
clc ; needed?
txa
adc #16
tax
lda #$00 ; draw black
.byte $2C
; jmp no_color
skip_color:
lda #$FF
no_color:
ldy #39 ; draw horizontal line at GBASL
inner_inner_loop:
sta (GBASL),Y
dey
bpl inner_inner_loop
; Y is FF here
inc COUNT
lda COUNT
cmp #83
bne inner_loop
beq outer_loop
lookup:
.byte 2, 5, 8,11,14,16,19,21,23,25,27,29,31,32,34,36
.byte 37,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54
.byte 55,56,57,57,58,59,60,60,61,62,62,63,64,64,65,65
.byte 66,66,67,67,68,68,69,69,70,70,71,71,71,72,72,73
.byte 73,73,74,74,75,75,75,76,76,76,77,77,77,77,78,78
.byte 78,79,79,79,79,80,80,80,80,81,81,81,81,82,82,82