*
* 6581.asm - SID-Emulation
*
* Copyright (C) 1994-1995 by Christian Bauer
*

*
* Anmerkungen:
* ------------
*
* Die SID-Emulation benötigt einen echten C64-SID, der im
* Adreßraum $a00001-$a00039 (Register an den ungeraden Adressen)
* eingeblendet ist (z.B. auf einer Zorro-II-Karte).
*
* Wegen Timing-Problemen mit der Karte werden Lesezugriffe
* aus SID-Registern simuliert.
*
* Die Power-LED ist mit dem Reset-Eingang des SID verbunden,
* d.h. ein kurzes Aus- und Einschalten der LED setzt den SID
* zurück.
*

		MACHINE	68020

		INCLUDE	"exec/types.i"
		INCLUDE	"exec/macros.i"

		XREF	_GfxBase

		XDEF	Reset6581
		XDEF	ReadFrom6581
		XDEF	WriteTo6581
		XDEF	UseSIDCard	;Prefs

		SECTION	"CODE",CODE


**
** SID zurücksetzen
**

Reset6581	tst.w	UseSIDCard
		beq	1$
		move.l	a6,-(sp)
		move.l	_GfxBase,a6
		JSRLIB	WaitTOF
		bset	#1,$bfe001	;LED aus
		JSRLIB	WaitTOF
		bclr	#1,$bfe001	;LED an
		move.l	(sp)+,a6
1$		rts


**
** Aus einem SID-Register lesen
** d0.w: Registernummer ($00-$1f)
** Rückgabe: d0.b: Byte
**
** Darf das obere Wort von d0 und d1 nicht verändern!
** Darf a1 nicht verändern!
**

ReadFrom6581	cmp.b	#$19,d0
		beq	ReadFF
		cmp.b	#$1a,d0
		beq	ReadFF
		cmp.b	#$1b,d0
		beq	ReadRnd
		moveq	#0,d0
		rts

ReadFF		move.b	#-1,d0		;A/D-Wandler
		rts

ReadRnd		move.b	$dff007,d0	;Zufallswert
		rts


**
** In ein SID-Register schreiben
** d0.w: Registernummer ($00-$1f)
** d1.b: Byte
**
** Darf das obere Wort von d0 und d1 nicht verändern!
**

WriteTo6581	tst.w	UseSIDCard(pc)
		beq	1$
		lea	$a00001,a0	;SID-Karte
		move.b	d1,(a0,d0.w*2)
1$		rts


**
** Datenbereich
**

; Flag: SID-Karte ansprechen
UseSIDCard	dc.w	0

		END
