📄 memmap.cpp
字号:
Map [c + 3] = Map [c + 0x803] = (uint8 *) MAP_PPU; Map [c + 4] = Map [c + 0x804] = (uint8 *) MAP_CPU; Map [c + 5] = Map [c + 0x805] = (uint8 *) MAP_CPU; Map [c + 6] = Map [c + 0x806] = (uint8 *) MAP_NONE; Map [c + 7] = Map [c + 0x807] = (uint8 *) MAP_NONE; for (i = c + 8; i < c + 16; i++) { Map [i] = &ROM [((c << 12) + OFFSET0) % CalculatedSize]; Map [i + 0x800] = &ROM [((c << 12) + OFFSET0) % CalculatedSize]; BlockIsROM [i] = TRUE; BlockIsROM [i + 0x800] = TRUE; } for (i = c; i < c + 16; i++) { int ppu = i & 15; MemorySpeed [i] = MemorySpeed [i + 0x800] = ppu >= 2 && ppu <= 3 ? ONE_CYCLE : 8; } } // Banks 30->3f and b0->bf, address ranges 6000->7ffff is S-RAM. for (c = 0; c < 16; c++) { Map [0x306 + (c << 4)] = (uint8 *) MAP_HIROM_SRAM; Map [0x307 + (c << 4)] = (uint8 *) MAP_HIROM_SRAM; Map [0xb06 + (c << 4)] = (uint8 *) MAP_HIROM_SRAM; Map [0xb07 + (c << 4)] = (uint8 *) MAP_HIROM_SRAM; BlockIsRAM [0x306 + (c << 4)] = TRUE; BlockIsRAM [0x307 + (c << 4)] = TRUE; BlockIsRAM [0xb06 + (c << 4)] = TRUE; BlockIsRAM [0xb07 + (c << 4)] = TRUE; } // Banks 40->7f and c0->ff for (c = 0; c < 0x400; c += 16) { for (i = c; i < c + 8; i++) { Map [i + 0x400] = &ROM [((c << 12) + OFFSET1) % CalculatedSize]; Map [i + 0x408] = &ROM [((c << 12) + OFFSET1) % CalculatedSize]; Map [i + 0xc00] = &ROM [((c << 12) + OFFSET2) % CalculatedSize]; Map [i + 0xc08] = &ROM [((c << 12) + OFFSET2) % CalculatedSize]; BlockIsROM [i + 0x400] = TRUE; BlockIsROM [i + 0x408] = TRUE; BlockIsROM [i + 0xc00] = TRUE; BlockIsROM [i + 0xc08] = TRUE; MemorySpeed [i + 0x400] = MemorySpeed [i + 0xc00] = 8; MemorySpeed [i + 0x408] = MemorySpeed [i + 0xc08] = 8; } } MapRAM (); WriteProtectROM ();}void CMemory::AlphaROMMap (){ int c; int i; // Banks 00->3f and 80->bf for (c = 0; c < 0x400; c += 16) { Map [c + 0] = Map [c + 0x800] = RAM; Map [c + 1] = Map [c + 0x801] = RAM; BlockIsRAM [c + 0] = BlockIsRAM [c + 0x800] = TRUE; BlockIsRAM [c + 1] = BlockIsRAM [c + 0x801] = TRUE; Map [c + 2] = Map [c + 0x802] = (uint8 *) MAP_PPU; Map [c + 3] = Map [c + 0x803] = (uint8 *) MAP_PPU; Map [c + 4] = Map [c + 0x804] = (uint8 *) MAP_CPU; Map [c + 5] = Map [c + 0x805] = (uint8 *) MAP_CPU; Map [c + 6] = Map [c + 0x806] = (uint8 *) MAP_DSP; Map [c + 7] = Map [c + 0x807] = (uint8 *) MAP_DSP; for (i = c + 8; i < c + 16; i++) { Map [i] = Map [i + 0x800] = &ROM [c << 11] - 0x8000; BlockIsROM [i] = TRUE; } for (i = c; i < c + 16; i++) { int ppu = i & 15; MemorySpeed [i] = MemorySpeed [i + 0x800] = ppu >= 2 && ppu <= 3 ? ONE_CYCLE : 8; } } // Banks 40->7f and c0->ff for (c = 0; c < 0x400; c += 16) { for (i = c; i < c + 16; i++) { Map [i + 0x400] = &ROM [(c << 12) % CalculatedSize]; Map [i + 0xc00] = &ROM [(c << 12) % CalculatedSize]; MemorySpeed [i + 0x400] = MemorySpeed [i + 0xc00] = 8; BlockIsROM [i + 0x400] = BlockIsROM [i + 0xc00] = TRUE; } } MapRAM (); WriteProtectROM ();}void CMemory::SuperFXROMMap (){ int c; int i; // Banks 00->3f and 80->bf for (c = 0; c < 0x400; c += 16) { Map [c + 0] = Map [c + 0x800] = RAM; Map [c + 1] = Map [c + 0x801] = RAM; BlockIsRAM [c + 0] = BlockIsRAM [c + 0x800] = TRUE; BlockIsRAM [c + 1] = BlockIsRAM [c + 0x801] = TRUE; Map [c + 2] = Map [c + 0x802] = (uint8 *) MAP_PPU; Map [c + 3] = Map [c + 0x803] = (uint8 *) MAP_PPU; Map [c + 4] = Map [c + 0x804] = (uint8 *) MAP_CPU; Map [c + 5] = Map [c + 0x805] = (uint8 *) MAP_CPU; Map [c + 6] = Map [c + 0x806] = (uint8 *) MAP_DSP; Map [c + 7] = Map [c + 0x807] = (uint8 *) MAP_DSP; for (i = c + 8; i < c + 16; i++) { Map [i] = Map [i + 0x800] = &ROM [c << 11] - 0x8000; BlockIsROM [i] = BlockIsROM [i + 0x800] = TRUE; } for (i = c; i < c + 8; i++) { int ppu = i & 15; MemorySpeed [i] = MemorySpeed [i + 0x800] = ppu >= 2 && ppu <= 3 ? ONE_CYCLE : 8; } } // Banks 40->7f and c0->ff for (c = 0; c < 0x400; c += 16) { for (i = c; i < c + 16; i++) { Map [i + 0x400] = Map [i + 0xc00] = &ROM [(c << 12) % CalculatedSize]; MemorySpeed [i + 0x400] = MemorySpeed [i + 0xc00] = 8; BlockIsROM [i + 0x400] = BlockIsROM [i + 0xc00] = TRUE; } } // Banks 7e->7f, RAM for (c = 0; c < 16; c++) { Map [c + 0x7e0] = RAM; Map [c + 0x7f0] = RAM + 0x10000; BlockIsRAM [c + 0x7e0] = TRUE; BlockIsRAM [c + 0x7f0] = TRUE; BlockIsROM [c + 0x7e0] = FALSE; BlockIsROM [c + 0x7f0] = FALSE; } // Banks 70->71, S-RAM for (c = 0; c < 32; c++) { Map [c + 0x700] = ::SRAM + (((c >> 4) & 1) << 16); BlockIsRAM [c + 0x700] = TRUE; BlockIsROM [c + 0x700] = FALSE; } // Banks 00->3f and 80->bf address ranges 6000->7fff is RAM. for (c = 0; c < 0x40; c++) { Map [0x006 + (c << 4)] = (uint8 *) ::SRAM - 0x6000; Map [0x007 + (c << 4)] = (uint8 *) ::SRAM - 0x6000; Map [0x806 + (c << 4)] = (uint8 *) ::SRAM - 0x6000; Map [0x807 + (c << 4)] = (uint8 *) ::SRAM - 0x6000; BlockIsRAM [0x006 + (c << 4)] = TRUE; BlockIsRAM [0x007 + (c << 4)] = TRUE; BlockIsRAM [0x806 + (c << 4)] = TRUE; BlockIsRAM [0x807 + (c << 4)] = TRUE; } // Replicate the first 2Mb of the ROM at ROM + 2MB such that each 32K // block is repeated twice in each 64K block. for (c = 0; c < 64; c++) { memmove (&ROM [0x200000 + c * 0x10000], &ROM [c * 0x8000], 0x8000); memmove (&ROM [0x208000 + c * 0x10000], &ROM [c * 0x8000], 0x8000); } WriteProtectROM ();}void CMemory::SA1ROMMap (){ int c; int i; // Banks 00->3f and 80->bf for (c = 0; c < 0x400; c += 16) { Map [c + 0] = Map [c + 0x800] = RAM; Map [c + 1] = Map [c + 0x801] = RAM; BlockIsRAM [c + 0] = BlockIsRAM [c + 0x800] = TRUE; BlockIsRAM [c + 1] = BlockIsRAM [c + 0x801] = TRUE; Map [c + 2] = Map [c + 0x802] = (uint8 *) MAP_PPU; Map [c + 3] = Map [c + 0x803] = (uint8 *) &Memory.FillRAM [0x3000] - 0x3000; Map [c + 4] = Map [c + 0x804] = (uint8 *) MAP_CPU; Map [c + 5] = Map [c + 0x805] = (uint8 *) MAP_CPU; Map [c + 6] = Map [c + 0x806] = (uint8 *) MAP_BWRAM; Map [c + 7] = Map [c + 0x807] = (uint8 *) MAP_BWRAM; for (i = c + 8; i < c + 16; i++) { Map [i] = Map [i + 0x800] = &ROM [c << 11] - 0x8000; BlockIsROM [i] = BlockIsROM [i + 0x800] = TRUE; } for (i = c; i < c + 16; i++) { int ppu = i & 15; MemorySpeed [i] = MemorySpeed [i + 0x800] = ppu >= 2 && ppu <= 3 ? ONE_CYCLE : 8; } } // Banks 40->7f for (c = 0; c < 0x400; c += 16) { for (i = c; i < c + 16; i++) Map [i + 0x400] = (uint8 *) &SRAM [(c << 12) & 0x1ffff]; for (i = c; i < c + 16; i++) { MemorySpeed [i + 0x400] = 8; BlockIsROM [i + 0x400] = FALSE; } } // c0->ff for (c = 0; c < 0x400; c += 16) { for (i = c; i < c + 16; i++) { Map [i + 0xc00] = &ROM [(c << 12) % CalculatedSize]; MemorySpeed [i + 0xc00] = 8; BlockIsROM [i + 0xc00] = TRUE; } } for (c = 0; c < 16; c++) { Map [c + 0x7e0] = RAM; Map [c + 0x7f0] = RAM + 0x10000; BlockIsRAM [c + 0x7e0] = TRUE; BlockIsRAM [c + 0x7f0] = TRUE; BlockIsROM [c + 0x7e0] = FALSE; BlockIsROM [c + 0x7f0] = FALSE; } WriteProtectROM (); // Now copy the map and correct it for the SA1 CPU. memmove ((void *) SA1.WriteMap, (void *) WriteMap, sizeof (WriteMap)); memmove ((void *) SA1.Map, (void *) Map, sizeof (Map)); // Banks 00->3f and 80->bf for (c = 0; c < 0x400; c += 16) { SA1.Map [c + 0] = SA1.Map [c + 0x800] = &Memory.FillRAM [0x3000]; SA1.Map [c + 1] = SA1.Map [c + 0x801] = (uint8 *) MAP_NONE; SA1.WriteMap [c + 0] = SA1.WriteMap [c + 0x800] = &Memory.FillRAM [0x3000]; SA1.WriteMap [c + 1] = SA1.WriteMap [c + 0x801] = (uint8 *) MAP_NONE; } // Banks 60->6f for (c = 0; c < 0x100; c++) SA1.Map [c + 0x600] = SA1.WriteMap [c + 0x600] = (uint8 *) MAP_BWRAM_BITMAP; BWRAM = SRAM;}void CMemory::LoROM24MBSMap (){ int c; int i; // Banks 00->3f and 80->bf for (c = 0; c < 0x400; c += 16) { Map [c + 0] = Map [c + 0x800] = RAM; Map [c + 1] = Map [c + 0x801] = RAM; BlockIsRAM [c + 0] = BlockIsRAM [c + 0x800] = TRUE; BlockIsRAM [c + 1] = BlockIsRAM [c + 0x801] = TRUE; Map [c + 2] = Map [c + 0x802] = (uint8 *) MAP_PPU; Map [c + 3] = Map [c + 0x803] = (uint8 *) MAP_PPU; Map [c + 4] = Map [c + 0x804] = (uint8 *) MAP_CPU; Map [c + 5] = Map [c + 0x805] = (uint8 *) MAP_CPU; Map [c + 6] = Map [c + 0x806] = (uint8 *) MAP_NONE; Map [c + 7] = Map [c + 0x807] = (uint8 *) MAP_NONE; for (i = c + 8; i < c + 16; i++) { Map [i] = Map [i + 0x800] = &ROM [c << 11] - 0x8000; BlockIsROM [i] = BlockIsROM [i + 0x800] = TRUE; } for (i = c; i < c + 16; i++) { int ppu = i & 15; MemorySpeed [i] = MemorySpeed [i + 0x800] = ppu >= 2 && ppu <= 3 ? ONE_CYCLE : 8; } } // Banks 00->3f and 80->bf for (c = 0; c < 0x200; c += 16) { Map [c + 0x800] = RAM; Map [c + 0x801] = RAM; BlockIsRAM [c + 0x800] = TRUE; BlockIsRAM [c + 0x801] = TRUE; Map [c + 0x802] = (uint8 *) MAP_PPU; Map [c + 0x803] = (uint8 *) MAP_PPU; Map [c + 0x804] = (uint8 *) MAP_CPU; Map [c + 0x805] = (uint8 *) MAP_CPU; Map [c + 0x806] = (uint8 *) MAP_NONE; Map [c + 0x807] = (uint8 *) MAP_NONE; for (i = c + 8; i < c + 16; i++) { Map [i + 0x800] = &ROM [c << 11] - 0x8000 + 0x200000; BlockIsROM [i + 0x800] = TRUE; } for (i = c; i < c + 16; i++) { int ppu = i & 15; MemorySpeed [i + 0x800] = ppu >= 2 && ppu <= 3 ? ONE_CYCLE : 8; } } // Banks 40->7f and c0->ff for (c = 0; c < 0x400; c += 16) { for (i = c; i < c + 8; i++) Map [i + 0x400] = Map [i + 0xc00] = &ROM [(c << 11) + 0x200000]; for (i = c + 8; i < c + 16; i++) Map [i + 0x400] = Map [i + 0xc00] = &ROM [(c << 11) + 0x200000 - 0x8000]; for (i = c; i < c + 16; i++) { MemorySpeed [i + 0x400] = MemorySpeed [i + 0xc00] = 8; BlockIsROM [i + 0x400] = BlockIsROM [i + 0xc00] = TRUE; } } MapExtraRAM (); WriteProtectROM ();}void CMemory::SufamiTurboLoROMMap (){ int c; int i; // Banks 00->3f and 80->bf for (c = 0; c < 0x400; c += 16) { Map [c + 0] = Map [c + 0x800] = RAM; Map [c + 1] = Map [c + 0x801] = RAM; BlockIsRAM [c + 0] = BlockIsRAM [c + 0x800] = TRUE; BlockIsRAM [c + 1] = BlockIsRAM [c + 0x801] = TRUE; Map [c + 2] = Map [c + 0x802] = (uint8 *) MAP_PPU; Map [c + 3] = Map [c + 0x803] = (uint8 *) MAP_PPU; Map [c + 4] = Map [c + 0x804] = (uint8 *) MAP_CPU; Map [c + 5] = Map [c + 0x805] = (uint8 *) MAP_CPU; if (Settings.DSP1Master) { Map [c + 6] = Map [c + 0x806] = (uint8 *) MAP_DSP; Map [c + 7] = Map [c + 0x807] = (uint8 *) MAP_DSP; } else { Map [c + 6] = Map [c + 0x806] = (uint8 *) MAP_NONE; Map [c + 7] = Map [c + 0x807] = (uint8 *) MAP_NONE; } for (i = c + 8; i < c + 16; i++) { Map [i] = Map [i + 0x800] = &ROM [c << 11] - 0x8000; BlockIsROM [i] = BlockIsROM [i + 0x800] = TRUE; } for (i = c; i < c + 16; i++) { int ppu = i & 15; MemorySpeed [i] = MemorySpeed [i + 0x800] = ppu >= 2 && ppu <= 3 ? ONE_CYCLE : 8; } } if (Settings.DSP1Master) { // Banks 30->3f and b0->bf for (c = 0x300; c < 0x400; c += 16) { for (i = c + 8; i < c + 16; i++) { Map [i] = Map [i + 0x800] = (uint8 *) MAP_DSP; BlockIsROM [i] = BlockIsROM [i + 0x800] = FALSE; } } } // Banks 40->7f and c0->ff for (c = 0; c < 0x400; c += 16) { for (i = c; i < c + 8; i++) Map [i + 0x400] = Map [i + 0xc00] = &ROM [(c << 11) + 0x200000]; for (i = c + 8; i < c + 16; i++) Map [i + 0x400] = Map [i + 0xc00] = &ROM [(c << 11) + 0x200000 - 0x8000]; for (i = c; i < c + 16; i++) { MemorySpeed [i + 0x400] = MemorySpeed [i + 0xc00] = 8; BlockIsROM [i + 0x400] = BlockIsROM [i + 0xc00] = TRUE; } } if (Settings.DSP1Master) { for (c = 0; c < 0x100; c++) { Map [c + 0xe00] = (uint8 *) MAP_DSP; MemorySpeed [c + 0xe00] = 8; BlockIsROM [c + 0xe00] = FALSE; } } // Banks 7e->7f, RAM for (c = 0; c < 16; c++) { Map [c + 0x7e0] = RAM; Map [c + 0x7f0] = RAM + 0x10000; BlockIsRAM [c + 0x7e0] = TRUE; BlockIsRAM [c + 0x7f0] = TRUE; BlockIsROM [c + 0x7e0] = FALSE; BlockIsROM [c + 0x7f0] = FALSE; } // Banks 60->67, S-RAM for (c = 0; c < 0x80; c++) { Map [c + 0x600] = (uint8 *) MAP_LOROM_SRAM; BlockIsRAM [c + 0x600] = TRUE; BlockIsROM [c + 0x600] = FALSE; } WriteProtectROM ();}void CMemory::SRAM512KLoROMMap (){ int c; int i; // Banks 00->3f and 80->bf for (c = 0; c < 0x400; c += 16) { Map [c + 0] = Map [c + 0x800] = RAM; Map [c + 1] = Map [c + 0x801] = RAM; BlockIsRAM [c + 0] = BlockIsRAM [c + 0x800] = TRUE; BlockIsRAM [c + 1] = BlockIsRAM [c + 0x801] = TRUE; Map [c + 2] = Map [c + 0x802] = (uint8 *) MAP_PPU; Map [c + 3] = Map [c + 0x803] = (uint8 *) MAP_PPU; Map [c + 4] = Map [c + 0x804] = (uint8 *) MAP_CPU; Map [c + 5] = Map [c + 0x805] = (uint8 *) MAP_CPU; Map [c + 6] = Map [c + 0x806] = (uint8 *) MAP_NONE; Map [c + 7] = Map [c + 0x807] = (uint8 *) MAP_NONE; for (i = c + 8; i < c + 16; i++) { Map [i] = Map [i + 0x800] = &ROM [c << 11] - 0x8000; BlockIsROM [i] = BlockIsROM [i + 0x800] = TRUE; } for (i = c; i < c + 16; i++) { int ppu = i & 15; MemorySpeed [i] = MemorySpeed [i + 0x800] = ppu >= 2 && ppu <= 3 ? ONE_CYCLE : 8; } } // Banks 40->7f and c0->ff for (c = 0; c < 0x400; c += 16) { for (i = c; i < c + 8; i++) Map [i + 0x400] = Map [i + 0xc00] = &ROM [(c << 11) + 0x200000]; for (i = c + 8; i < c + 16; i++) Map [i + 0x400] = Map [i + 0xc00] = &ROM [(c << 11) + 0x200000 - 0x8000]; for (i = c; i < c + 16; i++) { MemorySpeed [i + 0x400] = MemorySpeed [i + 0xc00] = 8; BlockIsROM [i + 0x400] = BlockIsROM [i + 0xc00] = TRUE; } } MapExtraRAM (); WriteProtectROM ();}void CMemory::SRAM1024KLoROMMap (){ int c; int i; // Banks 00->3f and 80->bf for (c = 0; c < 0x400; c += 16) { Map [c + 0] = Map [c + 0x800] = Map [c + 0x400] = Map [c + 0xc00] = RAM; Map [c + 1] = Map [c + 0x801] = Map [c + 0x401] = Map [c + 0xc01] = RAM; BlockIsRAM [c + 0] = BlockIsRAM [c + 0x800] = BlockIsRAM [c + 0x400] = BlockIsRAM [c + 0xc00] = TRUE; BlockIsRAM [c + 1] = BlockIsRAM [c + 0x801] = BlockIsRAM [c + 0x401] = BlockIsRAM [c + 0xc01] = TRUE; Map [c + 2] = Map [c + 0x802] = Map [c + 0x402] = Map [c + 0xc02] = (uint8 *) MAP_PPU; Map [c + 3] = Map [c + 0x803] = Map [c + 0x403] = Map [c + 0xc03] = (uint8 *) MAP_PPU; Map [c + 4] = Map [c + 0x804] = Map [c + 0x404] = Map [c + 0xc04] = (uint8 *) MAP_CPU; Map [c + 5] = Map [c + 0x805] = Map [c + 0x405] = Map [c + 0xc05] = (uint8 *) MAP_CPU; Map [c + 6] = Map [c + 0x806] = Map [c + 0x406] = Map [c + 0xc06] = (uint8 *) MAP_NONE; Map [c + 7] = Map [c + 0x807] = Map [c + 0x407] = Map [c + 0xc07] = (uint8 *) MAP_NONE; for (i = c + 8; i < c + 16; i++) { Map [i] = Map [i + 0x800] = Map [i + 0x400] = Map [i + 0xc00] = &ROM [c << 11] - 0x8000; BlockIsROM [i] = BlockIsROM [i + 0x800] = BlockIsROM [i + 0x400] = BlockIsROM [i + 0xc00] = TRUE; } for (i = c; i < c + 16; i++) { int ppu = i & 15; MemorySpeed [i] = MemorySpeed [i + 0x800] = MemorySpeed [i + 0x400] = MemorySpeed [i + 0xc00] = ppu >= 2 && ppu <= 3 ? ONE_CYCLE : 8; } } MapExtraRAM (); WriteProtectROM ();}void CMemory::BSHiROMMap (){ int c; int i; // Banks 00->3f and 80->bf for (c = 0; c < 0x400; c += 16) { Map [c + 0] = Map [c + 0x800] = RAM; BlockIsRAM [c + 0] = BlockIsRAM [c + 0x800] = TRUE; Map [c + 1] = Map [c + 0x801] = RAM;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -