Browse Source

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
pull/126/head
Dean Netherton 6 years ago
parent
commit
ab84a43d33
  1. 6
      Source/HBIOS/ay38910.asm
  2. 15
      Source/HBIOS/sn76489.asm

6
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

15
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:

Loading…
Cancel
Save