| version 1.3, 2004/03/23 13:32:50 | version 1.4, 2004/08/04 15:04:51 | 
| 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 114  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) { | 
 |  |  | 
 | 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 443  static void IOOUTCALL ideio_o74c(UINT po | Line 440  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) ? "di" : "en")); | 
|  | TRACEOUT(("ideio devctrl %.4x,%.2x [%.4x:%.8x]", port, dat, CPU_CS, CPU_EIP)); | 
 | } | } | 
 |  |  | 
 | static void IOOUTCALL ideio_o74e(UINT port, REG8 dat) { | static void IOOUTCALL ideio_o74e(UINT port, REG8 dat) { | 
| Line 550  static REG8 IOINPCALL ideio_i64e(UINT po | Line 548  static REG8 IOINPCALL ideio_i64e(UINT po | 
 | 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 559  static REG8 IOINPCALL ideio_i64e(UINT po | Line 561  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); |  | 
|  | drv = getidedrv(); | 
|  | if (drv) { | 
|  | TRACEOUT(("ideio alt status %.2x [%.4x:%.8x]", | 
|  | drv->status, CPU_CS, CPU_EIP)); | 
|  | return(drv->status); | 
|  | } | 
|  | else { | 
|  | return(0xff); | 
|  | } | 
 | } | } | 
 |  |  | 
 |  |  | 
| Line 591  void IOOUTCALL ideio_w16(UINT port, REG1 | Line 602  void IOOUTCALL ideio_w16(UINT port, REG1 | 
 | } | } | 
 | } | } | 
 |  |  | 
| REG16 IOOUTCALL ideio_r16(UINT port) { | REG16 IOINPCALL ideio_r16(UINT port) { | 
 |  |  | 
 | IDEDRV  drv; | IDEDRV  drv; | 
 | REG16   ret; | REG16   ret; |