121 lines
2.6 KiB
ArmAsm
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
|