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

Function MemSetPaging

source/Memory.cpp:2523–2637  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2521#endif
2522
2523BYTE __stdcall MemSetPaging(WORD programcounter, WORD address, BYTE write, BYTE value, ULONG nExecutedCycles)
2524{
2525 address &= 0xFF;
2526 uint32_t lastmemmode = g_memmode;
2527#if defined(_DEBUG) && defined(DEBUG_FLIP_TIMINGS)
2528 DebugFlip(address, nExecutedCycles);
2529#endif
2530
2531 // DETERMINE THE NEW MEMORY PAGING MODE.
2532 if (IsAppleIIeOrAbove(GetApple2Type()))
2533 {
2534 switch (address)
2535 {
2536 case 0x00: SetMemMode(g_memmode & ~MF_80STORE); break;
2537 case 0x01: SetMemMode(g_memmode | MF_80STORE); break;
2538 case 0x02: SetMemMode(g_memmode & ~MF_AUXREAD); break;
2539 case 0x03: SetMemMode(g_memmode | MF_AUXREAD); break;
2540 case 0x04: SetMemMode(g_memmode & ~MF_AUXWRITE); break;
2541 case 0x05: SetMemMode(g_memmode | MF_AUXWRITE); break;
2542 case 0x06: SetMemMode(g_memmode & ~MF_INTCXROM); break;
2543 case 0x07: SetMemMode(g_memmode | MF_INTCXROM); break;
2544 case 0x08: SetMemMode(g_memmode & ~MF_ALTZP); break;
2545 case 0x09: SetMemMode(g_memmode | MF_ALTZP); break;
2546 case 0x0A: SetMemMode(g_memmode & ~MF_SLOTC3ROM); break;
2547 case 0x0B: SetMemMode(g_memmode | MF_SLOTC3ROM); break;
2548 case 0x54: SetMemMode(g_memmode & ~MF_PAGE2); break;
2549 case 0x55: SetMemMode(g_memmode | MF_PAGE2); break;
2550 case 0x56: SetMemMode(g_memmode & ~MF_HIRES); break;
2551 case 0x57: SetMemMode(g_memmode | MF_HIRES); break;
2552#ifdef RAMWORKS
2553 case 0x71: // extended memory aux page number
2554 case 0x73: // Ramworks III set aux page number
2555 if ((value < g_uMaxExBanks) && RWpages[value])
2556 {
2557 g_uActiveBank = value;
2558 memaux = RWpages[g_uActiveBank];
2559 UpdatePaging(FALSE); // Initialize=FALSE
2560 }
2561 break;
2562#endif
2563 }
2564
2565 if (GetCardMgr().GetVidHDCard() && GetCardMgr().QueryAux() == CT_80Col)
2566 {
2567 // NB. if aux slot is empty, then writes already occur to memaux
2568 memVidHD = MemIsWriteAux(g_memmode) ? memaux : NULL;
2569 }
2570 }
2571 else // Apple ][,][+,][J-Plus or clone ][,][+
2572 {
2573 if (GetCardMgr().GetVidHDCard())
2574 {
2575 VidHDCard* vidHD = GetCardMgr().GetVidHDCard();
2576 vidHD->VideoIOWrite(programcounter, address, write, value, nExecutedCycles);
2577 memVidHD = vidHD->IsWriteAux() ? memaux : NULL;
2578 }
2579 }
2580

Callers 5

IOWrite_C00xFunction · 0.85
IORead_C05xFunction · 0.85
IOWrite_C05xFunction · 0.85
IOWrite_C07xFunction · 0.85
IO_AnnunciatorFunction · 0.85

Calls 15

DebugFlipFunction · 0.85
IsAppleIIeOrAboveFunction · 0.85
GetApple2TypeFunction · 0.85
SetMemModeFunction · 0.85
UpdatePagingFunction · 0.85
MemIsWriteAuxFunction · 0.85
IsCopamBase64AFunction · 0.85
IoHandlerCardsInFunction · 0.85
IoHandlerCardsOutFunction · 0.85
GetVidHDCardMethod · 0.80
QueryAuxMethod · 0.80

Tested by

no test coverage detected