| version 1.2, 2004/03/22 05:38:47 | version 1.5, 2004/08/04 16:28:46 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
 |  |  | 
| // winでidentifyまでは取得に行くんだけどな… | // winでidentifyまでは取得に行くんだけどな…ってAnex86も同じか | 
 |  |  | 
 | #if defined(SUPPORT_IDEIO) | #if defined(SUPPORT_IDEIO) | 
 |  |  | 
| Line 62  static BOOL setidentify(IDEDRV drv) { | Line 62  static BOOL setidentify(IDEDRV drv) { | 
 |  |  | 
 | ZeroMemory(tmp, sizeof(tmp)); | ZeroMemory(tmp, sizeof(tmp)); | 
 | // とりあえず使ってる部分だけ | // とりあえず使ってる部分だけ | 
| tmp[0] = 0x045a; | tmp[0] = 0x0040; | 
 | tmp[1] = sxsi->cylinders; | tmp[1] = sxsi->cylinders; | 
 | tmp[3] = sxsi->surfaces; | tmp[3] = sxsi->surfaces; | 
 | tmp[4] = sxsi->sectors * 512; | tmp[4] = sxsi->sectors * 512; | 
 | //      tmp[5] = 0;                                     // ??? |  | 
 | tmp[6] = sxsi->sectors; | tmp[6] = sxsi->sectors; | 
 | for (i=0; i<10; i++) { | for (i=0; i<10; i++) { | 
 | tmp[10+i] = (serial[i*2] << 8) + serial[i*2+1]; | tmp[10+i] = (serial[i*2] << 8) + serial[i*2+1]; | 
 | } | } | 
 | tmp[20] = 3; |  | 
 | tmp[21] = 16; |  | 
 | tmp[22] = 4; | tmp[22] = 4; | 
 | for (i=0; i<4; i++) { | for (i=0; i<4; i++) { | 
 | tmp[23+i] = (firm[i*2] << 8) + firm[i*2+1]; | tmp[23+i] = (firm[i*2] << 8) + firm[i*2+1]; | 
| Line 80  static BOOL setidentify(IDEDRV drv) { | Line 77  static BOOL setidentify(IDEDRV drv) { | 
 | for (i=0; i<20; i++) { | for (i=0; i<20; i++) { | 
 | tmp[27+i] = (model[i*2] << 8) + model[i*2+1]; | tmp[27+i] = (model[i*2] << 8) + model[i*2+1]; | 
 | } | } | 
| //      tmp[47] = 0;                            // multiple | tmp[47] = 0x00;                         // multiple | 
| tmp[49] = 0x0f00; | tmp[49] = 0x0000;                       // LBA(1 << 9) | 
| tmp[50] = 0x4000; |  | 
 | tmp[51] = 0x0200; | tmp[51] = 0x0200; | 
| tmp[52] = 0x0200; | tmp[53] = 0x0001; | 
| tmp[53] = 0x0007; |  | 
 | tmp[54] = sxsi->cylinders; | tmp[54] = sxsi->cylinders; | 
 | tmp[55] = sxsi->surfaces; | tmp[55] = sxsi->surfaces; | 
 | tmp[56] = sxsi->sectors; | tmp[56] = sxsi->sectors; | 
| Line 95  static BOOL setidentify(IDEDRV drv) { | Line 90  static BOOL setidentify(IDEDRV drv) { | 
 | //      tmp[59] = 0; | //      tmp[59] = 0; | 
 | tmp[60] = (UINT16)size; | tmp[60] = (UINT16)size; | 
 | tmp[61] = (UINT16)(size >> 16); | tmp[61] = (UINT16)(size >> 16); | 
| tmp[63] = 0x0407; | tmp[63] = 0;                            // multi word DMA | 
 |  |  | 
| tmp[80] = 0x001e; | tmp[80] = 0x0006;                       // support ATA-1/2 | 
| tmp[81] = 0x0011; | tmp[81] = 0; | 
 |  |  | 
 | p = drv->buf; | p = drv->buf; | 
 | for (i=0; i<256; i++) { | for (i=0; i<256; i++) { | 
| Line 106  static BOOL setidentify(IDEDRV drv) { | Line 101  static BOOL setidentify(IDEDRV drv) { | 
 | p[1] = (BYTE)(tmp[i] >> 8); | p[1] = (BYTE)(tmp[i] >> 8); | 
 | p += 2; | p += 2; | 
 | } | } | 
 |  | drv->bufdir = IDEDIR_IN; | 
 | drv->bufpos = 0; | drv->bufpos = 0; | 
 | drv->bufsize = 512; | drv->bufsize = 512; | 
 | return(SUCCESS); | return(SUCCESS); | 
| Line 113  static BOOL setidentify(IDEDRV drv) { | Line 109  static BOOL setidentify(IDEDRV drv) { | 
 |  |  | 
 | static void setintr(IDEDRV drv) { | static void setintr(IDEDRV drv) { | 
 |  |  | 
| ideio.bank[0] = ideio.bank[1] | 0x80;                   // ???? | if (!(drv->ctrl & IDECTRL_NIEN)) { | 
| pic_setirq(IDE_IRQ); | TRACEOUT(("ideio: setintr()")); | 
|  | ideio.bank[0] = ideio.bank[1] | 0x80;                   // ???? | 
|  | pic_setirq(IDE_IRQ); | 
|  | } | 
 | } | } | 
 |  |  | 
 | static void cmdabort(IDEDRV drv) { | static void cmdabort(IDEDRV drv) { | 
 |  |  | 
 |  | TRACEOUT(("ideio: cmdabort()")); | 
 | drv->status = IDESTAT_DRDY | IDESTAT_ERR; | drv->status = IDESTAT_DRDY | IDESTAT_ERR; | 
 | drv->error = IDEERR_ABRT; | drv->error = IDEERR_ABRT; | 
| ideio.bank[0] = ideio.bank[1] | 0x80;                   // ???? | setintr(drv); | 
| pic_setirq(IDE_IRQ); |  | 
 | } | } | 
 |  |  | 
 | static void panic(const char *str, ...) { | static void panic(const char *str, ...) { | 
| Line 143  static void panic(const char *str, ...) | Line 142  static void panic(const char *str, ...) | 
 |  |  | 
 | static void incsec(IDEDRV drv) { | static void incsec(IDEDRV drv) { | 
 |  |  | 
| if (drv->dr & IDEDEV_LBA) { | if (!(drv->dr & IDEDEV_LBA)) { | 
| TRACEOUT(("ideio: incsec() LBA mode?")); | drv->sn++; | 
| return; | if (drv->sn <= drv->sectors) { | 
| } | return; | 
| drv->sn++; | } | 
| if (drv->sn <= drv->sectors) { | drv->sn = 1; | 
| return; | drv->hd++; | 
|  | if (drv->hd < drv->surfaces) { | 
|  | return; | 
|  | } | 
|  | drv->hd = 0; | 
|  | drv->cy++; | 
 | } | } | 
| drv->sn = 1; | else { | 
| drv->hd++; | TRACEOUT(("ideio: incsec() LBA mode?")); | 
| if (drv->hd < drv->surfaces) { | drv->sn++; | 
| return; | if (drv->sn) { | 
|  | return; | 
|  | } | 
|  | drv->cy++; | 
|  | if (drv->cy) { | 
|  | return; | 
|  | } | 
|  | drv->hd++; | 
 | } | } | 
 | drv->hd = 0; |  | 
 | drv->cy++; |  | 
 | } | } | 
 |  |  | 
 | static long getcursec(const _IDEDRV *drv) { | static long getcursec(const _IDEDRV *drv) { | 
 |  |  | 
 | long    ret; | long    ret; | 
 |  |  | 
| if (drv->dr & IDEDEV_LBA) { | if (!(drv->dr & IDEDEV_LBA)) { | 
|  | ret = drv->cy; | 
|  | ret *= drv->surfaces; | 
|  | ret += drv->hd; | 
|  | ret *= drv->sectors; | 
|  | ret += (drv->sn - 1); | 
|  | } | 
|  | else { | 
 | TRACEOUT(("ideio: getcursec() LBA mode?")); | TRACEOUT(("ideio: getcursec() LBA mode?")); | 
| return(-1); | ret = drv->sn; | 
|  | ret |= (drv->cy << 8); | 
|  | ret |= (drv->hd << 24); | 
 | } | } | 
 | ret = drv->cy; |  | 
 | ret *= drv->surfaces; |  | 
 | ret += drv->hd; |  | 
 | ret *= drv->sectors; |  | 
 | ret += (drv->sn - 1); |  | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| Line 186  static void readsec(IDEDRV drv) { | Line 199  static void readsec(IDEDRV drv) { | 
 | sec = getcursec(drv); | sec = getcursec(drv); | 
 | TRACEOUT(("readsec->drv %d sec %x", drv->sxsidrv, sec)); | TRACEOUT(("readsec->drv %d sec %x", drv->sxsidrv, sec)); | 
 | if (sxsi_read(drv->sxsidrv, sec, drv->buf, 512)) { | if (sxsi_read(drv->sxsidrv, sec, drv->buf, 512)) { | 
| TRACEOUT(("readerror!")); | TRACEOUT(("read error!")); | 
 | goto read_err; | goto read_err; | 
 | } | } | 
 | drv->bufdir = IDEDIR_IN; | drv->bufdir = IDEDIR_IN; | 
| Line 239  static void IOOUTCALL ideio_o642(UINT po | Line 252  static void IOOUTCALL ideio_o642(UINT po | 
 | drv->wp = dat; | drv->wp = dat; | 
 | TRACEOUT(("ideio set WP %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio set WP %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | 
 | } | } | 
 |  | (void)port; | 
 | } | } | 
 |  |  | 
 | static void IOOUTCALL ideio_o644(UINT port, REG8 dat) { | static void IOOUTCALL ideio_o644(UINT port, REG8 dat) { | 
 |  |  | 
 | IDEDRV  drv; | IDEDRV  drv; | 
 |  |  | 
 |  | (void)port; | 
 | drv = getidedrv(); | drv = getidedrv(); | 
 | if (drv) { | if (drv) { | 
 | drv->sc = dat; | drv->sc = dat; | 
 | TRACEOUT(("ideio set SC %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio set SC %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | 
 | } | } | 
 |  | (void)port; | 
 | } | } | 
 |  |  | 
 | static void IOOUTCALL ideio_o646(UINT port, REG8 dat) { | static void IOOUTCALL ideio_o646(UINT port, REG8 dat) { | 
| Line 261  static void IOOUTCALL ideio_o646(UINT po | Line 277  static void IOOUTCALL ideio_o646(UINT po | 
 | drv->sn = dat; | drv->sn = dat; | 
 | TRACEOUT(("ideio set SN %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio set SN %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | 
 | } | } | 
 |  | (void)port; | 
 | } | } | 
 |  |  | 
 | static void IOOUTCALL ideio_o648(UINT port, REG8 dat) { | static void IOOUTCALL ideio_o648(UINT port, REG8 dat) { | 
| Line 273  static void IOOUTCALL ideio_o648(UINT po | Line 290  static void IOOUTCALL ideio_o648(UINT po | 
 | drv->cy |= dat; | drv->cy |= dat; | 
 | TRACEOUT(("ideio set CYL %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio set CYL %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | 
 | } | } | 
 |  | (void)port; | 
 | } | } | 
 |  |  | 
 | static void IOOUTCALL ideio_o64a(UINT port, REG8 dat) { | static void IOOUTCALL ideio_o64a(UINT port, REG8 dat) { | 
| Line 285  static void IOOUTCALL ideio_o64a(UINT po | Line 303  static void IOOUTCALL ideio_o64a(UINT po | 
 | drv->cy |= dat << 8; | drv->cy |= dat << 8; | 
 | TRACEOUT(("ideio set CYH %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio set CYH %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | 
 | } | } | 
 |  | (void)port; | 
 | } | } | 
 |  |  | 
 | static void IOOUTCALL ideio_o64c(UINT port, REG8 dat) { | static void IOOUTCALL ideio_o64c(UINT port, REG8 dat) { | 
| Line 306  static void IOOUTCALL ideio_o64c(UINT po | Line 325  static void IOOUTCALL ideio_o64c(UINT po | 
 | dev->drv[drvnum].dr = dat & 0xf0; | dev->drv[drvnum].dr = dat & 0xf0; | 
 | dev->drv[drvnum].hd = dat & 0x0f; | dev->drv[drvnum].hd = dat & 0x0f; | 
 | TRACEOUT(("ideio set DRHD %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio set DRHD %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | 
 |  | (void)port; | 
 | } | } | 
 |  |  | 
 | static void IOOUTCALL ideio_o64e(UINT port, REG8 dat) { | static void IOOUTCALL ideio_o64e(UINT port, REG8 dat) { | 
 |  |  | 
 | IDEDRV  drv; | IDEDRV  drv; | 
 |  | IDEDEV  dev; | 
 |  |  | 
 | drv = getidedrv(); | drv = getidedrv(); | 
 | if (drv == NULL) { | if (drv == NULL) { | 
| Line 319  static void IOOUTCALL ideio_o64e(UINT po | Line 340  static void IOOUTCALL ideio_o64e(UINT po | 
 | drv->cmd = dat; | drv->cmd = dat; | 
 | TRACEOUT(("ideio set cmd %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio set cmd %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | 
 | switch(dat) { | switch(dat) { | 
| case 0x08:              // atapi reset | case 0x08:              // device reset | 
 | if (drv->device == IDETYPE_CDROM) { | if (drv->device == IDETYPE_CDROM) { | 
| drv->hd = 0; | drv->hd = 0x10; | 
| drv->sc = 1; | drv->sc = 0x01; | 
| drv->sn = 1; | drv->sn = 0x01; | 
 | drv->cy = 0xeb14; | drv->cy = 0xeb14; | 
| drv->status = 0; | drv->status = 0x00; | 
| drv->error = 0; | drv->error = 0x01; | 
|  | dev = getidedev(); | 
|  | if (dev) { | 
|  | if (dev->drivesel == 0) { | 
|  | if (dev->drv[0].device == IDETYPE_NONE) { | 
|  | drv->error = 0x00; | 
|  | } | 
|  | if (dev->drv[1].device == IDETYPE_NONE) { | 
|  | drv->error |= 0x80; | 
|  | } | 
|  | } | 
|  | else { | 
|  | if (dev->drv[1].device == IDETYPE_NONE) { | 
|  | drv->error = 0x00; | 
|  | } | 
|  | } | 
|  | } | 
 | } | } | 
 | break; | break; | 
 |  |  | 
| Line 350  static void IOOUTCALL ideio_o64e(UINT po | Line 387  static void IOOUTCALL ideio_o64e(UINT po | 
 | readsec(drv); | readsec(drv); | 
 | break; | break; | 
 |  |  | 
 |  | case 0x90:              // execute device diagnostic | 
 |  | TRACEOUT(("ideio execute device diagnostic [%.4x:%.8x]", | 
 |  | CPU_CS, CPU_EIP)); | 
 |  | dev = getidedev(); | 
 |  | if (dev) { | 
 |  | if (drv->device == IDETYPE_HDD) { | 
 |  | drv->hd = 0x00; | 
 |  | drv->sc = 0x01; | 
 |  | drv->sn = 0x01; | 
 |  | drv->cy = 0x0000; | 
 |  | } | 
 |  | else if (drv->device == IDETYPE_CDROM) { | 
 |  | drv->hd = 0x10; | 
 |  | drv->sc = 0x01; | 
 |  | drv->sn = 0x01; | 
 |  | drv->cy = 0xeb14; | 
 |  | } | 
 |  | drv->status = IDESTAT_DRDY; | 
 |  | drv->error = 0x01; | 
 |  | if (dev->drivesel == 0) { | 
 |  | if (dev->drv[0].device == IDETYPE_NONE) { | 
 |  | drv->error = 0x00; | 
 |  | } | 
 |  | if (dev->drv[1].device == IDETYPE_NONE) { | 
 |  | drv->error |= 0x80; | 
 |  | } | 
 |  | } | 
 |  | else { | 
 |  | if (dev->drv[1].device == IDETYPE_NONE) { | 
 |  | drv->error = 0x00; | 
 |  | } | 
 |  | } | 
 |  | } | 
 |  | break; | 
 |  |  | 
 | case 0x91:              // set parameters | case 0x91:              // set parameters | 
 | TRACEOUT(("ideio: set parameters dh=%x sec=%x", | TRACEOUT(("ideio: set parameters dh=%x sec=%x", | 
 | drv->dr | drv->hd, drv->sc)); | drv->dr | drv->hd, drv->sc)); | 
| Line 379  static void IOOUTCALL ideio_o64e(UINT po | Line 451  static void IOOUTCALL ideio_o64e(UINT po | 
 | } | } | 
 | break; | break; | 
 |  |  | 
 |  | case 0xa1:              // identify | 
 | case 0xec:              // identify | case 0xec:              // identify | 
 | TRACEOUT(("ideio: identify")); | TRACEOUT(("ideio: identify")); | 
 | if (setidentify(drv) == SUCCESS) { | if (setidentify(drv) == SUCCESS) { | 
| Line 395  static void IOOUTCALL ideio_o64e(UINT po | Line 468  static void IOOUTCALL ideio_o64e(UINT po | 
 | panic("command:%.2x", dat); | panic("command:%.2x", dat); | 
 | break; | break; | 
 | } | } | 
 |  | (void)port; | 
 | } | } | 
 |  |  | 
 | static void IOOUTCALL ideio_o74c(UINT port, REG8 dat) { | static void IOOUTCALL ideio_o74c(UINT port, REG8 dat) { | 
| Line 427  static void IOOUTCALL ideio_o74c(UINT po | Line 501  static void IOOUTCALL ideio_o74c(UINT po | 
 | } | } | 
 | } | } | 
 | } | } | 
| TRACEOUT(("ideio %.4x,%.2x [%.4x:%.8x]", port, dat, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio interrupt %sable", (dat & IDECTRL_NIEN) ? "dis" : "en")); | 
|  | TRACEOUT(("ideio devctrl %.2x [%.4x:%.8x]", dat, CPU_CS, CPU_EIP)); | 
|  | (void)port; | 
 | } | } | 
 |  |  | 
 | static void IOOUTCALL ideio_o74e(UINT port, REG8 dat) { | static void IOOUTCALL ideio_o74e(UINT port, REG8 dat) { | 
 |  |  | 
 | TRACEOUT(("ideio %.4x,%.2x [%.4x:%.8x]", port, dat, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio %.4x,%.2x [%.4x:%.8x]", port, dat, CPU_CS, CPU_EIP)); | 
 |  | (void)port; | 
 |  | (void)dat; | 
 | } | } | 
 |  |  | 
 |  |  | 
| Line 442  static REG8 IOINPCALL ideio_i642(UINT po | Line 520  static REG8 IOINPCALL ideio_i642(UINT po | 
 |  |  | 
 | IDEDRV  drv; | IDEDRV  drv; | 
 |  |  | 
 |  | (void)port; | 
 |  |  | 
 | drv = getidedrv(); | drv = getidedrv(); | 
 | if (drv) { | if (drv) { | 
 | drv->status &= ~IDESTAT_ERR; | drv->status &= ~IDESTAT_ERR; | 
| Line 458  static REG8 IOINPCALL ideio_i644(UINT po | Line 538  static REG8 IOINPCALL ideio_i644(UINT po | 
 |  |  | 
 | IDEDRV  drv; | IDEDRV  drv; | 
 |  |  | 
 |  | (void)port; | 
 |  |  | 
 | drv = getidedrv(); | drv = getidedrv(); | 
 | if (drv) { | if (drv) { | 
 | TRACEOUT(("ideio get SC %.2x [%.4x:%.8x]", drv->sc, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio get SC %.2x [%.4x:%.8x]", drv->sc, CPU_CS, CPU_EIP)); | 
| Line 472  static REG8 IOINPCALL ideio_i646(UINT po | Line 554  static REG8 IOINPCALL ideio_i646(UINT po | 
 |  |  | 
 | IDEDRV  drv; | IDEDRV  drv; | 
 |  |  | 
 |  | (void)port; | 
 |  |  | 
 | drv = getidedrv(); | drv = getidedrv(); | 
 | if (drv) { | if (drv) { | 
 | TRACEOUT(("ideio get SN %.2x [%.4x:%.8x]", drv->sn, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio get SN %.2x [%.4x:%.8x]", drv->sn, CPU_CS, CPU_EIP)); | 
| Line 486  static REG8 IOINPCALL ideio_i648(UINT po | Line 570  static REG8 IOINPCALL ideio_i648(UINT po | 
 |  |  | 
 | IDEDRV  drv; | IDEDRV  drv; | 
 |  |  | 
 |  | (void)port; | 
 |  |  | 
 | drv = getidedrv(); | drv = getidedrv(); | 
 | if (drv) { | if (drv) { | 
 | TRACEOUT(("ideio get CYL %.4x [%.4x:%.8x]", drv->cy, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio get CYL %.4x [%.4x:%.8x]", drv->cy, CPU_CS, CPU_EIP)); | 
| Line 500  static REG8 IOINPCALL ideio_i64a(UINT po | Line 586  static REG8 IOINPCALL ideio_i64a(UINT po | 
 |  |  | 
 | IDEDRV  drv; | IDEDRV  drv; | 
 |  |  | 
 |  | (void)port; | 
 |  |  | 
 | drv = getidedrv(); | drv = getidedrv(); | 
 | if (drv) { | if (drv) { | 
 | TRACEOUT(("ideio get CYH %.4x [%.4x:%.8x]", drv->cy, CPU_CS, CPU_EIP)); | TRACEOUT(("ideio get CYH %.4x [%.4x:%.8x]", drv->cy, CPU_CS, CPU_EIP)); | 
| Line 515  static REG8 IOINPCALL ideio_i64c(UINT po | Line 603  static REG8 IOINPCALL ideio_i64c(UINT po | 
 | IDEDRV  drv; | IDEDRV  drv; | 
 | REG8    ret; | REG8    ret; | 
 |  |  | 
 |  | (void)port; | 
 |  |  | 
 | drv = getidedrv(); | drv = getidedrv(); | 
 | if (drv) { | if (drv) { | 
 | ret = drv->dr | drv->hd; | ret = drv->dr | drv->hd; | 
| Line 530  static REG8 IOINPCALL ideio_i64e(UINT po | Line 620  static REG8 IOINPCALL ideio_i64e(UINT po | 
 |  |  | 
 | IDEDRV  drv; | IDEDRV  drv; | 
 |  |  | 
 |  | (void)port; | 
 |  |  | 
 | drv = getidedrv(); | drv = getidedrv(); | 
 | if (drv) { | if (drv) { | 
 | TRACEOUT(("ideio status %.2x [%.4x:%.8x]", | TRACEOUT(("ideio status %.2x [%.4x:%.8x]", | 
 | drv->status, CPU_CS, CPU_EIP)); | drv->status, CPU_CS, CPU_EIP)); | 
 |  | if (!(drv->ctrl & IDECTRL_NIEN)) { | 
 |  | TRACEOUT(("ideio: resetirq")); | 
 |  | pic_resetirq(IDE_IRQ); | 
 |  | } | 
 | return(drv->status); | return(drv->status); | 
 | } | } | 
 | else { | else { | 
| Line 543  static REG8 IOINPCALL ideio_i64e(UINT po | Line 639  static REG8 IOINPCALL ideio_i64e(UINT po | 
 |  |  | 
 | static REG8 IOINPCALL ideio_i74c(UINT port) { | static REG8 IOINPCALL ideio_i74c(UINT port) { | 
 |  |  | 
| TRACEOUT(("ideio %.4x [%.4x:%.8x]", port, CPU_CS, CPU_EIP)); | IDEDRV  drv; | 
| return(0xff); |  | 
|  | (void)port; | 
|  |  | 
|  | drv = getidedrv(); | 
|  | if (drv) { | 
|  | TRACEOUT(("ideio alt status %.2x [%.4x:%.8x]", | 
|  | drv->status, CPU_CS, CPU_EIP)); | 
|  | return(drv->status); | 
|  | } | 
|  | else { | 
|  | return(0xff); | 
|  | } | 
 | } | } | 
 |  |  | 
 |  |  | 
| Line 573  void IOOUTCALL ideio_w16(UINT port, REG1 | Line 680  void IOOUTCALL ideio_w16(UINT port, REG1 | 
 | } | } | 
 | } | } | 
 | } | } | 
 |  | (void)port; | 
 | } | } | 
 |  |  | 
| REG16 IOOUTCALL ideio_r16(UINT port) { | REG16 IOINPCALL ideio_r16(UINT port) { | 
 |  |  | 
 | IDEDRV  drv; | IDEDRV  drv; | 
 | REG16   ret; | REG16   ret; | 
 | BYTE    *p; | BYTE    *p; | 
 |  |  | 
 |  | (void)port; | 
 |  |  | 
 | drv = getidedrv(); | drv = getidedrv(); | 
 | if (drv == NULL) { | if (drv == NULL) { | 
 | return(0xff); | return(0xff); | 
| Line 589  REG16 IOOUTCALL ideio_r16(UINT port) { | Line 699  REG16 IOOUTCALL ideio_r16(UINT port) { | 
 | if ((drv->status & IDESTAT_DRQ) && (drv->bufdir == IDEDIR_IN)) { | if ((drv->status & IDESTAT_DRQ) && (drv->bufdir == IDEDIR_IN)) { | 
 | p = drv->buf + drv->bufpos; | p = drv->buf + drv->bufpos; | 
 | ret = p[0] + (p[1] << 8); | ret = p[0] + (p[1] << 8); | 
| TRACEOUT(("ide-data recv %4x (%.4x) [%.4x:%.8x]", | TRACEOUT(("ide-data recv %.4x (%.4x) [%.4x:%.8x]", | 
 | ret, drv->bufpos, CPU_CS, CPU_EIP)); | ret, drv->bufpos, CPU_CS, CPU_EIP)); | 
 | drv->bufpos += 2; | drv->bufpos += 2; | 
 | if (drv->bufpos >= drv->bufsize) { | if (drv->bufpos >= drv->bufsize) { | 
| Line 706  void ideio_bind(void) { | Line 816  void ideio_bind(void) { | 
 | iocore_attachinp(0x074c, ideio_i74c); | iocore_attachinp(0x074c, ideio_i74c); | 
 | } | } | 
 | } | } | 
 | #endif |  | 
 |  |  | 
 |  | #endif  /* SUPPORT_IDEIO */ |