From c0f0be8588296e22e0ec4094b38362fa830beca6 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Thu, 16 May 2019 16:37:14 -0400 Subject: [PATCH] pt3: wasted lots of time on this visualization --- pt3_player/Makefile | 2 +- pt3_player/gr_putsprite.s | 95 +++++++ pt3_player/pt3_player.s | 3 + pt3_player/put_letters.s | 523 ++++++++++++++++++++++++++++++++++++++ pt3_player/zp.inc | 4 +- 5 files changed, 624 insertions(+), 3 deletions(-) create mode 100644 pt3_player/gr_putsprite.s create mode 100644 pt3_player/put_letters.s diff --git a/pt3_player/Makefile b/pt3_player/Makefile index 9dcb9817..47d98f98 100644 --- a/pt3_player/Makefile +++ b/pt3_player/Makefile @@ -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 # diff --git a/pt3_player/gr_putsprite.s b/pt3_player/gr_putsprite.s new file mode 100644 index 00000000..dbf0d7c7 --- /dev/null +++ b/pt3_player/gr_putsprite.s @@ -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 + + + + diff --git a/pt3_player/pt3_player.s b/pt3_player/pt3_player.s index bb950e00..02b3ea56 100644 --- a/pt3_player/pt3_player.s +++ b/pt3_player/pt3_player.s @@ -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 diff --git a/pt3_player/put_letters.s b/pt3_player/put_letters.s new file mode 100644 index 00000000..3237fac1 --- /dev/null +++ b/pt3_player/put_letters.s @@ -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 + 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 INH + jmp do_sharp_a + +sharp_a: + 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 + 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 + 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 INH + jmp do_sharp_b + +sharp_b: + 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 + 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 + 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 INH + jmp do_sharp_c + +sharp_c: + 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 + 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 + + + + + + + diff --git a/pt3_player/zp.inc b/pt3_player/zp.inc index f57ae6d5..763b8420 100644 --- a/pt3_player/zp.inc +++ b/pt3_player/zp.inc @@ -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