dos33fsprogs/graphics/dhgr/raster4_good.s

130 lines
1.8 KiB
ArmAsm

GBASL = $26
GBASH = $27
HGRPAGE = $E6
LINE = $FD
YPOS = $FE
COLOR = $FF
HGR = $F3E2
HGR2 = $F3D8
HPOSN = $F411
raster:
jsr HGR
jsr HGR2
sta $C05E ; set double hires
sta $C00D ; 80 column
sta $C001 ; 80 store
lsr HGRPAGE ; set to $20 (HGR2 set this to $40)
sta YPOS
;forever_loop:
; jmp forever_loop
draw_raster:
line_loop:
lda #7 ; want 8 lines
sta LINE
lda YPOS ; check bounds
bmi go_neg ; if >128, flip to go up
cmp #64 ; if < 64, flip to go down
bcs do_add ; otherwise, nothing
go_pos:
ldx #$1
.byte $2C ; bit trick
go_neg:
ldx #$ff
stx smc+1
do_add:
clc ; move the bar
smc:
adc #1
sta YPOS
color_loop: ; get right color
lda LINE ;(2)
cmp #$4 ;(2)
bcc none ;(2)
eor #$3 ; 00 01 10 11 00 01 10 11
none: ; 11 10 01 00
and #$3 ;(2)
; ldx LINE
; lda order,X
clc
color_smc:
adc #0
tax
lda colors,X
sta COLOR
lda YPOS
sec
sbc LINE
; jsr draw_line_color
; inline!
;=====================================
;=============================
; draw line of color in COLOR
;=============================
draw_line_color:
ldx #0
ldy #0
jsr HPOSN
ldy #39
loop_it:
; set page2
sta $C055
jsr next_pixel
; set page1
sta $C054
jsr next_pixel
dey
bpl loop_it
;====================================
; rts
dec LINE
bmi line_loop
bpl color_loop
next_pixel:
lda COLOR ; 2
sta (GBASL),Y ; 3
cmp #$80 ; 2
rol COLOR ; 2
rts ; 1
;
; x-4 = fc fd fe ff 0 1 2 3
; lda LINE (2)
; cmp #$4 (2)
; bcc none (2)
; eor #$3 00 01 10 11 00 01 10 11
;none: 11 10 01 00
; and #$3 (2)
;order:
; .byte 0,1,2,3,3,2,1,0
colors:
.byte $00,$11,$22,$33 ; red
; .byte $00,$11,$22,$33,$33,$22,$11,$00 ; red
; .byte $00,$DD,$EE,$FF,$FF,$EE,$DD,$00 ; aqua lblue white
; .byte $00,$AA,$BB,$CC,$CC,$BB,$AA,$00 ; grey yellow mblue
; .byte $00,$77,$88,$99,$99,$88,$77,$00 ; ugly green
; .byte $00,$44,$55,$66,$66,$55,$44,$00 ; purple