diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/MMU.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/MMU.cs index b8aea510..25989ab4 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/MMU.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/MMU.cs @@ -5,11 +5,11 @@ namespace VirtualNes public static class MMU { // CPU 儊儌儕僶儞僋 - public static ArrayRef[] CPU_MEM_BANK = new ArrayRef[8]; // 8K扨埵 + public static ArrayRef[] CPU_MEM_BANK = new ArrayRef[8] { new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef() }; // 8K扨埵 public static byte[] CPU_MEM_TYPE = new byte[8]; public static int[] CPU_MEM_PAGE = new int[8]; // 僗僥乕僩僙乕僽梡 // PPU 儊儌儕僶儞僋 - public static ArrayRef[] PPU_MEM_BANK = new ArrayRef[12]; // 1K扨埵 + public static ArrayRef[] PPU_MEM_BANK = new ArrayRef[12] { new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), new ArrayRef(), }; // 1K扨埵 public static byte[] PPU_MEM_TYPE = new byte[12]; public static int[] PPU_MEM_PAGE = new int[12]; // 僗僥乕僩僙乕僽梡 public static byte[] CRAM_USED = new byte[16]; // 僗僥乕僩僙乕僽梡 @@ -72,7 +72,7 @@ namespace VirtualNes internal static void SetPROM_Bank(byte page, byte[] ptr, byte type) { - CPU_MEM_BANK[page] = new ArrayRef(ptr, 0, ptr.Length); + CPU_MEM_BANK[page].SetArray(ptr, 0, ptr.Length); CPU_MEM_TYPE[page] = type; CPU_MEM_PAGE[page] = 0; } @@ -101,7 +101,7 @@ namespace VirtualNes internal static void SetPROM_8K_Bank(byte page, int bank) { bank %= PROM_8K_SIZE; - CPU_MEM_BANK[page] = new ArrayRef(MMU.PROM, 0x2000 * bank, MMU.PROM.Length - 0x2000 * bank); + CPU_MEM_BANK[page].SetArray(MMU.PROM, 0x2000 * bank, MMU.PROM.Length - 0x2000 * bank); CPU_MEM_TYPE[page] = BANKTYPE_ROM; CPU_MEM_PAGE[page] = bank; } @@ -139,7 +139,7 @@ namespace VirtualNes internal static void SetVROM_1K_Bank(byte page, int bank) { bank %= VROM_1K_SIZE; - PPU_MEM_BANK[page] = new ArrayRef(VROM, 0x0400 * bank, VROM.Length - (0x0400 * bank)); + PPU_MEM_BANK[page].SetArray(VROM, 0x0400 * bank, VROM.Length - (0x0400 * bank)); PPU_MEM_TYPE[page] = BANKTYPE_VROM; PPU_MEM_PAGE[page] = bank; } @@ -182,7 +182,7 @@ namespace VirtualNes internal static void SetCRAM_1K_Bank(byte page, int bank) { bank &= 0x1F; - PPU_MEM_BANK[page] = new ArrayRef(MMU.CRAM, 0x0400 * bank, MMU.CRAM.Length - 0x0400 * bank); + PPU_MEM_BANK[page].SetArray(MMU.CRAM, 0x0400 * bank, MMU.CRAM.Length - 0x0400 * bank); PPU_MEM_TYPE[page] = BANKTYPE_CRAM; PPU_MEM_PAGE[page] = bank; @@ -214,7 +214,7 @@ namespace VirtualNes internal static void SetVRAM_1K_Bank(byte page, int bank) { bank &= 3; - PPU_MEM_BANK[page] = new ArrayRef(VRAM, 0x0400 * bank, VRAM.Length - 0x0400 * bank); + PPU_MEM_BANK[page].SetArray(VRAM, 0x0400 * bank, VRAM.Length - 0x0400 * bank); PPU_MEM_TYPE[page] = BANKTYPE_VRAM; PPU_MEM_PAGE[page] = bank; } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs index db1dddb2..61c476ea 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs @@ -426,7 +426,7 @@ namespace VirtualNes.Core // 僨僼僅儖僩僶儞僋愝掕 for (i = 0; i < 8; i++) { - MMU.CPU_MEM_BANK[i] = null; + MMU.CPU_MEM_BANK[i] = new ArrayRef(); MMU.CPU_MEM_TYPE[i] = MMU.BANKTYPE_ROM; MMU.CPU_MEM_PAGE[i] = 0; }