--- xmil/io/fdc.h 2004/08/08 16:39:03 1.2 +++ xmil/io/fdc.h 2005/02/04 06:42:11 1.12 @@ -1,28 +1,88 @@ +// #define SUPPORT_MOTORRISEUP + +enum { + FDCDIR_NONE = 0x00, + FDCDIR_TAO = 0x01, + FDCDIR_IN = 0x02, + FDCDIR_OUT = 0x03, +}; + +enum { + FDCMOTOR_STOP = 0, + FDCMOTOR_STARTING = 1, + FDCMOTOR_READY = 2, + FDCMOTOR_STOPING = 3 +}; + typedef struct { - UINT8 drv; UINT8 cmd; - short skip; - short off; - short crc_off; - UINT8 crc_dat[8]; - - UINT8 type; - UINT8 treg; - UINT8 sct_bak; + UINT8 ctype; UINT8 data; SINT8 step; + UINT8 drv; UINT8 motor; + UINT8 creg; + UINT8 rreg; UINT8 c; UINT8 h; UINT8 r; UINT8 n; - UINT32 busyclock; - UINT32 busystart; - BYTE media; - BYTE rreg; + UINT8 ctbl[4]; + + UINT8 media; + UINT8 stat; + + UINT8 bufmedia; + UINT8 bufunit; + UINT buftrack; + UINT8 bufsc; + UINT8 bufdir; + UINT8 bufwrite; + UINT8 bufmark; + UINT bufsize; + UINT bufpos; + + UINT8 busy; + UINT8 hole; + UINT8 curtime; + UINT8 equip; + UINT crcnum; + + SINT32 loopclock; + +#if defined(SUPPORT_MOTORRISEUP) + UINT8 motorevent[4]; + SINT32 motorclock[4]; +#endif + +#if !defined(CONST_DISKIMAGE) + UINT8 wt_mode; + UINT8 wt_sectors; + UINT8 wt_padding[2]; + UINT wt_ptr; + UINT wt_datpos; + UINT wt_datsize; + + UINT8 buffer[0x3000]; +#else + UINT8 crcbuf[6]; +#endif +} FDCSTAT; + +#if defined(CONST_DISKIMAGE) +typedef struct { + UINT8 *buffer; +} FDCEXT; +#endif + +typedef struct { + FDCSTAT s; +#if defined(CONST_DISKIMAGE) + FDCEXT e; +#endif } FDC; @@ -30,7 +90,12 @@ typedef struct { extern "C" { #endif -extern UINT8 fdcdummyread; +void neitem_fdcbusy(UINT id); +#if defined(SUPPORT_MOTORRISEUP) +void fdc_callback(void); +#else +#define fdc_callback() +#endif void IOOUTCALL fdc_o(UINT port, REG8 value); // x1_fdc_w REG8 IOINPCALL fdc_i(UINT port); // x1_fdc_r