--- np2/fdd/sxsi.c 2004/01/27 07:24:25 1.10 +++ np2/fdd/sxsi.c 2004/03/23 13:32:50 1.12 @@ -66,16 +66,18 @@ SXSIDEV sxsi_getptr(REG8 drv) { UINT num; num = drv & 0x0f; - if (!(drv & 0x20)) { // SASI or IDE - if (num < 2) { + if (!(drv & 0x20)) { // SASI or IDE + if (num < SASIHDD_MAX) { return(sxsi_dev + num); } } +#if defined(SUPPORT_SCSI) else { - if (num < 4) { // SCSI + if (num < SCSIHDD_MAX) { // SCSI return(sxsi_dev + SASIHDD_MAX + num); } } +#endif return(NULL); } @@ -219,12 +221,14 @@ void sxsi_open(void) { drv++; } } +#if defined(SUPPORT_SCSI) drv = 0x20; for (i=0; i<4; i++) { if (sxsi_hddopen(drv, np2cfg.scsihdd[i]) == SUCCESS) { drv++; } } +#endif } void sxsi_flash(void) { @@ -262,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) { @@ -347,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); } @@ -377,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); } @@ -410,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); }