pt3: wasted lots of time on this visualization

This commit is contained in:
Vince Weaver 2019-05-16 16:37:14 -04:00
parent fe990c3119
commit c0f0be8588
5 changed files with 624 additions and 3 deletions

View File

@ -45,7 +45,7 @@ PT3_PLAYER: pt3_player.o
pt3_player.o: pt3_player.s \
gr_fast_clear.s pt3_lib.s interrupt_handler.s random16.s fire.s \
zp.inc
gr_putsprite.s put_letters.s zp.inc
ca65 -o pt3_player.o pt3_player.s -l pt3_player.lst
#

95
pt3_player/gr_putsprite.s Normal file
View File

@ -0,0 +1,95 @@
;=============================================
; put_sprite_color_no_transparent
;=============================================
; Sprite to display in INH,INL
; Location is XPOS,YPOS
; Note, only works if YPOS is multiple of two
put_sprite:
ldy #0 ; byte 0 is xsize ; 2
lda (INL),Y ; 5
sta CH ; xsize is in CH ; 3
iny ; 2
lda (INL),Y ; byte 1 is ysize ; 5
sta CV ; ysize is in CV ; 3
iny ; 2
lda YPOS ; make a copy of ypos ; 3
sta TEMPY ; as we modify it ; 3
;===========
; 28
put_sprite_loop:
sty TEMP ; save sprite pointer ; 3
ldy TEMPY ; 3
lda gr_offsets,Y ; lookup low-res memory address ; 4
clc ; 2
adc XPOS ; add in xpos ; 3
sta OUTL ; store out low byte of addy ; 3
lda gr_offsets+1,Y ; look up high byte ; 4
adc DRAW_PAGE ; ; 3
sta OUTH ; and store it out ; 3
ldy TEMP ; restore sprite pointer ; 3
; OUTH:OUTL now points at right place
ldx CH ; load xsize into x ; 3
;===========
; 34
put_sprite_pixel:
lda (INL),Y ; get sprite colors ; 5
iny ; increment sprite pointer ; 2
sty TEMP ; save sprite pointer ; 3
cmp #$00
beq sprite_output
cmp #$ff
bne not_ff
sprite_color_ff_smc:
lda #$ff
jmp sprite_output
not_ff:
cmp #$f0
bne not_f0
sprite_color_f0_smc:
lda #$f0
jmp sprite_output
not_f0:
sprite_color_0f_smc:
lda #$0f
sprite_output:
ldy #$0 ; 2
sta (OUTL),Y ; and write it out ; 6
;============
; 9
put_sprite_done_draw:
ldy TEMP ; restore sprite pointer ; 3
inc OUTL ; increment output pointer ; 5
dex ; decrement x counter ; 2
bne put_sprite_pixel ; if not done, keep looping ; 2nt/3
;==============
; 12/13
inc TEMPY ; each line has two y vars ; 5
inc TEMPY ; 5
dec CV ; decemenet total y count ; 5
bne put_sprite_loop ; loop if not done ; 2nt/3
;==============
; 17/18
rts ; return ; 6

View File

@ -140,6 +140,7 @@ main_loop:
; Do the visualization
jsr draw_fire_frame
jsr put_letters
jsr page_flip
check_done:
@ -589,6 +590,8 @@ song_list:
.include "pt3_lib.s"
.include "fire.s"
.include "random16.s"
.include "gr_putsprite.s"
.include "put_letters.s"
;=========
; strings

523
pt3_player/put_letters.s Normal file
View File

