2019-12-14 05:12:31 +00:00
|
|
|
; Display awesome tree
|
|
|
|
|
|
|
|
; by deater (Vince Weaver) <vince@deater.net>
|
|
|
|
|
|
|
|
; Zero Page
|
|
|
|
CH = $24
|
|
|
|
CV = $25
|
|
|
|
GBASL = $26
|
|
|
|
GBASH = $27
|
|
|
|
BASL = $28
|
|
|
|
BASH = $29
|
|
|
|
HGR_COLOR = $E4
|
|
|
|
SNOWX = $F0
|
|
|
|
COLOR = $F1
|
2019-12-16 18:24:09 +00:00
|
|
|
CMASK1 = $F2
|
|
|
|
CMASK2 = $F3
|
2019-12-14 05:12:31 +00:00
|
|
|
|
|
|
|
.include "hardware.inc"
|
|
|
|
|
|
|
|
|
|
|
|
;==================================
|
|
|
|
;==================================
|
|
|
|
|
|
|
|
bit SET_GR
|
|
|
|
bit FULLGR
|
|
|
|
bit LORES
|
|
|
|
bit PAGE0
|
|
|
|
|
|
|
|
|
|
|
|
display_loop:
|
|
|
|
|
|
|
|
;=========================
|
2019-12-16 18:24:09 +00:00
|
|
|
; erase old lines
|
2019-12-16 05:52:07 +00:00
|
|
|
|
2019-12-16 18:24:09 +00:00
|
|
|
jsr clear_lores ; 6+1749
|
2019-12-14 05:12:31 +00:00
|
|
|
|
|
|
|
;==========================
|
|
|
|
; move line
|
|
|
|
|
2019-12-16 18:24:09 +00:00
|
|
|
inc which_line_y ; 6
|
|
|
|
lda which_line_y ; 4
|
|
|
|
and #$7f ; 2
|
|
|
|
sta which_line_y ; 4
|
|
|
|
;=====
|
|
|
|
; 16
|
2019-12-14 05:12:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
;=========================
|
|
|
|
; draw new line
|
|
|
|
|
|
|
|
ldx #0
|
2019-12-16 18:24:09 +00:00
|
|
|
draw_line_loop:
|
2019-12-14 05:12:31 +00:00
|
|
|
|
2019-12-16 05:52:07 +00:00
|
|
|
jsr draw_line
|
|
|
|
|
2019-12-16 18:24:09 +00:00
|
|
|
inx
|
|
|
|
cpx #10
|
|
|
|
bne draw_line_loop
|
2019-12-16 05:52:07 +00:00
|
|
|
|
2019-12-14 05:12:31 +00:00
|
|
|
lda #100
|
|
|
|
jsr WAIT
|
|
|
|
|
|
|
|
jmp display_loop ; 3
|
|
|
|
|
|
|
|
|
2019-12-16 18:24:09 +00:00
|
|
|
;=================================
|
2019-12-14 05:12:31 +00:00
|
|
|
;=================================
|
|
|
|
; draw line
|
2019-12-16 18:24:09 +00:00
|
|
|
;=================================
|
|
|
|
;=================================
|
|
|
|
; Y = y position
|
|
|
|
; X = which
|
2019-12-14 05:12:31 +00:00
|
|
|
|
|
|
|
draw_line:
|
2019-12-16 20:11:11 +00:00
|
|
|
|
|
|
|
; set up proper sine table
|
|
|
|
|
|
|
|
lda sine_table_l,X
|
|
|
|
sta sine_table_smc+1
|
|
|
|
lda sine_table_h,X
|
|
|
|
sta sine_table_smc+2
|
|
|
|
|
|
|
|
ldy which_line_y
|
|
|
|
sine_table_smc:
|
|
|
|
lda sine_table5,Y
|
|
|
|
tay
|
|
|
|
|
2019-12-14 05:12:31 +00:00
|
|
|
and #$1
|
|
|
|
bne draw_line_odd
|
|
|
|
|
|
|
|
draw_line_even:
|
2019-12-16 18:24:09 +00:00
|
|
|
lda #$0f
|
|
|
|
sta ll_smc1+1
|
|
|
|
lda #$f0
|
|
|
|
sta ll_smc2+1
|
|
|
|
jmp draw_line_actual
|
2019-12-14 05:12:31 +00:00
|
|
|
|
|
|
|
draw_line_odd:
|
2019-12-16 18:24:09 +00:00
|
|
|
lda #$f0
|
|
|
|
sta ll_smc1+1
|
|
|
|
lda #$0f
|
|
|
|
sta ll_smc2+1
|
|
|
|
|
|
|
|
draw_line_actual:
|
2019-12-14 05:12:31 +00:00
|
|
|
tya
|
|
|
|
and #$fe
|
|
|
|
tay
|
|
|
|
lda gr_offsets,Y
|
2019-12-16 18:24:09 +00:00
|
|
|
|
2019-12-14 05:12:31 +00:00
|
|
|
clc
|
2019-12-16 20:11:11 +00:00
|
|
|
adc tree_start,X
|
2019-12-14 05:12:31 +00:00
|
|
|
sta GBASL
|
|
|
|
|
|
|
|
lda gr_offsets+1,Y
|
|
|
|
sta GBASH
|
|
|
|
|
2019-12-16 20:11:11 +00:00
|
|
|
|
2019-12-14 05:12:31 +00:00
|
|
|
ldy #0
|
2019-12-16 20:11:11 +00:00
|
|
|
lda tree_len,X
|
|
|
|
sta ll_smc3+1
|
|
|
|
|
|
|
|
lda tree_color,X
|
2019-12-16 18:24:09 +00:00
|
|
|
|
|
|
|
ll_smc1:
|
|
|
|
and #$0f
|
2019-12-14 05:12:31 +00:00
|
|
|
sta COLOR
|
2019-12-16 20:11:11 +00:00
|
|
|
|
2019-12-16 18:24:09 +00:00
|
|
|
line_loop:
|
2019-12-14 05:12:31 +00:00
|
|
|
lda (GBASL),Y
|
2019-12-16 18:24:09 +00:00
|
|
|
ll_smc2:
|
|
|
|
and #$f0
|
2019-12-14 05:12:31 +00:00
|
|
|
ora COLOR
|
|
|
|
sta (GBASL),Y
|
|
|
|
iny
|
2019-12-16 20:11:11 +00:00
|
|
|
ll_smc3:
|
|
|
|
cpy #2
|
2019-12-16 18:24:09 +00:00
|
|
|
bne line_loop
|
2019-12-14 05:12:31 +00:00
|
|
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
2019-12-16 18:24:09 +00:00
|
|
|
;=====================================
|
|
|
|
;=====================================
|
|
|
|
|
|
|
|
; clear the top 4 lines (eventually)
|
|
|
|
; clear 10-30 on lines 8-38
|
|
|
|
|
|
|
|
; 4+(80+7)*20+5 = 1749 cycles
|
|
|
|
clear_lores:
|
|
|
|
|
|
|
|
lda #$0 ; 2
|
|
|
|
ldx #10 ; 2
|
|
|
|
;===========
|
|
|
|
; 4
|
|
|
|
clear_lores_loop:
|
|
|
|
sta $600,X ; 8 ; 5
|
|
|
|
sta $680,X ; 10 ; 5
|
|
|
|
sta $700,X ; 12 ; 5
|
|
|
|
sta $780,X ; 14 ; 5
|
|
|
|
sta $428,X ; 16 ; 5
|
|
|
|
sta $4A8,X ; 18 ; 5
|
|
|
|
sta $528,X ; 20 ; 5
|
|
|
|
sta $5A8,X ; 22 ; 5
|
|
|
|
sta $628,X ; 24 ; 5
|
|
|
|
sta $6A8,X ; 26 ; 5
|
|
|
|
sta $728,X ; 28 ; 5
|
|
|
|
sta $7A8,X ; 30 ; 5
|
|
|
|
sta $450,X ; 32 ; 5
|
|
|
|
sta $4D0,X ; 34 ; 5
|
|
|
|
sta $550,X ; 36 ; 5
|
|
|
|
sta $5D0,X ; 38 ; 5
|
|
|
|
;===========
|
|
|
|
; 80
|
|
|
|
|
|
|
|
inx ; 2
|
|
|
|
cpx #30 ; 2
|
|
|
|
bne clear_lores_loop ; 3
|
|
|
|
;===========
|
|
|
|
; 7
|
|
|
|
|
|
|
|
; -1
|
|
|
|
rts ; 6
|
|
|
|
|
|
|
|
|
|
|
|
tree:
|
|
|
|
; color start stop ; 01234567890123456789
|
2019-12-16 20:11:11 +00:00
|
|
|
; .byte $DD, 19, 20, $00 ; YY
|
|
|
|
; .byte $44, 17, 22, $00 ; DDDDDD
|
|
|
|
; .byte $CC, 16, 23, $00 ; LLLLLLLL
|
|
|
|
; .byte $44, 15, 24, $00 ; DDDDDDDDDD
|
|
|
|
; .byte $CC, 14, 25, $00 ; LLLLLLLLLLLL
|
|
|
|
; .byte $44, 13, 26, $00 ; DDDDDDDDDDDDDD
|
|
|
|
; .byte $CC, 12, 27, $00 ; LLLLLLLLLLLLLLLL
|
|
|
|
; .byte $44, 11, 28, $00 ; DDDDDDDDDDDDDDDDDD
|
|
|
|
; .byte $CC, 10, 29, $00 ; LLLLLLLLLLLLLLLLLLLL
|
|
|
|
; .byte $88, 19, 20, $00 ; BB
|
|
|
|
|
|
|
|
tree_color: .byte $DD,$44,$CC,$44,$CC,$44,$CC,$44,$CC,$88
|
|
|
|
tree_start: .byte 19, 17, 16, 15, 14, 13, 12, 11, 10, 19
|
|
|
|
tree_len: .byte 2, 6, 8, 10, 12, 14, 16, 18, 20, 2
|
2019-12-16 18:24:09 +00:00
|
|
|
|
2019-12-14 05:12:31 +00:00
|
|
|
gr_offsets:
|
|
|
|
.word $400,$480,$500,$580,$600,$680,$700,$780
|
|
|
|
.word $428,$4a8,$528,$5a8,$628,$6a8,$728,$7a8
|
|
|
|
.word $450,$4d0,$550,$5d0,$650,$6d0,$750,$7d0
|
|
|
|
|
|
|
|
which_line_y:
|
|
|
|
.byte 0
|
|
|
|
|
2019-12-16 20:11:11 +00:00
|
|
|
|
|
|
|
sine_table_l:
|
|
|
|
.byte <sine_table5, <sine_table6, <sine_table7, <sine_table8
|
|
|
|
.byte <sine_table9, <sine_table10,<sine_table11,<sine_table12
|
|
|
|
.byte <sine_table13,<sine_table14,<sine_table15
|
|
|
|
|
|
|
|
sine_table_h:
|
|
|
|
.byte >sine_table5, >sine_table6, >sine_table7, >sine_table8
|
|
|
|
.byte >sine_table9, >sine_table10,>sine_table11,>sine_table12
|
|
|
|
.byte >sine_table13,>sine_table14,>sine_table15
|
|
|
|
|
|
|
|
|
2019-12-16 05:52:07 +00:00
|
|
|
.include "sines.inc"
|