|
|
| version 1.14, 2004/08/13 02:16:33 | version 1.15, 2004/08/14 12:16:17 |
|---|---|
| Line 29 static void setbusy(SINT32 clock) { | Line 29 static void setbusy(SINT32 clock) { |
| fdc.s.busy = TRUE; | fdc.s.busy = TRUE; |
| nevent_set(NEVENT_FDC, clock, neitem_fdcbusy, NEVENT_ABSOLUTE); | nevent_set(NEVENT_FDC, clock, neitem_fdcbusy, NEVENT_ABSOLUTE); |
| } | } |
| else { | |
| fdc.s.busy = FALSE; | |
| nevent_reset(NEVENT_FDC); | |
| } | |
| } | } |
| static void setmotor(REG8 drvcmd) { | static void setmotor(REG8 drvcmd) { |
| Line 240 static REG8 crccmd(void) { | Line 244 static REG8 crccmd(void) { |
| track = (fdc.s.c << 1) + fdc.s.h; | track = (fdc.s.c << 1) + fdc.s.h; |
| fdd = fddfile + fdc.s.drv; | fdd = fddfile + fdc.s.drv; |
| TRACEOUT(("fdd->crc %d %d %d", fdc.s.drv, track, fdc.s.crcnum)); | |
| stat = fdd->crc(fdd, fdc.s.media, track, fdc.s.crcnum, fdc.s.buffer); | stat = fdd->crc(fdd, fdc.s.media, track, fdc.s.crcnum, fdc.s.buffer); |
| if (stat & FDDSTAT_RECNFND) { | if (stat & FDDSTAT_RECNFND) { |
| fdc.s.crcnum = 0; | fdc.s.crcnum = 0; |
| Line 249 static REG8 crccmd(void) { | Line 254 static REG8 crccmd(void) { |
| fdc.s.bufdir = FDCDIR_IN; | fdc.s.bufdir = FDCDIR_IN; |
| fdc.s.bufsize = 6; | fdc.s.bufsize = 6; |
| fdc.s.rreg = fdc.s.buffer[0]; | fdc.s.rreg = fdc.s.buffer[0]; |
| fdc.s.crcnum++; | |
| } | } |
| else { | else { |
| fdc.s.bufdir = FDCDIR_NONE; | fdc.s.bufdir = FDCDIR_NONE; |
| Line 322 void IOOUTCALL fdc_o(UINT port, REG8 val | Line 328 void IOOUTCALL fdc_o(UINT port, REG8 val |
| setbusy(20); | setbusy(20); |
| switch(cmd) { | switch(cmd) { |
| case 0x00: // リストア | case 0x00: // リストア |
| // if (value & 8) { // LAYDOCK | |
| // setbusy(0); | |
| // } | |
| fdc.s.motor = 0x80; // モーターOn? | fdc.s.motor = 0x80; // モーターOn? |
| fdc.s.c = 0; | fdc.s.c = 0; |
| fdc.s.step = 1; | fdc.s.step = 1; |
| Line 387 void IOOUTCALL fdc_o(UINT port, REG8 val | Line 390 void IOOUTCALL fdc_o(UINT port, REG8 val |
| case 0x0d: // フォースインタラプト | case 0x0d: // フォースインタラプト |
| setbusy(0); // 必要ない? | setbusy(0); // 必要ない? |
| // fdc.s.skip = 0; // 000330 | // fdc.s.skip = 0; // 000330 |
| fdc.s.stat = 0; | |
| dmac_sendready(FALSE); | dmac_sendready(FALSE); |
| break; | break; |
| Line 469 REG8 IOINPCALL fdc_i(UINT port) { | Line 473 REG8 IOINPCALL fdc_i(UINT port) { |
| if (!(ret & 0x02)) { | if (!(ret & 0x02)) { |
| dmac_sendready(FALSE); | dmac_sendready(FALSE); |
| } | } |
| // TRACEOUT(("ret->%.2x", ret)); | TRACEOUT(("ret->%.2x", ret)); |
| return(ret); | return(ret); |
| case 1: // トラック | case 1: // トラック |
| Line 482 REG8 IOINPCALL fdc_i(UINT port) { | Line 486 REG8 IOINPCALL fdc_i(UINT port) { |
| if (fdc.s.motor) { | if (fdc.s.motor) { |
| if (fdc.s.bufdir == FDCDIR_IN) { | if (fdc.s.bufdir == FDCDIR_IN) { |
| fdc.s.data = fdc.s.buffer[fdc.s.bufpos]; | fdc.s.data = fdc.s.buffer[fdc.s.bufpos]; |
| // TRACEOUT(("read %.2x %.2x [%.4x]", fdc.s.data, fdc.s.bufpos, Z80_PC)); | TRACEOUT(("read %.2x - %.2x [%.4x]", fdc.s.bufpos, fdc.s.data, Z80_PC)); |
| bufposinc(); | bufposinc(); |
| } | } |
| } | } |