--- np2/fdd/sxsi.h 2003/11/07 18:31:24 1.2 +++ np2/fdd/sxsi.h 2005/02/12 12:40:39 1.10 @@ -1,42 +1,121 @@ +#if defined(SUPPORT_SCSI) enum { - HDDTYPE_SASI, - HDDTYPE_SCSI, - HDDTYPE_NONE + SASIHDD_MAX = 2, + SCSIHDD_MAX = 4 }; +#else +enum { + SASIHDD_MAX = 2, + SCSIHDD_MAX = 0 +}; +#endif + +enum { + SXSITYPE_NONE = 0x0000, + + SXSITYPE_HDD = 0x0001, + SXSITYPE_CDROM = 0x0002, + SXSITYPE_MO = 0x0003, + SXSITYPE_SCANNER = 0x0004, + SXSITYPE_DEVMASK = 0x000f, + + SXSITYPE_REMOVE = 0x0010, + + SXSITYPE_SASIMASK = 0x0700, + + SXSITYPE_SASI = 0x1000, + SXSITYPE_IDE = 0x2000, + SXSITYPE_SCSI = 0x3000, + SXSITYPE_IFMASK = 0xf000 +}; + + +typedef struct { + UINT8 sectors; + UINT8 surfaces; + UINT16 cylinders; +} SASIHDD; + +typedef struct { + UINT8 cylinders[2]; +} THDHDR; + +typedef struct { + char sig[16]; + char comment[0x100]; + UINT8 headersize[4]; + UINT8 cylinders[4]; + UINT8 surfaces[2]; + UINT8 sectors[2]; + UINT8 sectorsize[2]; + UINT8 reserved[0xe2]; +} NHDHDR; + +typedef struct { + UINT8 dummy[4]; + UINT8 hddtype[4]; + UINT8 headersize[4]; + UINT8 hddsize[4]; + UINT8 sectorsize[4]; + UINT8 sectors[4]; + UINT8 surfaces[4]; + UINT8 cylinders[4]; +} HDIHDR; + +typedef struct { + char sig[3]; + char ver[4]; + char delimita; + char comment[128]; + UINT8 padding1[4]; + UINT8 mbsize[2]; + UINT8 sectorsize[2]; + UINT8 sectors; + UINT8 surfaces; + UINT8 cylinders[2]; + UINT8 totals[4]; + UINT8 padding2[0x44]; +} VHDHDR; typedef struct { long totals; - UINT16 tracks; + UINT16 cylinders; UINT16 size; - BYTE sectors; - BYTE surfaces; + UINT8 sectors; + UINT8 surfaces; UINT16 type; UINT32 headersize; long fh; - char fname[MAX_PATH]; -} _SXSIHDD, *SXSIHDD; + OEMCHAR fname[MAX_PATH]; +} _SXSIDEV, *SXSIDEV; #ifdef __cplusplus extern "C" { #endif -extern _SXSIHDD sxsi_hd[4]; +extern const char sig_vhd[8]; +extern const char sig_nhd[15]; +extern const SASIHDD sasihdd[7]; void sxsi_initialize(void); -SXSIHDD sxsi_getptr(BYTE drv); -const char *sxsi_getname(BYTE drv); -BOOL sxsi_hddopen(BYTE drv, const char *file); +SXSIDEV sxsi_getptr(REG8 drv); +const OEMCHAR *sxsi_getname(REG8 drv); +BRESULT sxsi_hddopen(REG8 drv, const OEMCHAR *file); void sxsi_open(void); void sxsi_flash(void); void sxsi_trash(void); -BYTE sxsi_read(BYTE drv, long pos, BYTE *buf, UINT16 size); -BYTE sxsi_write(BYTE drv, long pos, const BYTE *buf, UINT16 size); -BYTE sxsi_format(BYTE drv, long pos); +BOOL sxsi_issasi(void); +BOOL sxsi_isscsi(void); +BOOL sxsi_iside(void); + +REG8 sxsi_read(REG8 drv, long pos, UINT8 *buf, UINT size); +REG8 sxsi_write(REG8 drv, long pos, const UINT8 *buf, UINT size); +REG8 sxsi_format(REG8 drv, long pos); #ifdef __cplusplus }