From ae3d8199705edca1353015958eacbbcc9d049c66 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sat, 8 Jun 2019 01:39:50 -0400 Subject: [PATCH] pt3: init zeroed vars with loop switching songs, sometimes they'd start wrong due to vars not being initialized. Easier to just zero everything than try to figure out which field we weren't getting. Also makes code smaller. --- pt3_player/OPTIMIZATION.txt | 1 + pt3_player/hello.bas | 2 +- pt3_player/pt3_lib.s | 65 +++++++++++++++++++++++------------- pt3_player/pt3_player.dsk | Bin 143360 -> 143360 bytes 4 files changed, 43 insertions(+), 25 deletions(-) diff --git a/pt3_player/OPTIMIZATION.txt b/pt3_player/OPTIMIZATION.txt index 8c40f6b7..92d901d4 100644 --- a/pt3_player/OPTIMIZATION.txt +++ b/pt3_player/OPTIMIZATION.txt @@ -25,6 +25,7 @@ Code Optimization Qkumba#1 2937 ?? 1D.18 29s 171s 17% Qkumba#2 2879 ?? 1C.18 28s 171s 16% Qkumba#3+vmw 2816 ?? 1C.22 28s 171s 16% + Fixes,zero init 2776 ?? 1C.10 28s 171s 16% Times: Validated BH.PT3: 10.0B 16 1:33 93 17.2% diff --git a/pt3_player/hello.bas b/pt3_player/hello.bas index 8f4b8406..13d55b23 100644 --- a/pt3_player/hello.bas +++ b/pt3_player/hello.bas @@ -1,2 +1,2 @@ - 10 PRINT "PT3 PLAYER V0.7" + 10 PRINT "PT3 PLAYER V0.8" 100 PRINT CHR$ (4)"BRUN PT3_PLAYER" diff --git a/pt3_player/pt3_lib.s b/pt3_player/pt3_lib.s index 6fd8e578..d29810c5 100644 --- a/pt3_player/pt3_lib.s +++ b/pt3_player/pt3_lib.s @@ -19,6 +19,8 @@ ; + 2832 bytes -- combine $D0 and $E0 decode ; + 2816 bytes -- eliminate "decode_done" variable (2.75k) ; + 2817 bytes -- eliminate pt3_version. Slighly faster but also bigger +; + 2828 bytes -- fix some correctness issues +; + 2776 bytes -- init vars with loop (slower, but more correct and smaller) ; TODO ; move some of these flags to be bits rather than bytes? @@ -84,16 +86,18 @@ NOTE_TONE_SLIDE_TO_STEP =39 NOTE_STRUCT_SIZE=40 -note_a: - .byte $0 ; NOTE_VOLUME ; 0 - .byte $0 ; NOTE_TONE_SLIDING_L ; 1 - .byte $0 ; NOTE_TONE_SLIDING_H ; 2 - .byte $0 ; NOTE_ENABLED ; 3 - .byte $0 ; NOTE_ENVELOPE_ENABLED ; 4 - .byte $0 ; NOTE_SAMPLE_POINTER_L ; 5 - .byte $0 ; NOTE_SAMPLE_POINTER_H ; 6 - .byte $0 ; NOTE_SAMPLE_LOOP ; 7 - .byte $0 ; NOTE_SAMPLE_LENGTH ; 8 +begin_vars: + +note_a: ; reset? + .byte $0 ; NOTE_VOLUME ; 0 ; Y + .byte $0 ; NOTE_TONE_SLIDING_L ; 1 ; Y + .byte $0 ; NOTE_TONE_SLIDING_H ; 2 ; Y + .byte $0 ; NOTE_ENABLED ; 3 ; Y + .byte $0 ; NOTE_ENVELOPE_ENABLED ; 4 ; Y + .byte $0 ; NOTE_SAMPLE_POINTER_L ; 5 ; Y + .byte $0 ; NOTE_SAMPLE_POINTER_H ; 6 ; Y + .byte $0 ; NOTE_SAMPLE_LOOP ; 7 ; Y + .byte $0 ; NOTE_SAMPLE_LENGTH ; 8 ; Y .byte $0 ; NOTE_TONE_L ; 9 .byte $0 ; NOTE_TONE_H ; 10 .byte $0 ; NOTE_AMPLITUDE ; 11 @@ -102,16 +106,16 @@ note_a: .byte $0 ; NOTE_LEN_COUNT ; 14 .byte $0 ; NOTE_ADDR_L ; 15 .byte $0 ; NOTE_ADDR_H ; 16 - .byte $0 ; NOTE_ORNAMENT_POINTER_L ; 17 - .byte $0 ; NOTE_ORNAMENT_POINTER_H ; 18 - .byte $0 ; NOTE_ORNAMENT_LOOP ; 19 - .byte $0 ; NOTE_ORNAMENT_LENGTH ; 20 + .byte $0 ; NOTE_ORNAMENT_POINTER_L ; 17 ; Y + .byte $0 ; NOTE_ORNAMENT_POINTER_H ; 18 ; Y + .byte $0 ; NOTE_ORNAMENT_LOOP ; 19 ; Y + .byte $0 ; NOTE_ORNAMENT_LENGTH ; 20 ; Y .byte $0 ; NOTE_ONOFF ; 21 .byte $0 ; NOTE_TONE_ACCUMULATOR_L ; 22 .byte $0 ; NOTE_TONE_ACCUMULATOR_H ; 23 .byte $0 ; NOTE_TONE_SLIDE_COUNT ; 24 - .byte $0 ; NOTE_ORNAMENT_POSITION ; 25 - .byte $0 ; NOTE_SAMPLE_POSITION ; 26 + .byte $0 ; NOTE_ORNAMENT_POSITION ; 25 ; Y + .byte $0 ; NOTE_SAMPLE_POSITION ; 26 ; Y .byte $0 ; NOTE_ENVELOPE_SLIDING ; 27 .byte $0 ; NOTE_NOISE_SLIDING ; 28 .byte $0 ; NOTE_AMPLITUDE_SLIDING ; 29 @@ -219,23 +223,23 @@ current_line: .byte $0 current_pattern: .byte $0 pt3_pattern_done: .byte $0 -pt3_noise_period: .byte $0 -pt3_noise_add: .byte $0 +pt3_noise_period: .byte $0 ; Y +pt3_noise_add: .byte $0 ; Y -pt3_envelope_period_l: .byte $0 -pt3_envelope_period_h: .byte $0 +pt3_envelope_period_l: .byte $0 ; Y +pt3_envelope_period_h: .byte $0 ; Y pt3_envelope_slide_l: .byte $0 pt3_envelope_slide_h: .byte $0 pt3_envelope_slide_add_l:.byte $0 pt3_envelope_slide_add_h:.byte $0 pt3_envelope_add: .byte $0 -pt3_envelope_type: .byte $0 +pt3_envelope_type: .byte $0 ; Y pt3_envelope_type_old: .byte $0 pt3_envelope_delay: .byte $0 pt3_envelope_delay_orig:.byte $0 pt3_mixer_value: .byte $0 - +end_vars: ;========================== ; local variables @@ -423,13 +427,22 @@ load_sample: ; it will save bytes only if the labels are adjacent ; it will add a lot more cycles, though pt3_init_song: + + lda #$0 + sta DONE_SONG ; 3 + ldx #(end_vars-begin_vars) +zero_song_structs_loop: + dex + sta note_a,X + bne zero_song_structs_loop + + lda #$f ; 2 sta note_a+NOTE_VOLUME ; 4 sta note_b+NOTE_VOLUME ; 4 sta note_c+NOTE_VOLUME ; 4 - +.if 0 lda #$0 ; 2 - sta DONE_SONG ; 3 sta note_a+NOTE_TONE_SLIDING_L ; 4 sta note_b+NOTE_TONE_SLIDING_L ; 4 sta note_c+NOTE_TONE_SLIDING_L ; 4 @@ -442,12 +455,16 @@ pt3_init_song: sta note_a+NOTE_ENVELOPE_ENABLED ; 4 sta note_b+NOTE_ENVELOPE_ENABLED ; 4 sta note_c+NOTE_ENVELOPE_ENABLED ; 4 + sta note_a+NOTE_SAMPLE_POSITION ; 4 + sta note_b+NOTE_SAMPLE_POSITION ; 4 + sta note_c+NOTE_SAMPLE_POSITION ; 4 sta pt3_noise_period ; 4 sta pt3_noise_add ; 4 sta pt3_envelope_period_l ; 4 sta pt3_envelope_period_h ; 4 sta pt3_envelope_type ; 4 +.endif ; default ornament/sample in A ldx #(NOTE_STRUCT_SIZE*0) ; 2 diff --git a/pt3_player/pt3_player.dsk b/pt3_player/pt3_player.dsk index 027113d61e6f1bf9c34d4dfb983592f3d4d937cf..15ef9624308ba03c465392b6de2161aa47d7889b 100644 GIT binary patch delta 3847 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 GvF_iso^Y4| delta 3905 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