MCPcopy Create free account
hub / github.com/AppleWin/AppleWin / UpdatePaging

Function UpdatePaging

source/Memory.cpp:1331–1482  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1329}
1330
1331static 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

Callers 4

ResetPagingFunction · 0.85
MemUpdatePagingFunction · 0.85
MemSetPagingFunction · 0.85
MemAnnunciatorResetFunction · 0.85

Calls 5

IsAppleIIeFunction · 0.85
GetApple2TypeFunction · 0.85
IsCopamBase64AFunction · 0.85
UpdatePagingForAltRWFunction · 0.85
QueryAuxMethod · 0.80

Tested by

no test coverage detected