YM2151 Detection
From 8BitDev.org - Atari 7800 Development Wiki
YM2151ADDR EQU $460
YM2151DATA EQU $461
XMCNTRL EQU $470
LDA #$70
STA CTRL ;TURN OFF MARIA
LDA #$84 ;enable YM
STA XMCNTRL
LDA #$00
TAX
YMLP1: JSR WRITEYMADDR
STA YM2151DATA
INX
BNE YMLP1
LDX #$14 ;disable counter
LDA #00
JSR WRITEYMADDR
LDX #$12 ;set counter
LDA #252
JSR WRITEYMADDR
LDX #$14 ;enable counter
LDA #$2A
JSR WRITEYMADDR
;TIMER IS NOW ACTIVE SO LETS COUNT WHILE WAITING FOR THE CLOCK TO OVERFLOW
LDY #$02
REPEAT: LDX #$00
POLLFLAG: INX
BEQ YMNOTFOUND ;timeout if no ym present
LDA YM2151DATA ;read counter flag
AND #$02
BNE CHECKCOUNT
JMP POLLFLAG
WRITEYMADDR
BIT YM2151DATA
BMI WRITEYMADDR
STX YM2151ADDR
WRITEYMDATA
BIT YM2151DATA
BMI WRITEYMDATA
STA YM2151DATA
RTS
CHECKCOUNT:
DEY
BEQ CHKCNT
LDX #$14 ;RESET COUNTER FLAG
LDA #$2A
JSR WRITEYMADDR
JMP REPEAT
CHKCNT:
CPX #$80 ;COUNT SHOULD BE $88, CHECK IT'S BETWEEN $80-$90
BCC YMNOTFOUND ;COUNT < $80
CPX #$90
BCS YMNOTFOUND ;COUND >=$90
YMFOUND:
LDA #$40
STA CTRL
LDA #$D4 ;MAKE BACKGROUND GREEN
STA $20
YMFOUNDLP: JMP YMFOUNDLP
YMNOTFOUND:
LDA #$40
STA CTRL
LDA #$46 ;MAKE BACKGROUND RED
STA $20
YMNOTFOUNDLP: JMP YMNOTFOUNDLP