dither audio

This commit is contained in:
Brooke Vibber 2024-08-31 10:58:15 -07:00
commit ad42390cdd
2 changed files with 36 additions and 20 deletions

View file

@ -129,17 +129,9 @@ wait_loop:
ldy VCOUNT ; 4 cycles
bne wait_loop ; 2 cycles
.macro audio_prep
; Y is VCOUNT at entry
lda (sample_ptr),y ; 5/6 cyc
sta audiotemp ; 3 cyc
.endmacro
.macro inner_scanline frame_offset, line_offset
; Y should be VCOUNT at entry
; it'll fire on unused lines, but harmlessly
;ldy scanline ; 3 cyc
;inc scanline ; 5 cyc
; 23-26 cycles before break
; Leisurely memory fetches
@ -149,6 +141,7 @@ wait_loop:
lda frame1_palette3_even + frame_offset + line_offset - scanline_offset / 2,y ; 4/5
tay ; 2
pla ; 3
; Wait for horizontal blank
sta WSYNC ; 4
@ -165,13 +158,21 @@ wait_loop:
sta AUDC1 ; 4 cyc
.endmacro
.macro audio_prep
; Y is VCOUNT at entry
lda (sample_ptr),y ; 5/6 cyc
sta audiotemp ; 3 cyc
.endmacro
; call with A pre-loaded to audiotemp
.macro audio_play_lo
lda audiotemp ; 3 cyc
;lda audiotemp ; 3 cyc
and #$0f ; 2 cyc
ora #$10 ; 2 cyc
sta AUDC1 ; 4 cyc
.endmacro
; clobbers Y
.macro audio_play_hi ; 12 cycles
ldy audiotemp ; 3 cyc
lda audio_high_byte,y ; 5 cyc
@ -212,11 +213,13 @@ wait_loop:
each_scanline_pair:
sty scanline ; 3 cycles
audio_prep
audio_play_lo
inner_scanline frame_offset, 0 ; 23-26 cycles before break, 12 cycles after
ldy scanline ; 3 cycles
audio_play_raw ; 8-10 cycles
audio_play_hi
ldy scanline ; 3 cycles
inner_scanline frame_offset, 128 ; 23-26 cycles before break, 12 cycles after
; pair cleanup: 6 cycles