|
|
| version 1.4, 2004/08/04 15:04:51 | version 1.5, 2004/08/04 16:28:46 |
|---|---|
| Line 118 static void setintr(IDEDRV drv) { | Line 118 static void setintr(IDEDRV drv) { |
| 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; |
| setintr(drv); | setintr(drv); |
| Line 251 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 273 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 285 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 297 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 318 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 331 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 362 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 408 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 440 static void IOOUTCALL ideio_o74c(UINT po | Line 501 static void IOOUTCALL ideio_o74c(UINT po |
| } | } |
| } | } |
| } | } |
| TRACEOUT(("ideio interrupt %sable", (dat & IDECTRL_NIEN) ? "di" : "en")); | TRACEOUT(("ideio interrupt %sable", (dat & IDECTRL_NIEN) ? "dis" : "en")); |
| TRACEOUT(("ideio devctrl %.4x,%.2x [%.4x:%.8x]", port, dat, CPU_CS, CPU_EIP)); | 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 456 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 472 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 486 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 500 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 514 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 529 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 544 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]", |
| Line 563 static REG8 IOINPCALL ideio_i74c(UINT po | Line 641 static REG8 IOINPCALL ideio_i74c(UINT po |
| IDEDRV drv; | IDEDRV drv; |
| (void)port; | |
| drv = getidedrv(); | drv = getidedrv(); |
| if (drv) { | if (drv) { |
| TRACEOUT(("ideio alt status %.2x [%.4x:%.8x]", | TRACEOUT(("ideio alt status %.2x [%.4x:%.8x]", |
| Line 600 void IOOUTCALL ideio_w16(UINT port, REG1 | Line 680 void IOOUTCALL ideio_w16(UINT port, REG1 |
| } | } |
| } | } |
| } | } |
| (void)port; | |
| } | } |
| REG16 IOINPCALL ideio_r16(UINT port) { | REG16 IOINPCALL ideio_r16(UINT port) { |
| Line 608 REG16 IOINPCALL ideio_r16(UINT port) { | Line 689 REG16 IOINPCALL ideio_r16(UINT port) { |
| 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 616 REG16 IOINPCALL ideio_r16(UINT port) { | Line 699 REG16 IOINPCALL 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 733 void ideio_bind(void) { | Line 816 void ideio_bind(void) { |
| iocore_attachinp(0x074c, ideio_i74c); | iocore_attachinp(0x074c, ideio_i74c); |
| } | } |
| } | } |
| #endif | |
| #endif /* SUPPORT_IDEIO */ |