--- uae/src/disk.c 2018/04/24 17:07:10 1.1.1.15 +++ uae/src/disk.c 2018/04/24 17:12:21 1.1.1.17 @@ -1037,6 +1037,35 @@ static void dodmafetch (void) dma_tab[0] = 0xffffffff; } +/* this is very unoptimized. DSKBYTR is used very rarely, so it should not matter. */ + +uae_u16 DSKBYTR (int hpos) +{ + uae_u16 v; + int i; + + i = 0; + while (hpos > dskbytr_cycle[i + 1]) + i++; + v = dskbytr_tab[i]; + dskbytr_tab[i] &= ~0x8000; + if (wordsync_cycle[0] != 255) { + i = 0; + while (hpos < wordsync_cycle[i]) + i++; + if (hpos - wordsync_cycle[i] <= WORDSYNC_CYCLES) + v |= 0x1000; + } + if (dskdmaen && (dmacon & 0x210) == 0x210) + v |= 0x4000; + if (dskdmaen == 3) + v |= 0x2000; + + disk_data_used = 0; + + return v; +} + static void DISK_start (void) { int dr; @@ -1195,35 +1224,6 @@ void DSKLEN (uae_u16 v, int hpos) } } -/* this is very unoptimized. DSKBYTR is used very rarely, so it should not matter. */ - -uae_u16 DSKBYTR (int hpos) -{ - uae_u16 v; - int i; - - i = 0; - while (hpos > dskbytr_cycle[i + 1]) - i++; - v = dskbytr_tab[i]; - dskbytr_tab[i] &= ~0x8000; - if (wordsync_cycle[0] != 255) { - i = 0; - while (hpos < wordsync_cycle[i]) - i++; - if (hpos - wordsync_cycle[i] <= WORDSYNC_CYCLES) - v |= 0x1000; - } - if (dskdmaen && (dmacon & 0x210) == 0x210) - v |= 0x4000; - if (dskdmaen == 3) - v |= 0x2000; - - disk_data_used = 0; - - return v; -} - /* not a real hardware register */ uae_u16 DSKDATR (int hpos) { @@ -1340,8 +1340,9 @@ uae_u8 *restore_disk(int num,uae_u8 *src drv->drive_id_scnt = restore_u8 (); drv->mfmpos = restore_u32 (); restore_u32 (); - strncpy(currprefs.df[num],src,255); - src+=strlen(src)+1; + strncpy(changed_prefs.df[num],src,255); + changed_prefs.df[num][255] = 0; + src += strlen(src) + 1; return src; }