/// <summary> /// Open a NES rom /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void openNesRom_Click(object sender, RoutedEventArgs e) { // Configure open file dialog box OpenFileDialog dialog = new OpenFileDialog(); dialog.InitialDirectory = System.IO.Directory.GetCurrentDirectory(); dialog.Filter = "NES Roms (*.nes)|*.nes"; // Filter files by extension dialog.FilterIndex = 1; // Show open file dialog box if (dialog.ShowDialog() == true) { cartridgeReader_ = new CartridgeReader(dialog.FileName); filePath_ = dialog.FileName; try { input1 = new Input(); input2 = new Input(); testCartridge_ = cartridgeReader_.readCart(); MMC3 mapper = new MMC3(testCartridge_); ppu_ = PPU.Instance; Memory.Create(2048, mapper, input1, input2); mem_ = Memory.Instance; CPU6502.Create(mem_); cpu_ = CPU6502.Instance; registerBox.Text = cpu_.ToString(); memoryBox.Text = mem_.ToString(); addressBox.Text = cpu_.CurrentAddress.ToString("X4"); Display.Source = BitmapToImageSource(ppu_.getFrame()); } catch (Exception ex) { MessageBox.Show(ex.Message, "Exception!", MessageBoxButton.OK); Debug.WriteLine(ex.StackTrace); } } }
/* * Load Rom File */ private void openToolStripMenuItem_Click(object sender, EventArgs e) { bool alreadyEmulating = Core.run; Core.paused = true; string filePath = (openFileDialog1.ShowDialog() == DialogResult.OK) ? openFileDialog1.FileName : "Error: No such file found."; if (File.Exists(filePath)) { if (alreadyEmulating) { NEST_Main.resetCore(); } Core.rom = new Rom(File.ReadAllBytes(filePath)); Core.rom.romFilePath = filePath; int mapperSetting = Core.rom.getMapperSetting(); if (mapperSetting == 0) { NROM.loadRom(Core.rom); } else if (mapperSetting == 1) { MMC1.loadRom(Core.rom); } else if (mapperSetting == 2) { UNROM.loadRom(Core.rom); } else if (mapperSetting == 3) { CNROM.loadRom(Core.rom); } else if (mapperSetting == 4) { MMC3.loadRom(Core.rom); } ushort resetAddress = 0; resetAddress |= Core.cpu.readCPURam(0xFFFC, true); resetAddress |= (ushort)(Core.cpu.readCPURam(0xFFFD, true) << 8); Core.cpu.programCounter = resetAddress; Core.run = true; Core.paused = false; if (emulatorThread == null) { emulatorThread = new Thread(global::NEST.Classes.NEST_Main.startEmulator); emulatorThread.Start(); } resumeToolStripMenuItem.Enabled = true; pauseToolStripMenuItem.Enabled = true; savesavFileToolStripMenuItem.Enabled = true; string saveFilePath = filePath.Substring(0, filePath.LastIndexOf('.')) + ".sav"; if (File.Exists(saveFilePath)) { loadSaveFile(saveFilePath); } } else { MessageBox.Show("File not found at path: " + filePath); } }