|
|
| 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; |