*
* $Header: DH0:src/omti/dist/src/device/RCS/Omti_Device.a,v 1.1 92/11/25 02:14:30 Barnard Exp $
*

*
* These are the sources for the exec.device for the
* omti harddisk solution
*
*
				NOLIST

* DEBUG			set 1

				include "exec/types.i"
				include "exec/lists.i"
				include "exec/memory.i"
				include "exec/initializers.i"
				include "exec/resident.i"
				include "exec/interrupts.i"
				include "exec/errors.i"
				include "exec/io.i"
				include "exec/execbase.i"
				include "hardware/custom.i"
				include "hardware/intbits.i"

* Offsets fuer verwendete Funktionen

AllocMem		equ	-198		; Speicherverwaltung
FreeMem			equ	-210
MakeFunctions	equ	-90			; Aufbau von Funktions-Jumptable
AddIntServer	equ	-168		; Interrupt-Seververwaltung
RemIntServer	equ	-174
AddDevice		equ	-432		; Device einbinden
RemDevice		equ	-438
ReplyMsg		equ	-378		; Message beantworten

**** Hardware abhaengige Konstanten

execbase		equ	4			; System-Basis
custom			equ	$dff000		; Basis fuer Custom-Chips

				LIST

**** Eingebundene System-Files

				include	"/asminclude/parablock.i"		; Definitionen fuer Parameter
				include	"/asminclude/omti.i"			; Befehle und Fehlermeldungen
				include	"/asminclude/omtihard.i"		; Hardware-Konstante
				include	"/asminclude/omtistruct.i"		; Strukturen fuer Device und Drive

**** aktuelle Version

DEVICE_VERSION		equ	4
DEVICE_REVISION		equ	0
DEVICE_PRIORITY		equ	0
INTERRUPT_PRIORITY	equ	100

**** Parameter fuer die Platten

;NOF_SECS		equ 17		; fuer MFM-Controller
NOF_SECS		equ 26		; fuer RLL-Controller
SECSIZE			equ	512		; fuer alle Omtis

falsestart		moveq.l		#1,d0
				rts

**** Initialisierung mittels RomTag ****

				;STRUCTURE RT,0
init_dev_desc	dc.w	RTC_MATCHWORD
				dc.l	init_dev_desc
				dc.l	endcode
				dc.b	RTF_AUTOINIT
				dc.b	DEVICE_VERSION
				dc.b	NT_DEVICE
				dc.b	DEVICE_PRIORITY
				dc.l	name
				dc.l	idstr
				dc.l	inittab
				;LABEL RT_SIZE

* Auto-Init-Tabelle

inittab			dc.l	d_Sizeof				; Größe der Struktur
				dc.l	func_table
				dc.l	data_table
				dc.l	init

******* Funktionstabelle ********

func_table		dc.l	DeviceOpen 		; Entry-Punkt fuer OpenDevice
				dc.l	DeviceClose		; Entry-Punkt fuer CloseDevice
				dc.l	DeviceExpunge	; Entry-Punkt fuer DevExpunge
				dc.l	DeviceNull		; reserved
				dc.l	DeviceBeginIO	; Entry-Punkt fuer BeginIO
				dc.l	DeviceAbortIO	; Entry-Punkt fuer AbortIO
				dc.l	-1

data_table		INITBYTE	LN_TYPE,NT_DEVICE
				INITBYTE	LIB_FLAGS,LIBF_SUMUSED|LIBF_CHANGED
				INITWORD	LIB_VERSION,DEVICE_VERSION
				INITWORD	LIB_REVISION,DEVICE_REVISION

* Eigene Einträge

				INITBYTE	d_char0+dc_lun,LUN0
				INITBYTE	d_char1+dc_lun,LUN1

* Für den Interrupt

				INITBYTE	d_int+LN_TYPE,NT_INTERRUPT
				INITBYTE	d_int+LN_PRI,INTERRUPT_PRIORITY

				dc.l		0


	IFND	DEBUG

* Name des Devices

name			dc.b	'omti.device',0

* ID-String des Devices

idstr			dc.b	0,'$VER: omti.device 1.0 (04.02.91)',0
				cnop	0,2

	ENDC
	IFD		DEBUG

* Testname und Test-ID-String

name			dc.b	'test.device',0
idstr			dc.b	0,'$VER: test.device 1.0 (04.02.91)',0

	ENDC

******* Unterstuetzte Kommandos des Devices *******

****** Standard-Kommandos ******

jump			dc.w	(cmdinvalid-jump)		; CMD_INVALID
				dc.w	(cmdreset-jump)			; CMD_RESET
				dc.w	(cmdread-jump)			; CMD_READ
				dc.w	(cmdwrite-jump)			; CMD_WRITE
				dc.w	(cmdupdate-jump)		; CMD_UPDATE
				dc.w	(cmdclear-jump)			; CMD_CLEAR
				dc.w	(cmdstop-jump)			; CMD_STOP
				dc.w	(cmdstart-jump)			; CMD_START
				dc.w	(cmdflush-jump)			; CMD_FLUSH

****** NON-STANDARD KOMMANDOS ******

***** aehnlich dem Trackdisk-Device: ******

				dc.w	(cmdmotor-jump)			; OD_MOTOR			; Motor on/off
				dc.w	(cmdseek-jump)			; OD_SEEK			; Seeken fuer Tests
				dc.w	(cmdformat-jump)		; OD_FORMAT			; Formatieren
				dc.w	(cmdremove-jump)		; OD_REMOVE			; fuer Diskwechsel
				dc.w	(cmdchangenum-jump)		; OD_CHANGENUM		; Anzahl der Diskwechsel
				dc.w	(cmdchangestate-jump)	; OD_CHANGESTATE	; Disk im Laufwerk?
				dc.w	(cmdprotstatus-jump)	; OD_PROTSTATUS		; Disk writeprotected?
				dc.w	(cmdreadraw-jump)		; OD_READRAW		; Lies rohen Track
				dc.w	(cmdwriteraw-jump)		; OD_WRITERAW		; Schreibe rohen Track
				dc.w	(cmdgetdrivetyp-jump)	; OD_GETDRIVETYPE	; Get Drivetyp
				dc.w	(cmdgetmaxtracks-jump)	; OD_GETNUMTRACKS	; Get # of Tracks

* Einbindung der Code-Segmente

				include	"omti_dev.a"	; Alles, was zum Device gehoert
				include	"omti_cmd.a"	; Alles, was zu den CMDs gehoert


* Initialize Drive Charakteristics fuer Drive 0
* 1 Cylinder, 1 Head, Red. Write Current, Precomp. Cyl

InitDrive		dc.b	omti_c_idc,$00,$00,$00,$00,$00
				dc.b	$00,$01,$01,$03,$ff,$01,$2c,$00

* Sense: hole Sense-Bytes vom Controller

sense			dc.b	omti_c_reqsens,$00,$00,$00,$00,$00

* Tdr: Teste, ob Drive bereit ist

tdr				dc.b	omti_c_tdr,$00,$00,$00,$00,$00

* ReadFirst: Lies ersten Block von der Platte; verwende dazu Steprate 7

readfirst		dc.b	omti_c_read,$00,$00,$00,$01,$07

endcode			end
