;Vorbereitung um auf die Diskregister zugreifen zu können

 include "exec/types.i"
 include "exec/ports.i"
 include "exec/memory.i"
 include "exec/execbase.i"

;Eignen Macros

CALLSYS	MACRO
	jsr _LVO\1(a6)
	ENDM
LINKSYS	MACRO
	move.l a6,-(a7)
	move.l \2,a6
	jsr _LVO\1(a6)
	move.l (a7)+,a6
	ENDM
XLIB	MACRO
	XREF _LVO\1
	ENDM

;------------------------------------------------

 XREF	_AbsExecBase

 XREF	_CreatePort	;Funktion zum Erstellen eines Ports
 XREF	_DeletePort ;Funktion zum Entfernen eines Ports
 XREF	_CreateIO	;Funktion zum Erstellen einer Message
 XREF	_DeleteIO	;Funktion zum Entfernen einer Message

 XLIB	FindName	;Exec-Funktion zum Finden der Resource-Strukur

;------------------------------------------------
;Struktur die unsere globalen Varriablen beinnhaltet
;Die Struktur wird im Stapel abgelegt

 STRUCTURE	glogal,0
	APTR	MyPort
	APTR	MyMsg
	APTR	TrackResource
	WORD	ADKCON
	LABEL	global_size

;------------------------------------------------
;Offsets zum Aufruf der Disk-Resource Funktionen zum
;An- und Abmelden der Laufwerke

_LVOGetDrive	EQU	-18
_LVODropDrive	EQU	-24

main:
	move.l	_AbsExecBase,a6	;ExecBase nach A6
	lea	-global_size(a7),a7	;Platz im Stapel für 
				;Struktur
	move.l	a7,a5		;Zeiger auf Struktur
	suba.l	a0,a0		;kein Zeiger auf Name
	jsr	_CreatePort		;Reply-Port erstellen
	move.l	d0,MyPort(a5)	;Zeiger auf Port
	beq	1$		;Fehler, dann Ende
	move.l	d0,a0		;Zeiger auf Port
	move.l	#MN_SIZE,d0		;Größe eine Message-
				;Struktur
	jsr	_CreateIO		;Struktur erstellen
	move.l	d0,MyMsg(a5)	;Zeiger auf Message
	beq	2$		;Fehler, dan Ende

	lea	ResName(pc),a1	;Zeiger auf Namen
	lea	ResourceList(a6),a0	;Zeiger auf Resource-
				;Liste in der ExecBase-
				;Struktur
	CALLSYS	FindName		;Resource finden
	move.l	d0,TrackResource(a5)	;Zeiger merken
	beq	3$		;nicht gefunden, Ende

	move.l	MyMsg(a5),a1	;Zeiger auf Message
	LINKSYS	GetDrive,TrackResource(a5) ;Laufwerk anmelden

	move.w	$DFF010,d0		;ADKCON Register retten
	clr.b	d0		;unteres Bytes löschen
	bset	#15,d0		;CLR/SET -Bit setzen
	move.w	d0,ADKCON(a5)	;Wert merken
	
;Eigene Zugriffe auf die Disk-Register

	move.w	#$7f00,$DFF09E	;ADKCON löschen
	move.w	ADKCON(a5),$DFF09E	;Alten Wert eintragen

	LINKSYS	DropDrive,TrackResource(a5) ;Laufwerk abmelden

3$:	move.l	MyMsg(a5),a0	;Zeiger auf Message
	jsr	_DeleteIO		;Message entfernen
2$:	move.l	MyPort(a5),a0	;Zeiger auf Port
	jsr	_DeletePort		;Port entfernen
	clr.l	d0		;Rückmeldung = Null
1$:	lea	global_size(a7),a7	;Stapel berichtigen
	rts			;Rücksprung

;------------------------------------------------

ResName:	dc.b	'disk.resource',0

	END
