mirror of https://github.com/wwarthen/RomWBW.git
10 changed files with 176 additions and 166 deletions
@ -0,0 +1,101 @@ |
|||||
|
; |
||||
|
;====================================================================== |
||||
|
; PSG AY-3-8910 DRIVER FOR CONSOLE BELL |
||||
|
; WILL ALSO WORK WITH YM2149 |
||||
|
;====================================================================== |
||||
|
; |
||||
|
AY_RSEL .EQU $9A |
||||
|
AY_RDAT .EQU $9B |
||||
|
AY_ACR .EQU $9C |
||||
|
AY_R0CHAP .EQU $00 |
||||
|
AY_R1CHAP .EQU $01 |
||||
|
AY_R2CHBP .EQU $02 |
||||
|
AY_R3CHBP .EQU $03 |
||||
|
AY_R7ENAB .EQU $07 |
||||
|
AY_R8AVOL .EQU $08 |
||||
|
AY_R9BVOL .EQU $09 |
||||
|
; |
||||
|
;====================================================================== |
||||
|
; PSG AY-3-8910 DRIVER - INITIALIZATION |
||||
|
;====================================================================== |
||||
|
; |
||||
|
AY_INIT: |
||||
|
CALL NEWLINE ; FORMATTING |
||||
|
PRTS("AY: IO=0x$") |
||||
|
LD A,AY_RSEL |
||||
|
CALL PRTHEXBYTE |
||||
|
CALL AY_PROBE ; CHECK FOR HW EXISTENCE |
||||
|
JR Z,AY_INIT1 ; CONTINUE IF PRESENT |
||||
|
; |
||||
|
; HARDWARE NOT PRESENT |
||||
|
; |
||||
|
PRTS(" NOT PRESENT$") |
||||
|
OR $FF ; SIGNAL FAILURE |
||||
|
RET |
||||
|
; |
||||
|
AY_INIT1: |
||||
|
CALL AY_INIT2 |
||||
|
CALL AY_BEEP |
||||
|
AY_INIT2: |
||||
|
LD D,AY_R7ENAB ; SET MIXER CONTROL / IO ENABLE |
||||
|
LD E,$FF ; $FF - 11 111 111 |
||||
|
CALL AY_WRTPSG ; I/O PORTS DISABLED, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A DISABLE |
||||
|
; |
||||
|
LD B,2 |
||||
|
LD D,AY_R8AVOL ; SET VOLUME TO 0 |
||||
|
LD E,$00 |
||||
|
AY_QUIET: |
||||
|
CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS |
||||
|
INC A |
||||
|
DJNZ AY_QUIET |
||||
|
RET |
||||
|
; |
||||
|
; PLAY A BEEP TONE ON CENTER CHANNEL (LEFT AND RIGHT SPEAKERS) |
||||
|
; |
||||
|
AY_BEEP: |
||||
|
LD D,AY_R2CHBP ; SET TONE PERIOD |
||||
|
LD E,$55 ; CHANNEL B - R00 & R01 |
||||
|
CALL AY_WRTPSG ; $0055 = XXXX0000 01010101 |
||||
|
LD D,AY_R3CHBP |
||||
|
LD E,0 |
||||
|
CALL AY_WRTPSG |
||||
|
; |
||||
|
LD D,AY_R7ENAB ; $FD = 11 111 101 |
||||
|
LD E,$FD ; SET MIXER CONTROL / IO ENABLE |
||||
|
CALL AY_WRTPSG ; I/O PORTS DISABLED, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL B ENABLE |
||||
|
; |
||||
|
LD D,AY_R9BVOL |
||||
|
LD E,$07 ; SET CHANNEL B VOLUME TO 50% (7/16) |
||||
|
CALL AY_WRTPSG |
||||
|
; |
||||
|
CALL LDELAY ; HALF SECOND |
||||
|
RET |
||||
|
; |
||||
|
; WRITE DATA E TO PSG REG A |
||||
|
; |
||||
|
AY_WRTPSG: |
||||
|
HB_DI |
||||
|
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4) | (PLATFORM == PLT_RC180)) |
||||
|
IN0 A,(Z180_DCNTL) ; GET WAIT STATES |
||||
|
PUSH AF ; SAVE VALUE |
||||
|
OR %00110000 ; FORCE SLOW OPERATION (I/O W/S=3) |
||||
|
OUT0 (Z180_DCNTL),A ; AND UPDATE DCNTL |
||||
|
#ENDIF |
||||
|
LD A,D |
||||
|
OUT (AY_RSEL),A |
||||
|
LD A,E |
||||
|
OUT (AY_RDAT),A |
||||
|
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4) | (PLATFORM == PLT_RC180)) |
||||
|
POP AF ; GET SAVED DCNTL VALUE |
||||
|
OUT0 (Z180_DCNTL),A ; AND RESTORE IT |
||||
|
#ENDIF |
||||
|
HB_EI |
||||
|
RET |
||||
|
; |
||||
|
; CHECK THERE IS A DEVICE PRESENT |
||||
|
; |
||||
|
AY_PROBE: |
||||
|
LD A,$FF |
||||
|
OUT (AY_ACR),A ; INIT AUX CONTROL REG |
||||
|
XOR A |
||||
|
RET |
||||
@ -1,131 +0,0 @@ |
|||||
; |
|
||||
;====================================================================== |
|
||||
; PSG AY-3-8910 DRIVER FOR CONSOLE BELL |
|
||||
;====================================================================== |
|
||||
; |
|
||||
#IF (CONBELL == CONBELL_PSG) |
|
||||
|
|
||||
PSG_RSEL .EQU $9A |
|
||||
PSG_RDAT .EQU $9B |
|
||||
PSG_ACR .EQU $9C |
|
||||
AYR0CHAP .EQU $00 |
|
||||
AYR1CHAP .EQU $01 |
|
||||
AYR2CHBP .EQU $02 |
|
||||
AYR3CHBP .EQU $03 |
|
||||
AYR7ENAB .EQU $07 |
|
||||
AYR8AVOL .EQU $08 |
|
||||
AYR9BVOL .EQU $09 |
|
||||
; |
|
||||
;====================================================================== |
|
||||
; PSG AY-3-8910 DRIVER - INITIALIZATION |
|
||||
;====================================================================== |
|
||||
; |
|
||||
SND_INIT: |
|
||||
CALL NEWLINE ; FORMATTING |
|
||||
PRTS("PSG: IO=0x$") |
|
||||
LD A,PSG_RSEL |
|
||||
CALL PRTHEXBYTE |
|
||||
CALL PSG_PROBE ; CHECK FOR HW EXISTENCE |
|
||||
JR Z,PSG_INIT1 ; CONTINUE IF PRESENT |
|
||||
; |
|
||||
; HARDWARE NOT PRESENT |
|
||||
; |
|
||||
PRTS(" NOT PRESENT$") |
|
||||
OR $FF ; SIGNAL FAILURE |
|
||||
RET |
|
||||
; |
|
||||
PSG_INIT1: |
|
||||
CALL PSG_INIT2 |
|
||||
CALL BEEP |
|
||||
PSG_INIT2: |
|
||||
LD A,AYR7ENAB ; SET MIXER CONTROL / IO ENABLE |
|
||||
LD E,$FF ; $FF - 11 111 111 |
|
||||
CALL WRTPSG ; I/O PORTS DISABLED, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A DISABLE |
|
||||
; |
|
||||
LD B,2 |
|
||||
LD A,AYR8AVOL ; SET VOLUME TO 0 |
|
||||
LD E,$00 |
|
||||
AYQUIET: |
|
||||
CALL WRTPSG ; CYCLING THROUGH ALL CHANNELS |
|
||||
INC A |
|
||||
DJNZ AYQUIET |
|
||||
RET |
|
||||
; |
|
||||
; PLAY A BEEP TONE ON CENTER CHANNEL (LEFT AND RIGHT SPEAKERS) |
|
||||
; |
|
||||
BEEP: |
|
||||
LD A,AYR2CHBP ; SET TONE PERIOD |
|
||||
LD E,$55 ; CHANNEL B - R00 & R01 |
|
||||
CALL WRTPSG ; $0055 = XXXX0000 01010101 |
|
||||
LD E,0 |
|
||||
LD A,AYR3CHBP |
|
||||
CALL WRTPSG |
|
||||
; |
|
||||
LD E,$FD ; SET MIXER CONTROL / IO ENABLE |
|
||||
LD A,AYR7ENAB ; $FD = 11 111 101 |
|
||||
CALL WRTPSG ; I/O PORTS DISABLED, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL B ENABLE |
|
||||
; |
|
||||
LD E,$07 ; SET CHANNEL B VOLUME TO 50% (7/16) |
|
||||
LD A,AYR9BVOL ; |
|
||||
CALL WRTPSG |
|
||||
; |
|
||||
CALL LDELAY ; HALF SECOND |
|
||||
RET |
|
||||
; |
|
||||
; WRITE DATA E TO PSG REG A |
|
||||
; |
|
||||
WRTPSG: |
|
||||
HB_DI |
|
||||
OUT (PSG_RSEL),A |
|
||||
PUSH AF |
|
||||
LD A,E |
|
||||
OUT (PSG_RDAT),A |
|
||||
HB_EI |
|
||||
POP AF |
|
||||
RET |
|
||||
; |
|
||||
; CHECK THERE IS A DEVICE PRESENT |
|
||||
; |
|
||||
PSG_PROBE: |
|
||||
LD A,$FF |
|
||||
OUT (PSG_ACR),A ; INIT AUX CONTROL REG |
|
||||
XOR A |
|
||||
RET |
|
||||
; |
|
||||
#ENDIF |
|
||||
; |
|
||||
;====================================================================== |
|
||||
; I/O BIT DRIVER FOR CONSOLE BELL FOR SBC V2 USING BIT 0 OF RTC DRIVER |
|
||||
;====================================================================== |
|
||||
; |
|
||||
#IF (CONBELL == CONBELL_IOBIT) |
|
||||
|
|
||||
SND_INIT: |
|
||||
CALL NEWLINE ; FORMATTING |
|
||||
PRTS("SND: IO=0x$") |
|
||||
LD A,DSRTC_BASE |
|
||||
CALL PRTHEXBYTE |
|
||||
CALL BEEP |
|
||||
XOR A |
|
||||
RET |
|
||||
|
|
||||
BEEP: |
|
||||
PUSH DE |
|
||||
PUSH HL |
|
||||
LD HL,400 ; Cycles of tone |
|
||||
LD B,%00000100 ; D2 mapped to Q0 |
|
||||
BEEP1: |
|
||||
LD A,B |
|
||||
OUT (DSRTC_BASE),A |
|
||||
XOR %00000100 |
|
||||
LD B,A |
|
||||
LD DE,17 |
|
||||
CALL VDELAY |
|
||||
DEC HL |
|
||||
LD A,H |
|
||||
OR L |
|
||||
JR NZ,BEEP1 |
|
||||
POP HL |
|
||||
POP DE |
|
||||
RET |
|
||||
#ENDIF |
|
||||
@ -0,0 +1,36 @@ |
|||||
|
; |
||||
|
;====================================================================== |
||||
|
; I/O BIT DRIVER FOR CONSOLE BELL FOR SBC V2 USING BIT 0 OF RTC DRIVER |
||||
|
;====================================================================== |
||||
|
; |
||||
|
SPK_INIT: |
||||
|
CALL NEWLINE ; FORMATTING |
||||
|
PRTS("SPK: IO=0x$") |
||||
|
LD A,DSRTC_BASE |
||||
|
CALL PRTHEXBYTE |
||||
|
CALL SPK_BEEP |
||||
|
XOR A |
||||
|
RET |
||||
|
; |
||||
|
SPK_BEEP: |
||||
|
PUSH DE |
||||
|
PUSH HL |
||||
|
LD HL,400 ; CYCLES OF TONE |
||||
|
;LD B,%00000100 ; D2 MAPPED TO Q0 |
||||
|
LD A,DSRTC_RESET |
||||
|
OR %00000100 ; D2 MAPPED TO Q0 |
||||
|
LD B,A |
||||
|
SPK_BEEP1: |
||||
|
LD A,B |
||||
|
OUT (DSRTC_BASE),A |
||||
|
XOR %00000100 |
||||
|
LD B,A |
||||
|
LD DE,17 |
||||
|
CALL VDELAY |
||||
|
DEC HL |
||||
|
LD A,H |
||||
|
OR L |
||||
|
JR NZ,SPK_BEEP1 |
||||
|
POP HL |
||||
|
POP DE |
||||
|
RET |
||||
Loading…
Reference in new issue