/*
	Events for floppy
*/

#define	EV_FREE		0		/* Floppy is free again		*/
#define	EV_IGNORE	0		/* Ignore interrupt		*/
#define	EV_READY	1		/* Not ready - ready transition	*/
#define	EV_HOME		2		/* End of Home interrupt	*/
#define EV_SEEK		3		/* End of Seek interrupt	*/
#define	EV_READ		4		/* End of Preread for read	*/
#define	EV_WRITE	5		/* End of Preread for write	*/
#define	EV_RDADD	6		/* End of Read Address		*/
#define	EV_WRTTRK	7		/* End of Write track		*/



/*
	Meaning of floppy status word
*/

#define	FL_LOCK		001		/* Floppy locked		*/
#define	FL_WANT		002		/* Floppy wanted		*/


/*
	Interrupt information
*/

#define INTMASK		0x04		/* EOJ interrupt mask for tuart	*/
#define TMMASK		0x40		/* Timer mask			*/
#define	TMINT 		0xf7		/* Timer interrupt vector	*/



/*
	Minor device number definition
*/

#define	FDENSITY	0x40		/* 0=double density		*/
#define	FSIDES		0x20		/* 0=double sided		*/
#define	FDUAL		0x10		/* 1=dual drive (PERSCI)	*/
#define FDTRACK		0x08		/* 1=double tracked		*/
#define FSIZE		0x04		/* 0=8" 1=5"			*/
#define FUNIT		0x03		/* physical unit number mask	*/


/*
	Port assignements
*/

#define	AUX	port(B_FDC + 0x04)		/* Auxiliary command	*/
#define	STATUS	port(B_FDC + 0x30)		/* Disk status		*/
#define	COMMAND	port(B_FDC + 0x30)		/* Disk command		*/
#define	TRACK	port(B_FDC + 0x31)		/* Track		*/
#define	SECTOR	port(B_FDC + 0x32)		/* Sector		*/
#define	DATA	port(B_FDC + 0x33)		/* Data			*/
#define	FLAGS	port(B_FDC + 0x34)		/* Flags		*/
#define	CONTROL	port(B_FDC + 0x34)		/* Control		*/
#define IAPORT  port(B_FDC + 0x03)		/* Interrupt address	*/
#define TMPORT	port(B_FDC + 0x08)		/* Timer count port	*/



/*
	Disk Control Bits (output to control port)
*/

#define	FCAUTO	0x80			/* auto wait			*/
#define FCDEN	0x40			/* double density		*/
#define FCMOTOR	0x20			/* motor on			*/
#define FCMAXI	0x10			/* 8" disk			*/


/*
	Disk commands (output to command port)
*/

#define	RESTORE	0x0c			/* Restore with verify 3ms	*/
#define	SEEK	0x1c			/* Seek with verify 3ms		*/
#define	READ	0x82			/* Read side zero with side cmp	*/
#define	WRITE	0xa2			/* Write side zero with side cmp*/
#define WRTTRK	0xf4			/* Write track			*/
#define	RDADD	0xc4			/* Read address mark		*/
#define	FORCE	0xd1			/* Not Ready to ready interrupt	*/
#define	CANCEL	0xd0			/* Cancel command		*/
#define	SIDE	0x08			/* Side 1 compare		*/

typedef	struct flp{
	unsigned char	unit;		/* This unit number		*/
	unsigned char	track;		/* Current track		*/
	unsigned char	*intrlv;	/* Interleave table pointer	*/
	unsigned char	numtrk;		/* Number of tracks		*/
	unsigned char	sectrk;		/* Number of sectors/track	*/
	unsigned char	fstblk;		/* Number blocks on 1st track	*/
	unsigned char	secfst;		/* Number sectors on 1st track	*/
	unsigned short	secsiz;		/* bytes/sector			*/
	struct flp	*partner;	/* dual drive partner		*/
	unsigned char	voice;		/* voice coil drive flag	*/
	int		r_home;		/* Retry count for home		*/
	int		r_seek;		/* Retry count for seek		*/
	int		r_read;		/* Retry count for read		*/
	int		r_write;	/* Retry count for write	*/
} flp;

typedef struct {
	short unit;			/* Current unit			*/
	short side;			/* Current side			*/
	short track;			/* Current track		*/
	short sector;			/* Current sector		*/
	short error;			/* Current error number		*/
	unsigned char *buf;		/* Pointer to current buffer	*/
	short cnt;			/* I/O character count		*/
	unsigned char type;		/* Current disk type		*/
} dcurrent;
