| 2521 | #endif |
| 2522 | |
| 2523 | BYTE __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 |
no test coverage detected