--- xmil/fdd/fddfile.h 2004/08/01 05:31:30 1.1 +++ xmil/fdd/fddfile.h 2004/08/15 12:32:11 1.6 @@ -1,9 +1,14 @@ -#define MAX_FDDFILE 4 +#define SUPPORT_DISKEXT + #include "d88head.h" enum { + MAX_FDDFILE = 4 +}; + +enum { DISKTYPE_NOTREADY = 0, DISKTYPE_BETA, DISKTYPE_D88 @@ -15,13 +20,61 @@ enum { 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 _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 { - OEMCHAR fname[MAX_PATH]; -// UINT8 type; -// UINT8 protect; - UINT8 padding[4]; -} _FDDFILE, *FDDFILE; + 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; + FDDCRC crc; +#if defined(SUPPORT_DISKEXT) + FDDSEC sec; +#endif + union { + _D88INFO d88; + } inf; + OEMCHAR fname[MAX_PATH]; +}; #ifdef __cplusplus @@ -32,12 +85,12 @@ extern _FDDFILE fddfile[MAX_FDDFILE]; void fddfile_initialize(void); -const OEMCHAR *fdd_diskname(REG8 drv); -BRESULT fdd_diskready(REG8 drv); -BRESULT fdd_diskprotect(REG8 drv); +const OEMCHAR *fddfile_diskname(REG8 drv); +BRESULT fddfile_diskready(REG8 drv); +BRESULT fddfile_diskprotect(REG8 drv); -BRESULT fdd_set(REG8 drv, const OEMCHAR *fname, UINT ftype, int ro); -BRESULT fdd_eject(REG8 drv); +BRESULT fddfile_set(REG8 drv, const OEMCHAR *fname, UINT ftype, int ro); +void fddfile_eject(REG8 drv); #ifdef __cplusplus }