mirror of https://github.com/wwarthen/RomWBW.git
14 changed files with 56 additions and 223 deletions
@ -1,122 +0,0 @@ |
|||||
; |
|
||||
;====================================================================== |
|
||||
; PSG AY-3-8910 DRIVER FOR CONSOLE BELL |
|
||||
; WILL ALSO WORK WITH YM2149 |
|
||||
;====================================================================== |
|
||||
; |
|
||||
#IF (AYMODE == AYMODE_SCG) |
|
||||
AY_RSEL .EQU $9A |
|
||||
AY_RDAT .EQU $9B |
|
||||
AY_ACR .EQU $9C |
|
||||
#ENDIF |
|
||||
; |
|
||||
#IF (AYMODE == AYMODE_N8) |
|
||||
AY_RSEL .EQU $9C |
|
||||
AY_RDAT .EQU $9D |
|
||||
AY_ACR .EQU N8_DEFACR |
|
||||
#ENDIF |
|
||||
; |
|
||||
#IF (AYMODE == AYMODE_RCZ80) |
|
||||
AY_RSEL .EQU $D8 |
|
||||
AY_RDAT .EQU $D0 |
|
||||
#ENDIF |
|
||||
; |
|
||||
#IF (AYMODE == AYMODE_RCZ180) |
|
||||
AY_RSEL .EQU $68 |
|
||||
AY_RDAT .EQU $60 |
|
||||
#ENDIF |
|
||||
; |
|
||||
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,$F8 ; $FF - 11 111 111 |
|
||||
CALL AY_WRTPSG ; I/O PORTS DISABLED, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A ENABLE |
|
||||
; |
|
||||
LD B,3 |
|
||||
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 - R02 & R03 |
|
||||
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 D |
|
||||
; |
|
||||
AY_WRTPSG: |
|
||||
HB_DI |
|
||||
#IF (CPUFAM == CPU_Z180) |
|
||||
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 ; SELECT THE REGISTER WE |
|
||||
OUT (AY_RSEL),A ; WANT TO WRITE TO |
|
||||
LD A,E ; WRITE THE VALUE TO |
|
||||
OUT (AY_RDAT),A ; THE SELECTED REGISTER |
|
||||
#IF (CPUFAM == CPU_Z180) |
|
||||
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: |
|
||||
#IF ((AYMODE == AYMODE_SCG) | (AYMODE == AYMODE_N8)) |
|
||||
LD A,$FF |
|
||||
OUT (AY_ACR),A ; INIT AUX CONTROL REG |
|
||||
#ENDIF |
|
||||
XOR A |
|
||||
RET |
|
||||
Loading…
Reference in new issue