@ -0,0 +1,523 @@
; Tried only drawing if changed
; but page flipping means this can go wrong unless we draw to both
put_letters:
;================
; First -- Note A
;================
first_note_a:
lda #$bb
sta sprite_color_ff_smc+1
lda #$0b
sta sprite_color_0f_smc+1
lda #$b0
sta sprite_color_f0_smc+1
ldx note_a+NOTE_NOTE
; cpx olda
; beq first_note_b
; stx olda
clc
lda note_lookup_letter,X
and #$7f
adc #<letter_a
sta INL
lda #>letter_a
adc #0
sta INH
lda #0
sta XPOS
lda #2
sta YPOS
jsr put_sprite
; second
clc
ldx note_a+NOTE_NOTE
and #$80
bne sharp_a
lda #<letter_none
sta INL
lda #>letter_none
sta INH
jmp do_sharp_a
sharp_a:
lda #<letter_sharp
sta INL
lda #>letter_sharp
sta INH
do_sharp_a:
lda #4
sta XPOS
lda #2
sta YPOS
jsr put_sprite
; third
clc
ldx note_a+NOTE_NOTE
lda note_lookup_number,X
adc #<number_0
sta INL
lda #>number_0
adc #0
sta INH
lda #8
sta XPOS
lda #2
sta YPOS
jsr put_sprite
;================
; First -- Note B
;================
first_note_b:
lda #$22
sta sprite_color_ff_smc+1
lda #$02
sta sprite_color_0f_smc+1
lda #$20
sta sprite_color_f0_smc+1
ldx note_b+NOTE_NOTE
; cpx oldb
; beq first_note_c
; stx oldb
clc
lda note_lookup_letter,X
and #$7f
adc #<letter_a
sta INL
lda #>letter_a
adc #0
sta INH
lda #14
sta XPOS
lda #2
sta YPOS
jsr put_sprite
; second
clc
ldx note_b+NOTE_NOTE
and #$80
bne sharp_b
lda #<letter_none
sta INL
lda #>letter_none
sta INH
jmp do_sharp_b
sharp_b:
lda #<letter_sharp
sta INL
lda #>letter_sharp
sta INH
do_sharp_b:
lda #18
sta XPOS
lda #2
sta YPOS
jsr put_sprite
; third
clc
ldx note_b+NOTE_NOTE
lda note_lookup_number,X
adc #<number_0
sta INL
lda #>number_0
adc #0
sta INH
lda #22
sta XPOS
lda #2
sta YPOS
jsr put_sprite
;================
; First -- Note C
;================
first_note_c:
lda #$33
sta sprite_color_ff_smc+1
lda #$03
sta sprite_color_0f_smc+1
lda #$30
sta sprite_color_f0_smc+1
ldx note_c+NOTE_NOTE
; cpx oldc
; beq done_print_note
; stx oldc
clc
lda note_lookup_letter,X
and #$7f
adc #<letter_a
sta INL
lda #>letter_a
adc #0
sta INH
lda #28
sta XPOS
lda #2
sta YPOS
jsr put_sprite
; second
clc
ldx note_c+NOTE_NOTE
and #$80
bne sharp_c
lda #<letter_none
sta INL
lda #>letter_none
sta INH
jmp do_sharp_c
sharp_c:
lda #<letter_sharp
sta INL
lda #>letter_sharp
sta INH
do_sharp_c:
lda #32
sta XPOS
lda #2
sta YPOS
jsr put_sprite
; third
clc
ldx note_c+NOTE_NOTE
lda note_lookup_number,X
adc #<number_0
sta INL
lda #>number_0
adc #0
sta INH
lda #36
sta XPOS
lda #2
sta YPOS
jsr put_sprite
done_print_note:
rts
olda: .byte $00
oldb: .byte $00
oldc: .byte $00
LETTER_A_OFFSET=0
LETTER_B_OFFSET=11
LETTER_C_OFFSET=22
LETTER_D_OFFSET=33
LETTER_E_OFFSET=44
LETTER_F_OFFSET=55
LETTER_G_OFFSET=66
SHARP=$80
NUMBER_0_OFFSET=0
NUMBER_1_OFFSET=11
NUMBER_2_OFFSET=22
NUMBER_3_OFFSET=33
NUMBER_4_OFFSET=44
NUMBER_5_OFFSET=55
NUMBER_6_OFFSET=66
NUMBER_7_OFFSET=77
NUMBER_8_OFFSET=88
NUMBER_9_OFFSET=99
letter_a:
.byte 3,3
.byte $f0,$0f,$f0
.byte $ff,$0f,$ff
.byte $ff,$00,$ff
letter_b:
.byte 3,3
.byte $ff,$0f,$f0
.byte $ff,$0f,$f0
.byte $ff,$f0,$0f
letter_c:
.byte 3,3
.byte $f0,$0f,$0f
.byte $ff,$00,$00
.byte $0f,$f0,$f0
letter_d:
.byte 3,3
.byte $ff,$0f,$f0
.byte $ff,$00,$ff
.byte $ff,$f0,$0f
letter_e:
.byte 3,3
.byte $ff,$0f,$0f
.byte $ff,$0f,$00
.byte $ff,$f0,$f0
letter_f:
.byte 3,3
.byte $ff,$0f,$0f
.byte $ff,$0f,$00
.byte $ff,$00,$00
letter_g:
.byte 3,3
.byte $f0,$0f,$0f
.byte $ff,$00,$f0
.byte $0f,$f0,$ff
letter_sharp:
.byte 3,3
.byte $ff,$f0,$ff
.byte $ff,$f0,$ff
.byte $0f,$00,$0f
letter_none:
.byte 3,3
.byte $00,$00,$00
.byte $00,$00,$00
.byte $00,$00,$00
number_0:
.byte 3,3
.byte $ff,$0f,$ff
.byte $ff,$00,$ff
.byte $ff,$f0,$ff
number_1:
.byte 3,3
.byte $00,$ff,$00
.byte $00,$ff,$00
.byte $00,$ff,$00
number_2:
.byte 3,3
.byte $0f,$0f,$ff
.byte $ff,$0f,$0f
.byte $ff,$f0,$f0
number_3:
.byte 3,3
.byte $0f,$0f,$ff
.byte $0f,$0f,$ff
.byte $f0,$f0,$ff
number_4:
.byte 3,3
.byte $ff,$00,$ff
.byte $0f,$0f,$ff
.byte $00,$00,$ff
number_5:
.byte 3,3
.byte $ff,$0f,$0f
.byte $0f,$0f,$ff
.byte $f0,$f0,$ff
number_6:
.byte 3,3
.byte $ff,$0f,$0f
.byte $ff,$0f,$f0
.byte $ff,$f0,$ff
number_7:
.byte 3,3
.byte $0f,$0f,$ff
.byte $00,$00,$ff
.byte $00,$00,$ff
number_8:
.byte 3,3
.byte $ff,$0f,$ff
.byte $ff,$0f,$ff
.byte $ff,$f0,$ff
number_9:
.byte 3,3
.byte $ff,$0f,$ff
.byte $0f,$0f,$ff
.byte $00,$00,$ff
note_lookup_letter:
; "C-1","C#1","D-1","D#1","E-1","F-1","F#1","G-1", // 50
; "G#1","A-1","A#1","B-1",
; 1
.byte LETTER_C_OFFSET,LETTER_C_OFFSET|SHARP
.byte LETTER_D_OFFSET,LETTER_D_OFFSET|SHARP
.byte LETTER_E_OFFSET
.byte LETTER_F_OFFSET,LETTER_F_OFFSET|SHARP
.byte LETTER_G_OFFSET,LETTER_G_OFFSET|SHARP
.byte LETTER_A_OFFSET,LETTER_A_OFFSET|SHARP
.byte LETTER_B_OFFSET
; 2
.byte LETTER_C_OFFSET,LETTER_C_OFFSET|SHARP
.byte LETTER_D_OFFSET,LETTER_D_OFFSET|SHARP
.byte LETTER_E_OFFSET
.byte LETTER_F_OFFSET,LETTER_F_OFFSET|SHARP
.byte LETTER_G_OFFSET,LETTER_G_OFFSET|SHARP
.byte LETTER_A_OFFSET,LETTER_A_OFFSET|SHARP
.byte LETTER_B_OFFSET
; 3
.byte LETTER_C_OFFSET,LETTER_C_OFFSET|SHARP
.byte LETTER_D_OFFSET,LETTER_D_OFFSET|SHARP
.byte LETTER_E_OFFSET
.byte LETTER_F_OFFSET,LETTER_F_OFFSET|SHARP
.byte LETTER_G_OFFSET,LETTER_G_OFFSET|SHARP
.byte LETTER_A_OFFSET,LETTER_A_OFFSET|SHARP
.byte LETTER_B_OFFSET
; 4
.byte LETTER_C_OFFSET,LETTER_C_OFFSET|SHARP
.byte LETTER_D_OFFSET,LETTER_D_OFFSET|SHARP
.byte LETTER_E_OFFSET
.byte LETTER_F_OFFSET,LETTER_F_OFFSET|SHARP
.byte LETTER_G_OFFSET,LETTER_G_OFFSET|SHARP
.byte LETTER_A_OFFSET,LETTER_A_OFFSET|SHARP
.byte LETTER_B_OFFSET
; 5
.byte LETTER_C_OFFSET,LETTER_C_OFFSET|SHARP
.byte LETTER_D_OFFSET,LETTER_D_OFFSET|SHARP
.byte LETTER_E_OFFSET
.byte LETTER_F_OFFSET,LETTER_F_OFFSET|SHARP
.byte LETTER_G_OFFSET,LETTER_G_OFFSET|SHARP
.byte LETTER_A_OFFSET,LETTER_A_OFFSET|SHARP
.byte LETTER_B_OFFSET
; 6
.byte LETTER_C_OFFSET,LETTER_C_OFFSET|SHARP
.byte LETTER_D_OFFSET,LETTER_D_OFFSET|SHARP
.byte LETTER_E_OFFSET
.byte LETTER_F_OFFSET,LETTER_F_OFFSET|SHARP
.byte LETTER_G_OFFSET,LETTER_G_OFFSET|SHARP
.byte LETTER_A_OFFSET,LETTER_A_OFFSET|SHARP
.byte LETTER_B_OFFSET
; 7
.byte LETTER_C_OFFSET,LETTER_C_OFFSET|SHARP
.byte LETTER_D_OFFSET,LETTER_D_OFFSET|SHARP
.byte LETTER_E_OFFSET
.byte LETTER_F_OFFSET,LETTER_F_OFFSET|SHARP
.byte LETTER_G_OFFSET,LETTER_G_OFFSET|SHARP
.byte LETTER_A_OFFSET,LETTER_A_OFFSET|SHARP
.byte LETTER_B_OFFSET
; 8
.byte LETTER_C_OFFSET,LETTER_C_OFFSET|SHARP
.byte LETTER_D_OFFSET,LETTER_D_OFFSET|SHARP
.byte LETTER_E_OFFSET
.byte LETTER_F_OFFSET,LETTER_F_OFFSET|SHARP
.byte LETTER_G_OFFSET,LETTER_G_OFFSET|SHARP
.byte LETTER_A_OFFSET,LETTER_A_OFFSET|SHARP
.byte LETTER_B_OFFSET
note_lookup_number:
; 1
.byte NUMBER_1_OFFSET,NUMBER_1_OFFSET,NUMBER_1_OFFSET
.byte NUMBER_1_OFFSET,NUMBER_1_OFFSET,NUMBER_1_OFFSET
.byte NUMBER_1_OFFSET,NUMBER_1_OFFSET,NUMBER_1_OFFSET
.byte NUMBER_1_OFFSET,NUMBER_1_OFFSET,NUMBER_1_OFFSET
; 2
.byte NUMBER_2_OFFSET,NUMBER_2_OFFSET,NUMBER_2_OFFSET
.byte NUMBER_2_OFFSET,NUMBER_2_OFFSET,NUMBER_2_OFFSET
.byte NUMBER_2_OFFSET,NUMBER_2_OFFSET,NUMBER_2_OFFSET
.byte NUMBER_2_OFFSET,NUMBER_2_OFFSET,NUMBER_2_OFFSET
; 3
.byte NUMBER_3_OFFSET,NUMBER_3_OFFSET,NUMBER_3_OFFSET
.byte NUMBER_3_OFFSET,NUMBER_3_OFFSET,NUMBER_3_OFFSET
.byte NUMBER_3_OFFSET,NUMBER_3_OFFSET,NUMBER_3_OFFSET
.byte NUMBER_3_OFFSET,NUMBER_3_OFFSET,NUMBER_3_OFFSET
; 4
.byte NUMBER_4_OFFSET,NUMBER_4_OFFSET,NUMBER_4_OFFSET
.byte NUMBER_4_OFFSET,NUMBER_4_OFFSET,NUMBER_4_OFFSET
.byte NUMBER_4_OFFSET,NUMBER_4_OFFSET,NUMBER_4_OFFSET
.byte NUMBER_4_OFFSET,NUMBER_4_OFFSET,NUMBER_4_OFFSET
; 5
.byte NUMBER_5_OFFSET,NUMBER_5_OFFSET,NUMBER_5_OFFSET
.byte NUMBER_5_OFFSET,NUMBER_5_OFFSET,NUMBER_5_OFFSET
.byte NUMBER_5_OFFSET,NUMBER_5_OFFSET,NUMBER_5_OFFSET
.byte NUMBER_5_OFFSET,NUMBER_5_OFFSET,NUMBER_5_OFFSET
; 6
.byte NUMBER_6_OFFSET,NUMBER_6_OFFSET,NUMBER_6_OFFSET
.byte NUMBER_6_OFFSET,NUMBER_6_OFFSET,NUMBER_6_OFFSET
.byte NUMBER_6_OFFSET,NUMBER_6_OFFSET,NUMBER_6_OFFSET
.byte NUMBER_6_OFFSET,NUMBER_6_OFFSET,NUMBER_6_OFFSET
; 7
.byte NUMBER_7_OFFSET,NUMBER_7_OFFSET,NUMBER_7_OFFSET
.byte NUMBER_7_OFFSET,NUMBER_7_OFFSET,NUMBER_7_OFFSET
.byte NUMBER_7_OFFSET,NUMBER_7_OFFSET,NUMBER_7_OFFSET
.byte NUMBER_7_OFFSET,NUMBER_7_OFFSET,NUMBER_7_OFFSET
; 8
.byte NUMBER_8_OFFSET,NUMBER_8_OFFSET,NUMBER_8_OFFSET
.byte NUMBER_8_OFFSET,NUMBER_8_OFFSET,NUMBER_8_OFFSET
.byte NUMBER_8_OFFSET,NUMBER_8_OFFSET,NUMBER_8_OFFSET
.byte NUMBER_8_OFFSET,NUMBER_8_OFFSET,NUMBER_8_OFFSET

View File

@ -150,8 +150,8 @@ DRAW_PAGE EQU $EE
;FIRST EQU $F0
LASTKEY EQU $F1
;PADDLE_STATUS EQU $F2
;XPOS EQU $F3
;YPOS EQU $F4
XPOS EQU $F3
YPOS EQU $F4
namlo = $f6