|
|
| version 1.2, 2004/03/22 05:38:47 | version 1.3, 2004/03/23 13:32:50 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| // winでidentifyまでは取得に行くんだけどな… | // winでidentifyまでは取得に行くんだけどな…ってAnex86も同じか |
| #if defined(SUPPORT_IDEIO) | #if defined(SUPPORT_IDEIO) |
| Line 106 static BOOL setidentify(IDEDRV drv) { | Line 106 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 143 static void panic(const char *str, ...) | Line 144 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 201 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 379 static void IOOUTCALL ideio_o64e(UINT po | Line 394 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) { |