playing-coffee/playing-coffee - Copy/roms/dmg_sound/source/04-sweep.s

121 lines
2.6 KiB
ArmAsm

; Calc = calculation of new frequency and check for > $7FF
; Update = modification of frequency with new calculated value
.include "shell.inc"
.include "apu.s"
begin:
call sync_sweep
wreg NR14,$40
wreg NR11,-$21
wreg NR12,$08
ret
should_be_almost_off:
lda NR52
and $01
jp z,test_failed
delay_apu 1
should_be_off:
lda NR52
and $01
jp nz,test_failed
ret
main:
set_test 2,"If shift>0, calculates on trigger"
call begin
wreg NR10,$01
wreg NR13,$FF
wreg NR14,$C7
call should_be_off
call begin
wreg NR10,$11
wreg NR13,$FF
wreg NR14,$C7
call should_be_off
set_test 3,"If shift=0, doesn't calculate on trigger"
call begin
wreg NR10,$10
wreg NR13,$FF
wreg NR14,$C7
delay_apu 1
call should_be_almost_off
set_test 4,"If period=0, doesn't calculate"
call begin
wreg NR10,$00
wreg NR13,$FF
wreg NR14,$C7
delay_apu $20
call should_be_almost_off
set_test 5,"After updating frequency, calculates a second time"
call begin
wreg NR10,$11
wreg NR13,$00
wreg NR14,$C5
delay_apu 1
call should_be_almost_off
set_test 6,"If calculation>$7FF, disables channel"
call begin
wreg NR10,$02
wreg NR13,$67
wreg NR14,$C6
call should_be_off
set_test 7,"If calculation<=$7FF, doesn't disable channel"
call begin
wreg NR10,$01
wreg NR13,$55
wreg NR14,$C5
delay_apu $20
call should_be_almost_off
set_test 8,"If shift=0 and period>0, trigger enables"
call begin
wreg NR10,$10
wreg NR13,$FF
wreg NR14,$C3
delay_apu 2
wreg NR10,$11
delay_apu 1
call should_be_almost_off
set_test 9,"If shift>0 and period=0, trigger enables"
call begin
wreg NR10,$01
wreg NR13,$FF
wreg NR14,$C3
delay_apu 15
wreg NR10,$11
call should_be_almost_off
set_test 10,"If shift=0 and period=0, trigger disables"
call begin
wreg NR10,$08
wreg NR13,$FF
wreg NR14,$C3
wreg NR10,$11
delay_apu $20
call should_be_almost_off
set_test 11,"If shift=0, doesn't update"
call begin
wreg NR10,$10
wreg NR13,$FF
wreg NR14,$C3
delay_apu $20
call should_be_almost_off
set_test 12,"If period=0, doesn't update"
call begin
wreg NR10,$01
wreg NR13,$00
wreg NR14,$C5
delay_apu $20
call should_be_almost_off
jp tests_passed