YM2151 Detection

From 8BitDev.org - Atari 7800 Development Wiki
Jump to: navigation, search
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