--- np2/fdd/sxsi.c 2004/01/26 14:49:14 1.8 +++ np2/fdd/sxsi.c 2005/02/07 14:46:09 1.13 @@ -19,10 +19,12 @@ const SASIHDD sasihdd[7] = { {33, 6, 615}, // 30MB {33, 8, 615}}; // 40MB +#if 0 static const _SXSIDEV defide = {615*33*8, 615, 256, 33, 8, SXSITYPE_IDE | SXSITYPE_HDD, 256, 0, {0x00}}; static const _SXSIDEV defscsi = {40*16*32*8, 40*16, 256, 32, 8, SXSITYPE_SCSI | SXSITYPE_HDD, 220, 0, {0x00}}; +#endif _SXSIDEV sxsi_dev[SASIHDD_MAX + SCSIHDD_MAX]; @@ -35,7 +37,7 @@ const SASIHDD *sasi; UINT i; sasi = sasihdd; - for (i=0; isize == 256) && (sxsi->sectors == sasi->sectors) && (sxsi->surfaces == sasi->surfaces) && @@ -46,6 +48,7 @@ const SASIHDD *sasi; } } + // ---- void sxsi_initialize(void) { @@ -53,7 +56,7 @@ void sxsi_initialize(void) { UINT i; ZeroMemory(sxsi_dev, sizeof(sxsi_dev)); - for (i=0; i<(sizeof(sxsi_dev)/sizeof(_SXSIDEV)); i++) { + for (i=0; ifh != FILEH_INVALID) { file_close((FILEH)sxsi->fh); @@ -246,7 +253,7 @@ void sxsi_trash(void) { SXSIDEV sxsiterm; sxsi = sxsi_dev; - sxsiterm = sxsi + (sizeof(sxsi_dev)/sizeof(_SXSIDEV)); + sxsiterm = sxsi + NELEMENTS(sxsi_dev); while(sxsi < sxsiterm) { if ((FILEH)sxsi->fh != FILEH_INVALID) { file_close((FILEH)sxsi->fh); @@ -259,16 +266,10 @@ void sxsi_trash(void) { static SXSIDEV getdrive(REG8 drv) { - UINT num; SXSIDEV ret; - num = drv & 0x0f; - if (num >= 2) { - return(NULL); - } - num += (drv & 0x20) >> 4; - ret = sxsi_dev + num; - if (ret->fname[0] == '\0') { + ret = sxsi_getptr(drv); + if ((ret == NULL) || (ret->fname[0] == '\0')) { return(NULL); } if ((FILEH)ret->fh == FILEH_INVALID) { @@ -282,7 +283,59 @@ static SXSIDEV getdrive(REG8 drv) { return(ret); } -REG8 sxsi_read(REG8 drv, long pos, BYTE *buf, UINT size) { +BOOL sxsi_issasi(void) { + + REG8 drv; + SXSIDEV sxsi; + BOOL ret; + UINT sxsiif; + + ret = FALSE; + for (drv=0x00; drv<0x04; drv++) { + sxsi = sxsi_getptr(drv); + if (sxsi) { + sxsiif = sxsi->type & SXSITYPE_IFMASK; + if (sxsiif == SXSITYPE_SASI) { + ret = TRUE; + } + else if (sxsiif == SXSITYPE_IDE) { + ret = FALSE; + break; + } + } + } + return(ret); +} + +BOOL sxsi_isscsi(void) { + + REG8 drv; + SXSIDEV sxsi; + + for (drv=0x20; drv<0x28; drv++) { + sxsi = sxsi_getptr(drv); + if ((sxsi) && (sxsi->type)) { + return(TRUE); + } + } + return(FALSE); +} + +BOOL sxsi_iside(void) { + + REG8 drv; + SXSIDEV sxsi; + + for (drv=0x00; drv<0x04; drv++) { + sxsi = sxsi_getptr(drv); + if ((sxsi) && (sxsi->type)) { + return(TRUE); + } + } + return(FALSE); +} + +REG8 sxsi_read(REG8 drv, long pos, UINT8 *buf, UINT size) { const _SXSIDEV *sxsi; long r; @@ -292,11 +345,11 @@ const _SXSIDEV *sxsi; if (sxsi == NULL) { return(0x60); } - pos = pos * sxsi->size + sxsi->headersize; - r = file_seek((FILEH)sxsi->fh, pos, FSEEK_SET); - if (r == -1) { + if ((pos < 0) || (pos >= sxsi->totals)) { return(0x40); } + pos = pos * sxsi->size + sxsi->headersize; + r = file_seek((FILEH)sxsi->fh, pos, FSEEK_SET); if (pos != r) { return(0xd0); } @@ -312,7 +365,7 @@ const _SXSIDEV *sxsi; return(0x00); } -REG8 sxsi_write(REG8 drv, long pos, const BYTE *buf, UINT size) { +REG8 sxsi_write(REG8 drv, long pos, const UINT8 *buf, UINT size) { const _SXSIDEV *sxsi; long r; @@ -322,11 +375,11 @@ const _SXSIDEV *sxsi; if (sxsi == NULL) { return(0x60); } - pos = pos * sxsi->size + sxsi->headersize; - r = file_seek((FILEH)sxsi->fh, pos, FSEEK_SET); - if (r == -1) { + if ((pos < 0) || (pos >= sxsi->totals)) { return(0x40); } + pos = pos * sxsi->size + sxsi->headersize; + r = file_seek((FILEH)sxsi->fh, pos, FSEEK_SET); if (pos != r) { return(0xd0); } @@ -347,7 +400,7 @@ REG8 sxsi_format(REG8 drv, long pos) { const _SXSIDEV *sxsi; long r; UINT16 i; - BYTE work[256]; + UINT8 work[256]; UINT size; UINT wsize; @@ -355,11 +408,11 @@ const _SXSIDEV *sxsi; if (sxsi == NULL) { return(0x60); } - pos = pos * sxsi->size + sxsi->headersize; - r = file_seek((FILEH)sxsi->fh, pos, FSEEK_SET); - if (r == -1) { + if ((pos < 0) || (pos >= sxsi->totals)) { return(0x40); } + pos = pos * sxsi->size + sxsi->headersize; + r = file_seek((FILEH)sxsi->fh, pos, FSEEK_SET); if (pos != r) { return(0xd0); }