From ab84a43d33ef1c1b2fd43d535d48610862ecd6a4 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Sun, 10 May 2020 13:52:51 +1000 Subject: [PATCH] Sound drivers: support/rejection of zero value for period SN76489: The SN76489 chip will produce a note for value 0 - but the driver will reject this value - but it does allow value $400 - (logically the same) to produce the lowest note AY38910: This chip does not produce a sound for period of 0 - so its also rejected The max value for this driver is still $0FFF --- Source/HBIOS/ay38910.asm | 6 +++++- Source/HBIOS/sn76489.asm | 15 ++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Source/HBIOS/ay38910.asm b/Source/HBIOS/ay38910.asm index 7f712f09..01dc90a5 100644 --- a/Source/HBIOS/ay38910.asm +++ b/Source/HBIOS/ay38910.asm @@ -217,7 +217,11 @@ AY_PERIOD: AUDTRACE(AYT_PERIOD) AUDTRACE_HL AUDTRACE_CR -; + + LD A, H ; IF ZERO - ERROR + OR L + JR Z, AY_PERIOD1 + LD A, H ; MAXIMUM TONE PERIOD IS 12-BITS AND 11110000B ; ALLOWED RANGE IS 0001-0FFF (4095) JR NZ, AY_PERIOD1 ; RETURN NZ IF NUMBER TOO LARGE diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm index 5237aac4..56aaaecc 100644 --- a/Source/HBIOS/sn76489.asm +++ b/Source/HBIOS/sn76489.asm @@ -113,11 +113,9 @@ SN7_PERIOD: AUDTRACE_HL AUDTRACE_CR - ; TODO: MAKE ZERO BE AN INVALID VALUE (USE 400) TO INDICATE LOWEST NOTE - ; NEED TO UPDATE TUNE.ASM TO SUPPORT THIS? - ; LD A, H ; IF ZERO - ERROR - ; OR L - ; JR Z, SN7_QUERY_PERIOD1 + LD A, H ; IF ZERO - ERROR + OR L + JR Z, SN7_QUERY_PERIOD1 LD (SN7_PENDING_PERIOD), HL ;ASSUME SUCCESS @@ -130,11 +128,10 @@ SN7_PERIOD: RET SN7_QUERY_PERIOD1: ; REQUESTED PERIOD IS LARGER THAN THE SN76489 CAN SUPPORT - LD L, $FF - LD H, $FF + LD A, $FF + LD L, A + LD H, A LD (SN7_PENDING_PERIOD), HL - - OR $FF ; SIGNAL FAILURE RET SN7_PLAY: