
******************************************************************
*                                                                *
* Copyright (C) 1986, Commodore Amiga Inc.  All rights reserved. *
* Permission granted for non-commercial use			 *								*
*                                                                *
******************************************************************


*****************************************************************
*
* mydev.i -- external declarations for skeleton device
*
* SOURCE CONTROL
* ------ -------
* $Header: ramlib.i,v 31.1 85/10/13 23:12:51 neil Exp $
*
* $Locker: neil $
*
*****************************************************************
INFO_LEVEL	EQU	0	; Specify amount of debugging info desired
*INTRRUPT	SET	1	; Remove "*" to enable fake interrupt code

; stack size and priority for the process we will create
MYPROCSTACKSIZE	EQU	$800
MYPROCPRI	EQU	0

SECTOR		EQU	512	; # bytes per sector
SECSHIFT	EQU	9	; Shift count to convert byte # to sector #
RAMSIZE		EQU	512*200	; Use this much RAM per unit
IAMPULLING	EQU	7	; "I am pulling the interrupt" bit of INTCRL1
INTENABLE	EQU	4	; "Interrupt Enable" bit of INTCRL2
INTCTRL1	EQU	$40	; Interrupt control register offset on board
INTCTRL2	EQU	$42	; Interrupt control register offset on board
INTACK		EQU	$50	; My board's interrupt reset address
;-----------------------------------------------------------------------
;
; device command definitions
;
;-----------------------------------------------------------------------

	DEVINIT
	DEVCMD	CMD_MOTOR	; control the disk's motor (NO-OP)
	DEVCMD	CMD_SEEK	; explicit seek (NO-OP)
	DEVCMD	CMD_FORMAT	; format disk - equated to WRITE for RAMDISK
	DEVCMD	CMD_REMOVE	; notify when disk changes (NO-OP)
	DEVCMD	CMD_CHANGENUM	; number of disk changes (always 0)
	DEVCMD	CMD_CHANGESTATE	; is there a disk in the drive? (always TRUE)
	DEVCMD	CMD_PROTSTATUS	; is the disk write protected? (always FALSE)
	DEVCMD	CMD_RAWREAD	; Not supported
	DEVCMD	CMD_RAWWRITE	; Not supported
	DEVCMD	CMD_GETDRIVETYPE; Get drive type
	DEVCMD	CMD_GETNUMTRACKS; Get number of tracks
	DEVCMD	CMD_ADDCHANGEINT; Add disk change interrupt (NO-OP)
	DEVCMD	CMD_REMCHANGEINT; Remove disk change interrupt ( NO-OP)
	DEVCMD	MYDEV_END	; place marker -- first illegal command #

;-----------------------------------------------------------------------
;
; Layout of parameter packet for MakeDosNode
;
;-----------------------------------------------------------------------

    STRUCTURE MkDosNodePkt,0
	APTR	mdn_dosName	; Pointer to DOS file handler name
	APTR	mdn_execName	; Pointer to device driver name
	ULONG	mdn_unit	; Unit number
	ULONG	mdn_flags	; OpenDevice flags
	ULONG	mdn_tableSize	; Environment size
	ULONG	mdn_sizeBlock	; # longwords in a block
	ULONG	mdn_secOrg	; sector origin -- unused
	ULONG	mdn_numHeads	; number of surfaces
	ULONG	mdn_secsPerBlk	; secs per logical block -- unused
	ULONG	mdn_blkTrack	; secs per track
	ULONG	mdn_resBlks	; reserved blocks -- MUST be at least 1!
	ULONG	mdn_prefac	; unused
	ULONG	mdn_interleave	; interleave
	ULONG	mdn_lowCyl	; lower cylinder
	ULONG	mdn_upperCyl	; upper cylinder
	ULONG	mdn_numBuffers	; number of buffers
	ULONG	mdn_memBufType	; Type of memory for AmigaDOS buffers
	STRUCT	mdn_dName,5	; DOS file handler name "RAM0"
	LABEL   mdn_Sizeof	; Size of this structure

;-----------------------------------------------------------------------
;
; device data structures
;
;-----------------------------------------------------------------------

; maximum number of units in this device
MD_NUMUNITS	EQU	4

    STRUCTURE MyDev,LIB_SIZE
	ULONG	md_SysLib
	ULONG	md_SegList
	ULONG	md_Base		; Base address of this device's expansion board
	UBYTE	md_Flags
	UBYTE	md_pad
	STRUCT	md_Units,MD_NUMUNITS*4
	LABEL   MyDev_Sizeof

    STRUCTURE MyDevMsg,MN_SIZE
	APTR	mdm_Device
	APTR	mdm_Unit
	LABEL	MyDevMsg_Sizeof

    STRUCTURE MyDevUnit,UNIT_SIZE
	UBYTE	mdu_UnitNum
	UBYTE	mdu_SigBit		; Signal bit allocated for interrupts
	APTR	mdu_Device
	STRUCT	mdu_stack,MYPROCSTACKSIZE
 	STRUCT	mdu_is,IS_SIZE		; Interrupt structure
	STRUCT	mdu_tcb,TC_SIZE		; TCB for disk task
	STRUCT	mdu_Msg,MyDevMsg_Sizeof
	ULONG	mdu_SigMask		; Signal these bits on interrupt
	STRUCT	mdu_RAM,RAMSIZE		; RAM used to simulate disk
	LABEL	MyDevUnit_Sizeof

	;------ state bit for unit stopped
	BITDEF	MDU,STOPPED,2

MYDEVNAME	MACRO
		DC.B	'mydev.device',0
		ENDM

