public void reset(string rom, int stage) { switch (stage) { case 1: //SpaceGameboy.Echo("Resetting gpu"); gPU.reset(this.z80, this.mMU); break; case 2: gPU.reset2(); break; case 3: gPU.reset3(); break; case 4: gPU.reset4(); break; case 5: // SpaceGameboy.Echo("Resetting mmu"); mMU.reset(gPU, /*tIMER,*/ kEY, z80); // SpaceGameboy.Echo("Resetting z80"); z80.reset(mMU); // SpaceGameboy.Echo("Resetting key"); kEY.reset(); // SpaceGameboy.Echo("Resetting timer"); // tIMER.reset(mMU, z80); z80.r.pc = 0x100; z80.r.sp = 0xFFFE; /*z80.r.hl=0x014D;*/ z80.r.c = 0x13; z80.r.e = 0xD8; z80.r.a = 1; //TODO: ^ this was missing, I don't know if it is supposed to be set break; case 6: // SpaceGameboy.Echo("Loading ROM!"); byte[] r; if (rom.Substring(0, 13) == "data:;base64,") { r = Convert.FromBase64String(rom.Substring(13)); } else { r = Convert.FromBase64String(rom); } mMU.load(r); this.run(); break; } startTime = hblankTime = System.DateTime.Now.Ticks; // Echo("MAIN: Reset."); }