mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Basic ay-3-8910 harware detection
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user