public void InitializeEngine() { myCartridge = new NesCartridge(); my6502 = new ProcessorNes6502(this); myMapper = new Mapper(this, myCartridge); myPpu = new Ppu(this); myJoypad = new Joypad(); scratchRam = new byte[4][]; scratchRam[0] = new byte[0x800]; scratchRam[1] = new byte[0x800]; scratchRam[2] = new byte[0x800]; scratchRam[3] = new byte[0x800]; saveRam = new byte[0x2000]; isSaveRamReadOnly = false; isDebugging = false; isQuitting = false; isPaused = false; hasQuit = false; fixBackgroundChange = false; fixSpriteHit = false; fixScrollOffset1 = false; fixScrollOffset2 = false; fixScrollOffset3 = false; }
public byte WriteMemory8(ushort address, byte data) { if (address < 0x800) { scratchRam[0][address] = data; } else if (address < 0x1000) { scratchRam[1][address - 0x800] = data; } else if (address < 0x1800) { scratchRam[2][address - 0x1000] = data; } else if (address < 0x2000) { scratchRam[3][address - 0x1800] = data; } else if (address < 0x4000) { //address = (ushort)((address - 0x2000) % 8); switch (address) { case (0x2000): myPpu.ControlRegister1Write(data); break; case (0x2001): myPpu.ControlRegister2Write(data); break; case (0x2003): myPpu.SpriteRamAddressRegisterWrite(data); break; case (0x2004): myPpu.SpriteRamIORegisterWrite(data); break; case (0x2005): myPpu.VramAddressRegister1Write(data); break; case (0x2006): myPpu.VramAddressRegister2Write(data); break; case (0x2007): myPpu.VramIORegisterWrite(data); break; //default: Console.WriteLine("UNKOWN CONTROL WRITE: {0}", address); break; } } else if (address < 0x6000) { switch (address) { case (0x4014): myPpu.SpriteRamDmaBegin(data); break; case (0x4016): myJoypad.Joypad1Write(data); break; case (0x4017): Joypad.Joypad2Write(/*data)*/); break; //default: Console.WriteLine("UNKOWN WRITE: {0:x}", address); break; } if (myCartridge.Mapper == 5) { myMapper.WritePrgRom(address, data); } } else if (address < 0x8000) { if (!isSaveRamReadOnly) { saveRam[address - 0x6000] = data; } if (myCartridge.Mapper == 34) { myMapper.WritePrgRom(address, data); } } else { myMapper.WritePrgRom(address, data); } return(1); }
public byte ReadMemory8(ushort address) { byte returnvalue = 0; if (address < 0x2000) { if (address < 0x800) { returnvalue = scratchRam[0][address]; } else if (address < 0x1000) { returnvalue = scratchRam[1][address - 0x800]; //Console.WriteLine("I need ram Mirroring {0:x}", address); } else if (address < 0x1800) { returnvalue = scratchRam[2][address - 0x1000]; //Console.WriteLine("I need ram Mirroring {0:x}", address); } //else if (address < 0x2000) { else { returnvalue = scratchRam[3][address - 0x1800]; //Console.WriteLine("I need ram Mirroring {0:x}", address); } //returnvalue = scratchRam[address >> 11][address & 0x7ff]; } else if (address < 0x6000) { switch (address) { case (0x2002): returnvalue = myPpu.StatusRegisterRead(); break; case (0x2004): returnvalue = myPpu.SpriteRamIORegisterRead(); break; case (0x2007): returnvalue = myPpu.VramIORegisterRead(); break; //case (0x4015): returnvalue = myPPU.Sound_Signal_Register_Read(); break; case (0x4016): returnvalue = myJoypad.Joypad1Read(); break; case (0x4017): returnvalue = Joypad.Joypad2Read(); break; //default: Console.WriteLine("UNKOWN READ: {0:x}", address); break; } } else if (address < 0x8000) { returnvalue = saveRam[address - 0x6000]; if (myCartridge.Mapper == 5) { returnvalue = 1; } } else { returnvalue = myMapper.ReadPrgRom(address); } return(returnvalue); }