|
|
|
@ -4,26 +4,32 @@ |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
AY_RCSND .EQU 0 ; 0 = EB MODULE, 1=MF MODULE |
|
|
|
; |
|
|
|
#IF (AYMODE == AYMODE_SCG) |
|
|
|
AY_RSEL .EQU $9A |
|
|
|
AY_RDAT .EQU $9B |
|
|
|
AY_RIN .EQU AY_RSEL |
|
|
|
AY_ACR .EQU $9C |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (AYMODE == AYMODE_N8) |
|
|
|
AY_RSEL .EQU $9C |
|
|
|
AY_RDAT .EQU $9D |
|
|
|
AY_RIN .EQU AY_RSEL |
|
|
|
AY_ACR .EQU N8_DEFACR |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (AYMODE == AYMODE_RCZ80) |
|
|
|
AY_RSEL .EQU $D8 |
|
|
|
AY_RDAT .EQU $D0 |
|
|
|
AY_RIN .EQU AY_RSEL+AY_RCSND |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (AYMODE == AYMODE_RCZ180) |
|
|
|
AY_RSEL .EQU $68 |
|
|
|
AY_RDAT .EQU $60 |
|
|
|
AY_RIN .EQU AY_RSEL+AY_RCSND |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
@ -87,12 +93,24 @@ AY38910_INIT: |
|
|
|
CALL PRTHEXBYTE |
|
|
|
; |
|
|
|
#IF ((AYMODE == AYMODE_SCG) | (AYMODE == AYMODE_N8)) |
|
|
|
; ACTIVATE DEVICE |
|
|
|
LD A,$FF ; BIT 4 IS AY RESET CONTROL, BIT 3 IS ACTIVE LED |
|
|
|
LD A,$FF ; ACTIVATE DEVICEBIT 4 IS AY RESET CONTROL, BIT 3 IS ACTIVE LED |
|
|
|
OUT (AY_ACR),A ; SET INIT AUX CONTROL REG |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
LD D,AY_R2CHBP ; SIMPLE HARDWARE PROBE |
|
|
|
LD E,$AA |
|
|
|
CALL AY_WRTPSG ; WRITE AND |
|
|
|
CALL AY_RDPSG |
|
|
|
LD A,$AA |
|
|
|
CP E |
|
|
|
JR Z,AY_FND |
|
|
|
|
|
|
|
CALL PRTSTRD \ .TEXT " NOT PRESENT$" |
|
|
|
|
|
|
|
LD A,$FF ; UNSUCCESSFULL INIT |
|
|
|
RET |
|
|
|
; |
|
|
|
LD IY, AY_IDAT ; SETUP FUNCTION TABLE |
|
|
|
AY_FND: LD IY, AY_IDAT ; SETUP FUNCTION TABLE |
|
|
|
LD BC, AY_FNTBL ; POINTER TO INSTANCE DATA |
|
|
|
LD DE, AY_IDAT ; BC := FUNCTION TABLE ADDRESS |
|
|
|
CALL SND_ADDENT ; DE := INSTANCE DATA PTR |
|
|
|
@ -114,7 +132,8 @@ AY38910_INIT: |
|
|
|
LD E,$00 ; SET VOLUME OFF |
|
|
|
CALL AY_SETV ; ON ALL CHANNELS |
|
|
|
; |
|
|
|
; RET |
|
|
|
XOR A ; SUCCESSFULL INIT |
|
|
|
RET |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; INITIALIZE DEVICE |
|
|
|
@ -390,6 +409,38 @@ AY_WRTPSG: |
|
|
|
POP AF ; GET SAVED DCNTL VALUE |
|
|
|
OUT0 (Z180_DCNTL),A ; AND RESTORE IT |
|
|
|
#ENDIF |
|
|
|
#IF (SBCV2004) |
|
|
|
LD A,0 ; SBC-V2-004 CHANGE TO |
|
|
|
OUT (112),A ; NORMAL CLOCK SPEED |
|
|
|
#ENDIF |
|
|
|
HB_EI |
|
|
|
RET |
|
|
|
|
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
; READ FROM REGISTER D AND RETURN WITH RESULT IN E |
|
|
|
; |
|
|
|
AY_RDPSG: |
|
|
|
HB_DI |
|
|
|
#IF (SBCV2004) |
|
|
|
LD A,8 ; SBC-V2-004 CHANGE |
|
|
|
OUT (112),A ; TO HALF CLOCK SPEED |
|
|
|
#ENDIF |
|
|
|
#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 READ |
|
|
|
IN A,(AY_RIN) ; READ SELECTED REGISTER |
|
|
|
LD E,A |
|
|
|
#IF (CPUFAM == CPU_Z180) |
|
|
|
POP AF ; GET SAVED DCNTL VALUE |
|
|
|
OUT0 (Z180_DCNTL),A ; AND RESTORE IT |
|
|
|
#ENDIF |
|
|
|
#IF (SBCV2004) |
|
|
|
LD A,0 ; SBC-V2-004 CHANGE TO |
|
|
|
OUT (112),A ; NORMAL CLOCK SPEED |
|
|
|
|