| 1329 | } |
| 1330 | |
| 1331 | static void UpdatePaging(BOOL initialize) |
| 1332 | { |
| 1333 | if (initialize) |
| 1334 | { |
| 1335 | // Importantly from: |
| 1336 | // . MemReset() -> ResetPaging(TRUE) |
| 1337 | // . MemInitializeFromSnapshot() -> MemUpdatePaging(TRUE); |
| 1338 | g_isMemCacheValid = !(IsAppleIIe(GetApple2Type()) && (GetCardMgr().QueryAux() == CT_Empty || GetCardMgr().QueryAux() == CT_80Col)); |
| 1339 | if (g_forceAltCpuEmulation) |
| 1340 | g_isMemCacheValid = false; |
| 1341 | } |
| 1342 | |
| 1343 | modechanging = 0; |
| 1344 | |
| 1345 | // SAVE THE CURRENT PAGING SHADOW TABLE |
| 1346 | LPBYTE oldshadow[256]; |
| 1347 | if (!initialize) |
| 1348 | memcpy(oldshadow,memshadow,256*sizeof(LPBYTE)); |
| 1349 | |
| 1350 | // UPDATE THE PAGING TABLES BASED ON THE NEW PAGING SWITCH VALUES |
| 1351 | UINT loop; |
| 1352 | if (initialize) |
| 1353 | { |
| 1354 | for (loop = 0x00; loop < 0xC0; loop++) |
| 1355 | memwrite[loop] = mem+(loop << 8); |
| 1356 | |
| 1357 | for (loop = 0xC0; loop < 0xD0; loop++) |
| 1358 | memwrite[loop] = NULL; |
| 1359 | } |
| 1360 | |
| 1361 | for (loop = 0x00; loop < 0x02; loop++) |
| 1362 | { |
| 1363 | memshadow[loop] = SW_ALTZP ? memaux + (loop << 8) : memmain + (loop << 8); |
| 1364 | |
| 1365 | // re-init this, since for //e aux slot 80-col(1KiB) card, this can change |
| 1366 | memwrite[loop] = mem + (loop << 8); |
| 1367 | } |
| 1368 | |
| 1369 | for (loop = 0x02; loop < 0xC0; loop++) |
| 1370 | { |
| 1371 | memshadow[loop] = SW_AUXREAD ? memaux+(loop << 8) |
| 1372 | : memmain+(loop << 8); |
| 1373 | |
| 1374 | memwrite[loop] = ((SW_AUXREAD != 0) == (SW_AUXWRITE != 0)) |
| 1375 | ? mem+(loop << 8) |
| 1376 | : SW_AUXWRITE ? memaux+(loop << 8) |
| 1377 | : memmain+(loop << 8); |
| 1378 | } |
| 1379 | |
| 1380 | for (loop = 0xC0; loop < 0xC8; loop++) |
| 1381 | { |
| 1382 | memdirty[loop] = 0; // mem(cache) can't be dirty for ROM (but STA $Csnn will set the dirty flag) |
| 1383 | const UINT uSlotOffset = (loop & 0x0f) * 0x100; |
| 1384 | if (loop == 0xC3) |
| 1385 | memshadow[loop] = (SW_SLOTC3ROM && !SW_INTCXROM) ? pCxRomPeripheral+uSlotOffset // C300..C3FF - Slot 3 ROM (all 0x00's) |
| 1386 | : pCxRomInternal+uSlotOffset; // C300..C3FF - Internal ROM |
| 1387 | else |
| 1388 | memshadow[loop] = !SW_INTCXROM ? pCxRomPeripheral+uSlotOffset // C000..C7FF - SSC/Disk][/etc |
no test coverage detected