drv->trackspeed = get_floppy_speed_from_image(drv);
#if REVOLUTION_DEBUG
if (1 || drv->mfmpos != 0) {
- write_log (_T("REVOLUTION: DMA=%d %d %d/%d %d %d %d\n"), dskdmaen, drv->trackspeed, drv->mfmpos, drv->tracklen, drv->indexoffset, drv->floppybitcounter);
+ write_log (_T("REVOLUTION: DMA=%d %d %d/%d %d %d\n"), dskdmaen, drv->trackspeed, drv->mfmpos, drv->tracklen, drv->indexoffset, drv->floppybitcounter);
}
#endif
drv->revolution_check = 2;
while (floppybits >= drv->trackspeed) {
for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) {
if (drives[dr]) {
- floppy[dr].mfmpos++;
- floppy[dr].mfmpos %= drv->tracklen;
+ drive *drv2 = &floppy[dr];
+ drv2->mfmpos++;
+ drv2->mfmpos %= drv2->tracklen;
+ if (drv2->mfmpos == drv2->indexoffset) {
+ do_disk_index();
+ }
}
}
if (dmaen (DMA_DISK) && dskdmaen == DSKDMA_WRITE && dsklength > 0 && fifo_filled) {
int diskevent_flag = 0;
uae_u32 tword = word;
noselected = false;
- //int diff = drv->floppybitcounter % drv->trackspeed;
- int countcycle = startcycle; // + (diff ? drv->trackspeed - diff : 0);
+ int countcycle = startcycle;
while (countcycle < (maxhpos << 8)) {
if (drv->tracktiming[0])
updatetrackspeed (drv, mfmpos);
void DSKLEN (uae_u16 v, int hpos)
{
- int dr, prev = dsklen;
+ int dr;
+ int prevlen = dsklen;
+ int prevdatalen = dsklength;
int noselected = 0;
int motormask;
dsklen = v;
dsklength2 = dsklength = dsklen & 0x3fff;
- if ((v & 0x8000) && (prev & 0x8000)) {
+ if ((v & 0x8000) && (prevlen & 0x8000)) {
if (dskdmaen == DSKDMA_READ && !(v & 0x4000)) {
// update only currently active DMA length, don't change DMA state
- write_log(_T("warning: Disk read DMA length rewrite %d -> %d. (%04x) PC=%08x\n"), prev & 0x3fff, v & 0x3fff, v, M68K_GETPC);
+ write_log(_T("warning: Disk read DMA length rewrite %d -> %d. (%04x) PC=%08x\n"), prevlen & 0x3fff, v & 0x3fff, v, M68K_GETPC);
return;
}
dskdmaen = DSKDMA_READ;
if (dskdmaen != DSKDMA_OFF) {
/* Megalomania and Knightmare does this */
if (disk_debug_logging > 0 && dskdmaen == DSKDMA_READ)
- write_log (_T("warning: Disk read DMA aborted, %d words left PC=%x\n"), dsklength, M68K_GETPC);
+ write_log (_T("warning: Disk read DMA aborted, %d words left PC=%x\n"), prevdatalen, M68K_GETPC);
if (dskdmaen == DSKDMA_WRITE) {
- write_log (_T("warning: Disk write DMA aborted, %d words left PC=%x\n"), dsklength, M68K_GETPC);
+ write_log (_T("warning: Disk write DMA aborted, %d words left PC=%x\n"), prevdatalen, M68K_GETPC);
// did program write something that needs to be stored to file?
for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) {
drive *drv2 = &floppy[dr];
return;
}
- if ((v & 0x4000) && (prev & 0x4000)) {
+ if ((v & 0x4000) && (prevlen & 0x4000)) {
if (dsklength == 0)
return;
if (dsklength == 1) {
return;
}
if (dskdmaen == DSKDMA_WRITE) {
- write_log(_T("warning: Disk write DMA length rewrite %d -> %d\n"), prev & 0x3fff, v & 0x3fff);
+ write_log(_T("warning: Disk write DMA length rewrite %d -> %d\n"), prevlen & 0x3fff, v & 0x3fff);
return;
}
dskdmaen = DSKDMA_WRITE;