From 9cdbc5b9812810b753aaca0738e480182b34d790 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Tue, 28 Apr 2020 19:51:15 +1000 Subject: [PATCH] SN76489: Do not play when period is overflowing --- Source/Apps/Tune/Tune.asm | 6 +++--- Source/HBIOS/sn76489.asm | 23 +++++++++++++++++++++-- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/Source/Apps/Tune/Tune.asm b/Source/Apps/Tune/Tune.asm index aa28cb95..adf29d33 100644 --- a/Source/Apps/Tune/Tune.asm +++ b/Source/Apps/Tune/Tune.asm @@ -2002,7 +2002,7 @@ PLAYVIAHBIOS: LD C, 0 LD HL, (AYREGS+TonA) ld a, h - AND $3F + AND $0F LD H, A RST 08 @@ -2027,7 +2027,7 @@ PLAYVIAHBIOS: LD C, 0 LD HL, (AYREGS+TonB) ld a, h - AND $3F + AND $0F LD H, A RST 08 @@ -2052,7 +2052,7 @@ PLAYVIAHBIOS: LD C, 0 LD HL, (AYREGS+TonC) ld a, h - AND $3F + AND $0F LD H, A RST 08 diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm index 8870e801..c80beff6 100644 --- a/Source/HBIOS/sn76489.asm +++ b/Source/HBIOS/sn76489.asm @@ -156,8 +156,12 @@ SN7_PITCH: XOR A ; SIGNAL SUCCESS RET -SN7_QUERY_PITCH1: - OR $FF +SN7_QUERY_PITCH1: ; REQUESTED PERIOD IS LARGER THAN THE SN76489 CAN SUPPORT + LD L, $FF + LD H, $FF + LD (PENDING_PITCH), HL + + OR $FF ; SIGNAL FAILURE RET SN7_PLAY: @@ -165,12 +169,27 @@ SN7_PLAY: AUDTRACE_D AUDDEBUG("\r\n") + LD A, (PENDING_PITCH + 1) + CP $FF + JR Z, SN7_PLAY1 ; PERIOD IS TOO LARGE, UNABLE TO PLAY CALL SN7_APPLY_VOL CALL SN7_APPLY_PIT XOR A ; SIGNAL SUCCESS RET +SN7_PLAY1: ; TURN CHANNEL VOL TO OFF AND STOP PLAYING + LD A, (PENDING_VOLUME) + PUSH AF + LD A, 0 + LD (PENDING_VOLUME), A + CALL SN7_APPLY_VOL + POP AF + LD (PENDING_VOLUME), A + + OR $FF ; SIGNAL FAILURE + RET + SN7_QUERY: LD A, E CP BF_SNDQ_CHCNT