--- xmil/io/fdc.c 2004/08/13 01:35:59 1.13 +++ xmil/io/fdc.c 2004/08/14 12:16:17 1.15 @@ -17,7 +17,7 @@ void neitem_fdcbusy(UINT id) { fdc.s.busy = FALSE; if (fdc.s.bufdir) { - TRACEOUT(("dma ready!")); +// TRACEOUT(("dma ready!")); dmac_sendready(TRUE); } (void)id; @@ -29,6 +29,10 @@ static void setbusy(SINT32 clock) { fdc.s.busy = TRUE; nevent_set(NEVENT_FDC, clock, neitem_fdcbusy, NEVENT_ABSOLUTE); } + else { + fdc.s.busy = FALSE; + nevent_reset(NEVENT_FDC); + } } static void setmotor(REG8 drvcmd) { @@ -240,6 +244,7 @@ static REG8 crccmd(void) { track = (fdc.s.c << 1) + fdc.s.h; 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); if (stat & FDDSTAT_RECNFND) { fdc.s.crcnum = 0; @@ -249,6 +254,7 @@ static REG8 crccmd(void) { fdc.s.bufdir = FDCDIR_IN; fdc.s.bufsize = 6; fdc.s.rreg = fdc.s.buffer[0]; + fdc.s.crcnum++; } else { fdc.s.bufdir = FDCDIR_NONE; @@ -322,9 +328,6 @@ void IOOUTCALL fdc_o(UINT port, REG8 val setbusy(20); switch(cmd) { case 0x00: // リストア - // if (value & 8) { // LAYDOCK - // setbusy(0); - // } fdc.s.motor = 0x80; // モーターOn? fdc.s.c = 0; fdc.s.step = 1; @@ -387,6 +390,7 @@ void IOOUTCALL fdc_o(UINT port, REG8 val case 0x0d: // フォースインタラプト setbusy(0); // 必要ない? // fdc.s.skip = 0; // 000330 + fdc.s.stat = 0; dmac_sendready(FALSE); break; @@ -445,7 +449,7 @@ REG8 IOINPCALL fdc_i(UINT port) { REG8 ret; - TRACEOUT(("fdc inp %.4x", port)); +// TRACEOUT(("fdc inp %.4x", port)); if ((port & (~7)) != 0x0ff8) { return(0xff); @@ -482,7 +486,7 @@ REG8 IOINPCALL fdc_i(UINT port) { if (fdc.s.motor) { if (fdc.s.bufdir == FDCDIR_IN) { 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(); } }