Exemplo n.º 1
0
        /// <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);
                }
            }
        }
Exemplo n.º 2
0
        /*
         *  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);
            }
        }