mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Sound Drivers: fixed building image issue
Duplicate labels fixed for when building AY38910 and SN76489 drivers into the same image
This commit is contained in:
@@ -11,6 +11,8 @@
|
||||
|
||||
#DEFINE AUDDEBUG(S) CALL PRTSTRD \ .TEXT S \ .TEXT "$" ; $$$$$$ PRINT STRING S TO CONSOLE - PRTD("HELLO") - NO TRAILING $ REQUIRED
|
||||
|
||||
#DEFINE AUDTRACE_CR AUDDEBUG("\r\n$")
|
||||
|
||||
#ELSE
|
||||
#DEFINE AUDTRACE(S)
|
||||
#DEFINE AUDTRACE_A
|
||||
@@ -23,4 +25,6 @@
|
||||
#DEFINE AUDTRACE_IY
|
||||
|
||||
#DEFINE AUDDEBUG(STR)
|
||||
|
||||
#DEFINE AUDTRACE_CR
|
||||
#ENDIF
|
||||
|
||||
@@ -144,20 +144,20 @@ AY_SV: CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS
|
||||
;======================================================================
|
||||
;
|
||||
AY_RESET:
|
||||
AUDTRACE(TRACE_INIT)
|
||||
AUDTRACE(AYT_INIT)
|
||||
;
|
||||
CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION
|
||||
;
|
||||
AUDTRACE(TRACE_VOLUME_OFF)
|
||||
AUDTRACE(AYT_VOLOFF)
|
||||
LD E,0 ; SET VOLUME OFF
|
||||
CALL AY_SETV ; ON ALL CHANNELS
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
LD (PENDING_VOLUME),A ; SET VOLUME TO ZERO
|
||||
LD (AY_PENDING_VOLUME),A ; SET VOLUME TO ZERO
|
||||
LD H,A
|
||||
LD L,A
|
||||
LD (PENDING_PERIOD),HL ; SET TONE PERIOD TO ZERO
|
||||
;
|
||||
LD (AY_PENDING_PERIOD),HL ; SET TONE PERIOD TO ZERO
|
||||
;
|
||||
RET
|
||||
;
|
||||
;======================================================================
|
||||
@@ -165,11 +165,11 @@ AY_RESET:
|
||||
;======================================================================
|
||||
;
|
||||
AY_VOLUME:
|
||||
AUDDEBUG("AY3VOL ")
|
||||
AUDTRACE(AYT_VOL)
|
||||
AUDTRACE_L
|
||||
AUDDEBUG("\r\n")
|
||||
AUDTRACE_CR
|
||||
LD A,L ; SAVE VOLUME
|
||||
LD (PENDING_VOLUME), A
|
||||
LD (AY_PENDING_VOLUME), A
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
@@ -179,22 +179,22 @@ AY_VOLUME:
|
||||
;======================================================================
|
||||
;
|
||||
AY_PERIOD:
|
||||
AUDDEBUG("AY3PRD ")
|
||||
AUDTRACE(AYT_PERIOD)
|
||||
AUDTRACE_HL
|
||||
AUDDEBUG("\r\n")
|
||||
AUDTRACE_CR
|
||||
|
||||
LD A, H ; MAXIMUM TONE PERIOD IS 12-BITS
|
||||
CP $10 ; ALLOWED RANGE IS 0001-0FFF (4095)
|
||||
JP NC, AY_QUERY_PERIOD1 ; RETURN NZ IF NUMBER TOO LARGE
|
||||
|
||||
LD (PENDING_PERIOD), HL ; SAVE AND
|
||||
LD (AY_PENDING_PERIOD), HL ; SAVE AND
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
AY_QUERY_PERIOD1:
|
||||
LD L, $FF
|
||||
LD H, L ; REQUESTED PERIOD IS LARGER
|
||||
LD (PENDING_PERIOD), HL ; THAN THE DEVICE CAN SUPPORT
|
||||
LD H, L ; REQUESTED PERIOD IS LARGER
|
||||
LD (AY_PENDING_PERIOD), HL ; THAN THE DEVICE CAN SUPPORT
|
||||
OR L ; SO SIGNAL FAILURE
|
||||
RET
|
||||
;
|
||||
@@ -203,9 +203,9 @@ AY_QUERY_PERIOD1:
|
||||
;======================================================================
|
||||
;
|
||||
AY_NOTE:
|
||||
AUDDEBUG("AY3NOT ")
|
||||
AUDTRACE(AYT_NOTE)
|
||||
AUDTRACE_L
|
||||
AUDDEBUG("\r\n")
|
||||
AUDTRACE_CR
|
||||
|
||||
ADD HL, HL ; SHIFT RIGHT (MULT 2) -INDEX INTO AY3NOTETBL TABLE OF WORDS
|
||||
; TEST IF HL IS LARGER THAN AY3NOTETBL SIZE
|
||||
@@ -236,11 +236,11 @@ AY_NOTE1:
|
||||
;======================================================================
|
||||
;
|
||||
AY_PLAY:
|
||||
AUDDEBUG("AY3PLY ")
|
||||
AUDTRACE(AYT_PLAY)
|
||||
AUDTRACE_D
|
||||
AUDDEBUG("\r\n")
|
||||
AUDTRACE_CR
|
||||
;
|
||||
LD A, (PENDING_PERIOD + 1) ; CHECK THE HIGH BYTE OF THE PERIOD
|
||||
LD A, (AY_PENDING_PERIOD + 1) ; CHECK THE HIGH BYTE OF THE PERIOD
|
||||
CP $FF
|
||||
JR Z, AY_PLAY1 ; PERIOD IS TOO LARGE, UNABLE TO PLAY
|
||||
CALL AY_APPLY_VOL
|
||||
@@ -250,13 +250,13 @@ AY_PLAY:
|
||||
RET
|
||||
;
|
||||
AY_PLAY1: ; TURN CHANNEL VOL TO OFF AND STOP PLAYING
|
||||
LD A, (PENDING_VOLUME)
|
||||
LD A, (AY_PENDING_VOLUME)
|
||||
PUSH AF
|
||||
XOR A
|
||||
LD (PENDING_VOLUME), A
|
||||
LD (AY_PENDING_VOLUME), A
|
||||
CALL AY_APPLY_VOL
|
||||
POP AF
|
||||
LD (PENDING_VOLUME), A
|
||||
LD (AY_PENDING_VOLUME), A
|
||||
;
|
||||
OR $FF ; SIGNAL FAILURE
|
||||
RET
|
||||
@@ -284,17 +284,17 @@ AY_QUERY:
|
||||
;
|
||||
AY_QUERY_CHCNT:
|
||||
LD B, AY_TONECNT ; RETURN NUMBER OF
|
||||
LD C, AY_NOISECNT ; TONE AND NOISE
|
||||
LD C, AY_NOISECNT ; TONE AND NOISE
|
||||
XOR A ; CHANNELS IN BC
|
||||
RET
|
||||
;
|
||||
AY_QUERY_PERIOD:
|
||||
LD HL, (PENDING_PERIOD) ; RETURN 16-BIT PERIOD
|
||||
LD HL, (AY_PENDING_PERIOD) ; RETURN 16-BIT PERIOD
|
||||
XOR A ; IN HL REGISTER
|
||||
RET
|
||||
;
|
||||
AY_QUERY_VOLUME:
|
||||
LD A, (PENDING_VOLUME) ; RETURN 8-BIT VOLUME
|
||||
LD A, (AY_PENDING_VOLUME) ; RETURN 8-BIT VOLUME
|
||||
LD L, A ; IN L REGISTER
|
||||
XOR A
|
||||
LD H, A
|
||||
@@ -320,11 +320,11 @@ AY_APPLY_VOL:
|
||||
ADD A,AY_R8AVOL ; CHANNEL VOLUME
|
||||
LD D,A ; REGISTER
|
||||
;
|
||||
AUDTRACE(TRACE_REG_WR)
|
||||
AUDTRACE(AYT_REGWR)
|
||||
AUDTRACE_A
|
||||
AUDTRACE(TRACE_NEWLINE)
|
||||
AUDTRACE_CR
|
||||
;
|
||||
LD A, (PENDING_VOLUME) ; MAP THE VOLUME
|
||||
LD A, (AY_PENDING_VOLUME) ; MAP THE VOLUME
|
||||
RRCA ; FROM 00-FF
|
||||
RRCA ; TO 00-0F
|
||||
RRCA
|
||||
@@ -353,11 +353,12 @@ AY_APPLY_PRD:
|
||||
ADD A,A ; CHANNEL REGISTER
|
||||
LD D,A ; FOR THE TONE PERIOD
|
||||
;
|
||||
AUDTRACE(TRACE_REG_WR)
|
||||
AUDTRACE(AYT_REGWR)
|
||||
AUDTRACE_A
|
||||
AUDTRACE(TRACE_NEWLINE)
|
||||
AUDTRACE_CR
|
||||
|
||||
;
|
||||
LD HL,(PENDING_PERIOD) ; WRITE THE LOWER
|
||||
LD HL,(AY_PENDING_PERIOD) ; WRITE THE LOWER
|
||||
LD E,L ; 8-BITS OF THE TONE PERIOD
|
||||
CALL AY_WRTPSG
|
||||
INC D
|
||||
@@ -405,19 +406,17 @@ AY_WRTPSG:
|
||||
;
|
||||
;======================================================================
|
||||
;
|
||||
PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS)
|
||||
PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS)
|
||||
AY_PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS)
|
||||
AY_PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS)
|
||||
|
||||
#IF AUDIOTRACE
|
||||
TRACE_INIT .DB "\r\nAY_INIT CALLED\r\n$"
|
||||
TRACE_VOLUME_OFF .DB "\r\nAY_VOLUME_OFF\r\n$"
|
||||
TRACE_VOLUME_SET .DB "\r\nAY_VOLUME_SET CH: $"
|
||||
TRACE_PLAY .DB "\r\nPLAY\r\n$"
|
||||
TRACE_VOLUME .DB ", VOL: $"
|
||||
TRACE_REG_WR .DB "\r\nOUT AY-3-8910 $"
|
||||
TRACE_PERIOD_SET .DB "\r\nAY_PERIOD_SET CH: $"
|
||||
TRACE_PERIOD .DB ", PERIOD: $"
|
||||
TRACE_NEWLINE .DB "\r\n$"
|
||||
AYT_INIT .DB "\r\nAY_INIT\r\n$"
|
||||
AYT_VOLOFF .DB "\r\nAY_VOLUME OFF\r\n$"
|
||||
AYT_VOL .DB "\r\nAY_VOLUME: $"
|
||||
AYT_NOTE .DB "\r\nAY_NOTE: $"
|
||||
AYT_PERIOD .DB "\r\nAY_PERIOD $"
|
||||
AYT_PLAY .DB "\r\nAY_PLAY CH: $"
|
||||
AYT_REGWR .DB "\r\nOUT AY-3-8910 $"
|
||||
#ENDIF
|
||||
;
|
||||
; THE FREQUENCY BY QUARTER TONE STARTING AT A1#
|
||||
|
||||
@@ -69,13 +69,13 @@ SN7_INIT1:
|
||||
;
|
||||
|
||||
SN7_RESET:
|
||||
AUDTRACE(TRACE_INIT)
|
||||
AUDTRACE(SNT_INIT)
|
||||
CALL SN7_VOLUME_OFF
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
SN7_VOLUME_OFF:
|
||||
AUDTRACE(TRACE_VOLUME_OFF)
|
||||
AUDTRACE(SNT_VOLOFF)
|
||||
|
||||
LD A, CHANNEL_0_SILENT
|
||||
OUT (SN76489_PORT_LEFT), A
|
||||
@@ -103,11 +103,11 @@ SN7_VOLUME_OFF:
|
||||
; 1 CC 1 VVVV
|
||||
|
||||
SN7_VOLUME:
|
||||
AUDDEBUG("SN7VOL ")
|
||||
AUDTRACE(SNT_VOL)
|
||||
AUDTRACE_L
|
||||
AUDDEBUG("\r\n")
|
||||
AUDTRACE_CR
|
||||
LD A, L
|
||||
LD (PENDING_VOLUME), A
|
||||
LD (SN7_PENDING_VOLUME), A
|
||||
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
@@ -115,9 +115,9 @@ SN7_VOLUME:
|
||||
|
||||
|
||||
SN7_NOTE:
|
||||
AUDDEBUG("SN7NOT ")
|
||||
AUDTRACE(SNT_NOTE)
|
||||
AUDTRACE_L
|
||||
AUDDEBUG("\r\n")
|
||||
AUDTRACE_CR
|
||||
|
||||
ADD HL, HL ; SHIFT RIGHT (MULT 2) -INDEX INTO SN7NOTETBL TABLE OF WORDS
|
||||
; TEST IF HL IS LARGER THAN SN7NOTETBL SIZE
|
||||
@@ -144,32 +144,32 @@ SN7_NOTE1:
|
||||
RET
|
||||
|
||||
SN7_PERIOD:
|
||||
AUDDEBUG("SN7PRD ")
|
||||
AUDTRACE(SNT_PERIOD)
|
||||
AUDTRACE_HL
|
||||
AUDDEBUG("\r\n")
|
||||
AUDTRACE_CR
|
||||
|
||||
LD A, H
|
||||
CP $04
|
||||
JP NC, SN7_QUERY_PERIOD1 ; RETURN NZ IF NUMBER TOO LARGE
|
||||
|
||||
LD (PENDING_PERIOD), HL
|
||||
LD (SN7_PENDING_PERIOD), HL
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
SN7_QUERY_PERIOD1: ; REQUESTED PERIOD IS LARGER THAN THE SN76489 CAN SUPPORT
|
||||
LD L, $FF
|
||||
LD H, $FF
|
||||
LD (PENDING_PERIOD), HL
|
||||
LD (SN7_PENDING_PERIOD), HL
|
||||
|
||||
OR $FF ; SIGNAL FAILURE
|
||||
RET
|
||||
|
||||
SN7_PLAY:
|
||||
AUDDEBUG("SN7PLY ")
|
||||
AUDTRACE(SNT_PLAY)
|
||||
AUDTRACE_D
|
||||
AUDDEBUG("\r\n")
|
||||
AUDTRACE_CR
|
||||
|
||||
LD A, (PENDING_PERIOD + 1)
|
||||
LD A, (SN7_PENDING_PERIOD + 1)
|
||||
CP $FF
|
||||
JR Z, SN7_PLAY1 ; PERIOD IS TOO LARGE, UNABLE TO PLAY
|
||||
CALL SN7_APPLY_VOL
|
||||
@@ -179,13 +179,13 @@ SN7_PLAY:
|
||||
RET
|
||||
|
||||
SN7_PLAY1: ; TURN CHANNEL VOL TO OFF AND STOP PLAYING
|
||||
LD A, (PENDING_VOLUME)
|
||||
LD A, (SN7_PENDING_VOLUME)
|
||||
PUSH AF
|
||||
LD A, 0
|
||||
LD (PENDING_VOLUME), A
|
||||
LD (SN7_PENDING_VOLUME), A
|
||||
CALL SN7_APPLY_VOL
|
||||
POP AF
|
||||
LD (PENDING_VOLUME), A
|
||||
LD (SN7_PENDING_VOLUME), A
|
||||
|
||||
OR $FF ; SIGNAL FAILURE
|
||||
RET
|
||||
@@ -214,12 +214,12 @@ SN7_QUERY_CHCNT:
|
||||
RET
|
||||
|
||||
SN7_QUERY_PERIOD:
|
||||
LD HL, (PENDING_PERIOD)
|
||||
LD HL, (SN7_PENDING_PERIOD)
|
||||
XOR A
|
||||
RET
|
||||
|
||||
SN7_QUERY_VOLUME:
|
||||
LD A, (PENDING_VOLUME)
|
||||
LD A, (SN7_PENDING_VOLUME)
|
||||
LD L, A
|
||||
LD H, 0
|
||||
|
||||
@@ -251,7 +251,7 @@ SN7_APPLY_VOL: ; APPLY VOLUME TO BOTH LEFT AND RIGHT CHANNELS
|
||||
OR $90
|
||||
LD B, A
|
||||
|
||||
LD A, (PENDING_VOLUME)
|
||||
LD A, (SN7_PENDING_VOLUME)
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
@@ -264,9 +264,9 @@ SN7_APPLY_VOL: ; APPLY VOLUME TO BOTH LEFT AND RIGHT CHANNELS
|
||||
AND $0F
|
||||
OR B ; A CONTAINS COMMAND TO SET VOLUME FOR CHANNEL
|
||||
|
||||
AUDTRACE(TRACE_PORT_WR)
|
||||
AUDTRACE(SNT_REGWR)
|
||||
AUDTRACE_A
|
||||
AUDTRACE(TRACE_NEWLINE)
|
||||
AUDTRACE_CR
|
||||
|
||||
OUT (SN76489_PORT_LEFT), A
|
||||
OUT (SN76489_PORT_RIGHT), A
|
||||
@@ -279,7 +279,7 @@ SN7_APPLY_PRD:
|
||||
PUSH DE
|
||||
PUSH BC
|
||||
PUSH AF
|
||||
LD HL, (PENDING_PERIOD)
|
||||
LD HL, (SN7_PENDING_PERIOD)
|
||||
|
||||
LD A, D
|
||||
AND $3
|
||||
@@ -295,9 +295,9 @@ SN7_APPLY_PRD:
|
||||
AND $F
|
||||
OR B ; A NOW CONATINS FIRST PERIOD COMMAND
|
||||
|
||||
AUDTRACE(TRACE_PORT_WR)
|
||||
AUDTRACE(SNT_REGWR)
|
||||
AUDTRACE_A
|
||||
AUDTRACE(TRACE_NEWLINE)
|
||||
AUDTRACE_CR
|
||||
|
||||
OUT (SN76489_PORT_LEFT), A
|
||||
OUT (SN76489_PORT_RIGHT), A
|
||||
@@ -318,9 +318,9 @@ SN7_APPLY_PRD:
|
||||
RLCA ; AND PLACE IN BITS 5 AND 6
|
||||
OR B ; OR THE TWO SETS OF BITS TO MAKE 2ND PERIOD COMMAND
|
||||
|
||||
AUDTRACE(TRACE_PORT_WR)
|
||||
AUDTRACE(SNT_REGWR)
|
||||
AUDTRACE_A
|
||||
AUDTRACE(TRACE_NEWLINE)
|
||||
AUDTRACE_CR
|
||||
|
||||
OUT (SN76489_PORT_LEFT), A
|
||||
OUT (SN76489_PORT_RIGHT), A
|
||||
@@ -344,24 +344,22 @@ SN7_FNTBL:
|
||||
!!!!!
|
||||
#ENDIF
|
||||
|
||||
PENDING_PERIOD
|
||||
SN7_PENDING_PERIOD
|
||||
.DW 0 ; PENDING PERIOD (10 BITS)
|
||||
PENDING_VOLUME
|
||||
SN7_PENDING_VOLUME
|
||||
.DB 0 ; PENDING VOL (8 BITS -> DOWNCONVERTED TO 4 BITS AND INVERTED)
|
||||
|
||||
STR_MESSAGELT .DB "\r\nSN76489: LEFT IO=0x$"
|
||||
STR_MESSAGERT .DB ", RIGHT IO=0x$"
|
||||
|
||||
#IF AUDIOTRACE
|
||||
TRACE_INIT .DB "\r\nSN7_INIT CALLED\r\n$"
|
||||
TRACE_VOLUME_OFF .DB "\r\nSN7_VOLUME_OFF\r\n$"
|
||||
TRACE_VOLUME_SET .DB "\r\nSN7_VOLUME_SET CH: $"
|
||||
TRACE_PLAY .DB "\r\nPLAY\r\n$"
|
||||
TRACE_VOLUME .DB ", VOL: $"
|
||||
TRACE_PORT_WR .DB "\r\nOUT SN76489, $"
|
||||
TRACE_PERIOD_SET .DB "\r\nSN7_PERIOD_SET CH: $"
|
||||
TRACE_PERIOD .DB ", PERIOD: $"
|
||||
TRACE_NEWLINE .DB "\r\n$"
|
||||
SNT_INIT .DB "\r\nSN7_INIT\r\n$"
|
||||
SNT_VOLOFF .DB "\r\nSN7_VOLUME OFF\r\n$"
|
||||
SNT_VOL .DB "\r\nSN7_VOLUME: $"
|
||||
SNT_NOTE .DB "\r\nSN7_NOTE: $"
|
||||
SNT_PERIOD .DB "\r\nSN7_PERIOD: $"
|
||||
SNT_PLAY .DB "\r\nSN7_PLAY CH: $"
|
||||
SNT_REGWR .DB "\r\nOUT SN76489, $"
|
||||
#ENDIF
|
||||
|
||||
; THE FREQUENCY BY QUARTER TONE STARTING AT A1#
|
||||
|
||||
Reference in New Issue
Block a user