tiny_tracker: more optimization

This commit is contained in:
Vince Weaver 2022-01-15 20:51:35 -05:00
parent 920934fde4
commit d2f2d97ff1
4 changed files with 45 additions and 22 deletions

View File

@ -17,6 +17,8 @@
; 250 bytes -- song only has 16 notes so can never be negative
; 249 bytes -- make terminating value $80 instead of $FF
; 247 bytes -- combine note loop. makes song a bit faster
; 245 bytes -- try to optimize writing out volume
; 255 bytes -- add in some visualization
d2:
@ -33,7 +35,15 @@ tracker_song = peasant_song
.include "tracker_init.s"
jsr SETGR
game_loop:
; typically A=0, X=FF, Y=0
; lda $70
;blah_smc:
; sta $400
; inc blah_smc+1
; start the music playing

View File

@ -19,7 +19,7 @@ set_notes_loop:
; this song only 16 notes so valid notes always positive
; cmp #$80
bpl all_ok
bpl not_end
;====================================
; if at end, loop back to beginning
@ -27,20 +27,24 @@ set_notes_loop:
asl ; reset song offset to 0
sta SONG_OFFSET
beq set_notes_loop
all_ok:
note_only:
not_end:
; NNNNNECC -- c=channel, e=end, n=note
tay ; save note in Y
pha ; save note
and #3
tax
ldy #$0E
sty AY_REGS+8,X ; $08 set volume A,B,C
asl
tax ; put channel offset in X
tya
pla ; restore note
tay
and #$4
sta SONG_COUNTDOWN ; always 4 long?
@ -50,12 +54,19 @@ note_only:
lsr ; get note in A
tay ; lookup in table
lda frequencies_low,Y
sta AY_REGS,X ; set proper register value
lda frequencies_high,Y
sta AY_REGS+1,X
; sta $500,X
lda frequencies_low,Y
sta AY_REGS,X ; set proper register value
; visualization
blah_urgh:
sta $400,Y
inc blah_urgh+1
;============================
; point to next

View File

@ -479,6 +479,16 @@ printf("\n");
}
printf("\n");
/* put these first as we use the high bit to end things? */
printf("frequencies_low:\n");
printf(".byte ");
for(n=0;n<notes_allocated;n++) {
printf("$%02X",(frequencies[allocated_notes[n]])&0xff);
if (n!=(notes_allocated-1)) printf(",");
total_len++;
}
printf("\n");
printf("frequencies_high:\n");
printf(".byte ");
for(n=0;n<notes_allocated;n++) {
@ -489,14 +499,6 @@ printf("\n");
printf("\n");
printf("frequencies_low:\n");
printf(".byte ");
for(n=0;n<notes_allocated;n++) {
printf("$%02X",(frequencies[allocated_notes[n]])&0xff);
if (n!=(notes_allocated-1)) printf(",");
total_len++;
}
printf("\n");
printf("; total len=%d\n",total_len);

View File

@ -14,9 +14,9 @@ init_loop:
lda #$38
sta AY_REGS+7 ; $07 mixer (ABC on)
lda #$0E
sta AY_REGS+8 ; $08 volume A
lda #$0C
sta AY_REGS+9 ; $09 volume B
sta AY_REGS+10 ; $0A volume C
; lda #$0E
; sta AY_REGS+8 ; $08 volume A
; lda #$0C
; sta AY_REGS+9 ; $09 volume B
; sta AY_REGS+10 ; $0A volume C