File:  [RetroPC.NET] / np2 / io / fdc.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Fri Oct 17 02:57:51 2003 JST (22 years ago) by yui
Branches: mie
CVS tags: start, rel_036, VER_0_72, VER_0_71, VER_0_70
Neko Project II


enum {
	FDCEVENT_NEUTRAL,
	FDCEVENT_CMDRECV,
	FDCEVENT_DATSEND,
	FDCEVENT_BUFRECV,
	FDCEVENT_BUFSEND,
	FDCEVENT_BUFSEND2,
	FDCEVENT_NEXTDATA,
	FDCEVENT_BUSY
};

enum {
	LENGTH_GAP0		= 80,
	LENGTH_SYNC		= 12,
	LENGTH_IM		= 4,
	LENGTH_GAP1		= 50,
	LENGTH_IAM		= 4,
	LENGTH_ID		= 4,
	LENGTH_CRC		= 2,
	LENGTH_GAP2		= 22,
	LENGTH_DAM		= 4,

	LENGTH_PRIAMP	= LENGTH_GAP0 + LENGTH_SYNC + LENGTH_IM + LENGTH_GAP1,
	LENGTH_SECTOR	= LENGTH_SYNC + LENGTH_IAM + LENGTH_ID + LENGTH_CRC +
						LENGTH_GAP2 + LENGTH_SYNC + LENGTH_DAM + LENGTH_CRC,

	LENGTH_TRACK	= 10600							// normal: (+-2%)
};

// real sector size = LENGTH_SECTOR + (128 << n) + gap3

enum {
	FDCRLT_NR		= 0x000008,
	FDCRLT_EC		= 0x000010,
	FDCRLT_SE		= 0x000020,
	FDCRLT_IC0		= 0x000040,
	FDCRLT_IC1		= 0x000080,

	FDCRLT_MA		= 0x000100,
	FDCRLT_NW		= 0x000200,
	FDCRLT_ND		= 0x000400,
	FDCRLT_OR		= 0x001000,
	FDCRLT_DE		= 0x002000,
	FDCRLT_EN		= 0x008000,

	FDCRLT_MD		= 0x010000,
	FDCRLT_BC		= 0x020000,
	FDCRLT_SN		= 0x040000,
	FDCRLT_SH		= 0x080000,
	FDCRLT_NC		= 0x100000,
	FDCRLT_DD		= 0x200000,
	FDCRLT_CM		= 0x400000,

	FDCRLT_EXT		= 0x80000000,

	FDCSTAT_CB		= 0x10,
	FDCSTAT_NDM		= 0x20,
	FDCSTAT_DIO		= 0x40,
	FDCSTAT_RQM		= 0x80
};

typedef struct {
	BYTE	us, hd;
	BYTE	mt, mf, sk;
	BYTE	eot, gpl, dtl;
	BYTE	C, H, R, N;
	BYTE	srt, hut, hlt, nd;
	BYTE	stp, ncn, sc, d;

	BYTE	status;
	BYTE	intreq;
	BYTE	lastdata;
	BYTE	tc;

	UINT32	stat[4];
	BYTE	treg[4];

	int		event;
	int		cmdp;
	int		cmdcnt;
	int		datp;
	int		datcnt;
	int		bufp;
	int		bufcnt;

	BYTE	cmd;
	BYTE	cmds[15];
	BYTE	data[16];
	BYTE	buf[0x8000];

	BYTE	ctrlfd;
	BYTE	crcn;

	BYTE	ctrlreg;
	BYTE	busy;

	BYTE	chgreg;
	BYTE	rpm;													// 1.44
} _FDC, *FDC;


#ifdef __cplusplus
extern "C" {
#endif

#define	CTRL_FDMEDIA	fdc.ctrlfd

void fdc_reset(void);
void fdc_bind(void);
void fdc_interrupt(void);

void DMACCALL fdc_DataRegWrite(BYTE data);
BYTE DMACCALL fdc_DataRegRead(void);
BYTE DMACCALL fdc_dmafunc(BYTE func);

void fdcsend_error7(void);
void fdcsend_success7(void);

void fdcbusy_error7(NEVENTITEM item);

#ifdef __cplusplus
}
#endif


RetroPC.NET-CVS <cvs@retropc.net>