⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memmap.cpp

📁 著名SFC模拟器Snes9x的源代码。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	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 + -