File:  [RetroPC.NET] / xmil / fdd / fddfile.h
Revision 1.9: download - view: text, annotated - select for diffs
Fri Feb 4 15:42:11 2005 JST (20 years, 8 months ago) by yui
Branches: MAIN
CVS tags: HEAD
RetroPC CVS restarting 2005/02/04 (T.Yui)


#define	SUPPORT_DISKEXT


#include	"d88head.h"

enum {
	MAX_FDDFILE			= 4
};

enum {
	DISKTYPE_NOTREADY	= 0,
	DISKTYPE_BETA,
	DISKTYPE_D88
};

enum {
	DISKTYPE_2D			= 0,
	DISKTYPE_2DD,
	DISKTYPE_2HD
};

enum {
	FDDSTAT_BUSY		= 0x01,
	FDDSTAT_INDEX		= 0x02,
	FDDSTAT_DRQ			= 0x02,
	FDDSTAT_TRACK00		= 0x04,
	FDDSTAT_LOSTDATA	= 0x04,
	FDDSTAT_CRCERR		= 0x08,
	FDDSTAT_SEEKERR		= 0x10,
	FDDSTAT_RECNFND		= 0x10,
	FDDSTAT_HEADENG		= 0x20,
	FDDSTAT_RECTYPE		= 0x20,
	FDDSTAT_WRITEFAULT	= 0x20,
	FDDSTAT_WRITEP		= 0x40,
	FDDSTAT_NOTREADY	= 0x80
};

typedef struct {
	UINT8	c;
	UINT8	h;
	UINT8	r;
	UINT8	n;
	UINT8	flag;
	UINT8	padding;
	UINT8	size[2];
} TAOSEC;


typedef struct _fddfile		_FDDFILE;
typedef struct _fddfile		*FDDFILE;

typedef REG8 (*FDDSEEK)(FDDFILE fdd, REG8 media, UINT track);
typedef REG8 (*FDDREAD)(FDDFILE fdd, REG8 media, UINT track, REG8 sc,
												UINT8 *ptr, UINT *size);
typedef REG8 (*FDDWRITE)(FDDFILE fdd, REG8 media, UINT track, REG8 sc,
												const UINT8 *ptr, UINT size);
typedef REG8 (*FDDCRC)(FDDFILE fdd, REG8 media, UINT track, UINT num,
												UINT8 *ptr);
#if defined(SUPPORT_DISKEXT)
typedef UINT32 (*FDDSEC)(FDDFILE fdd, REG8 media, UINT track, REG8 sc);
#endif

typedef struct {
	UINT32	headersize;
	UINT8	tracks;
	UINT8	sectors;
	UINT8	n;
	UINT8	media;
} _XDFINFO, *XDFINFO;

typedef struct {
	UINT32		fd_size;
	_D88HEAD	head;
	UINT32		ptr[D88_TRACKMAX];
} _D88INFO, *D88INFO;

struct _fddfile {
	UINT8		type;
	UINT8		protect;
	UINT8		padding[2];
	UINT32		ftype;
	FDDSEEK		seek;
	FDDREAD		read;
	FDDWRITE	write;
	FDDWRITE	wrtrk;
	FDDCRC		crc;
#if defined(SUPPORT_DISKEXT)
	FDDSEC		sec;
#endif
	union {
		_XDFINFO	xdf;
		_D88INFO	d88;
	} inf;
	OEMCHAR		fname[MAX_PATH];
};


#ifdef __cplusplus
extern "C" {
#endif

extern	_FDDFILE	fddfile[MAX_FDDFILE];

void fddfile_initialize(void);

const OEMCHAR *fddfile_diskname(REG8 drv);
BRESULT fddfile_diskready(REG8 drv);
BRESULT fddfile_diskprotect(REG8 drv);

BRESULT fddfile_set(REG8 drv, const OEMCHAR *fname, UINT ftype, int ro);
void fddfile_eject(REG8 drv);

#ifdef __cplusplus
}
#endif


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