unsafe public void Reset() { if (!running) { return; } NesCore.SaveRam(); NesCore.LimitFPS = LimitFPS; NesCore.rom_file_name = rom_file_name; NesCore.VideoOutput -= new EventHandler(VideoOutputDeal); NesCore._event.Reset(); while (NesCore.screen_lock) { Thread.Sleep(1); } if (RenderObj != null) { RenderObj.freeMem(); } RenderObj = (InterfaceGraphic)Activator.CreateInstance(Type.GetType("AprNes.Render_" + AppConfigure["filter"] + "_" + ScreenSize + "x")); RenderObj.init(NesCore.ScreenBuf1x, grfx); NesCore.VideoOutput += new EventHandler(VideoOutputDeal); NesCore._event.Set(); NesCore.SoftReset(); }
private void AprNesUI_FormClosing(object sender, FormClosingEventArgs e) { app_running = false; NesCore.exit = true; NesCore.SaveRam(); Thread.Sleep(10); }
private void AprNesUI_KeyUp(object sender, KeyEventArgs e) { if (!running) { return; } if (NES_KeyMAP.ContainsKey(e.KeyValue)) { NesCore.P1_ButtonUnPress((byte)NES_KeyMAP[e.KeyValue]); } }
//http://stackoverflow.com/questions/11754874/keydown-not-firing-for-up-down-left-and-right protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData) { //for KeyDown check if (!running) { return(true); } int keyboard_key = (int)keyData; if (keyboard_key == 65616) { NESCaptureScreen(); return(true);; } if (NES_KeyMAP.ContainsKey(keyboard_key)) { NesCore.P1_ButtonPress((byte)NES_KeyMAP[keyboard_key]); } return(true); }
unsafe private void button1_Click(object sender, EventArgs e) { OpenFileDialog fd = new OpenFileDialog(); fd.Filter = "nes file (*.nes *.zip)|*.nes;*.zip"; if (fd.ShowDialog() != DialogResult.OK) { return; } FileInfo fi = new FileInfo(fd.FileName); if (fi.Extension.ToLower() == ".zip") { // tks!! https://github.com/yallie/unzip good! // replace with .net use framework 4.6 https://msdn.microsoft.com/zh-tw/library/system.io.compression.zipfile(v=vs.110).aspx ZipArchive archive = ZipFile.OpenRead(fi.FullName); foreach (ZipArchiveEntry entry in archive.Entries) { if (entry.FullName.ToLower().EndsWith(".nes")) { nes_name = entry.Name; Stream fs = entry.Open(); long length = entry.Length; rom_bytes = new byte[length]; fs.Read(rom_bytes, 0, (int)length); fs.Close(); } } } else { nes_name = new FileInfo(fd.FileName).Name; rom_bytes = File.ReadAllBytes(fd.FileName); } rom_file_name = fd.FileName.Remove(fd.FileName.Length - 4, 4); if (nes_t != null) { try { NesCore.exit = true; Thread.Sleep(50); nes_t.Abort(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } NesCore.SaveRam(); NesCore.exit = false; NesCore.LimitFPS = LimitFPS; NesCore.rom_file_name = rom_file_name; bool init_result = NesCore.init(rom_bytes); if (RenderObj != null) { RenderObj.freeMem(); } RenderObj = (InterfaceGraphic)Activator.CreateInstance(Type.GetType("AprNes.Render_" + AppConfigure["filter"] + "_" + ScreenSize + "x")); RenderObj.init(NesCore.ScreenBuf1x, grfx); NesCore.VideoOutput -= new EventHandler(VideoOutputDeal); NesCore.VideoOutput += new EventHandler(VideoOutputDeal); Console.WriteLine("init finsih"); if (!init_result) { fps_count_timer.Enabled = false; running = false; label3.Text = "fps : "; MessageBox.Show("fail !"); return; } nes_t = new Thread(NesCore.run); nes_t.IsBackground = true; nes_t.Start(); fps_count_timer.Enabled = true; running = true; }
void polling_listener() { while (app_running) { Thread.Sleep(_joystick.PeriodMin); List <joystickEvent> event_list = _joystick.joy_event_captur(); foreach (joystickEvent joy_event in event_list) { //for configure if (configure) { AprNesUI.GetInstance().Invoke(new MethodInvoker(() => { if (joy_event.event_type == 0) //方向鍵觸發 { if (joy_event.way_type == 0) { AprNes_ConfigureUI.GetInstance().Setup_JoyPad_define(joy_event.joystick_id.ToString(), "X", 0, joy_event.way_value); } else { AprNes_ConfigureUI.GetInstance().Setup_JoyPad_define(joy_event.joystick_id.ToString(), "Y", 0, joy_event.way_value); } } else //一般按鈕觸發 { AprNes_ConfigureUI.GetInstance().Setup_JoyPad_define(joy_event.joystick_id.ToString(), "Button " + joy_event.button_id.ToString(), joy_event.button_id, 128); } })); break; } //for gaming.. if (running) { KeyMap joy = KeyMap.NES_btn_A; if (joy_event.event_type == 1) { string key = joy_event.joystick_id.ToString() + "," + "Button " + joy_event.button_id.ToString() + "," + joy_event.button_id.ToString(); if (AprNesUI.GetInstance().NES_KeyMAP_joypad.ContainsKey(key)) { joy = AprNesUI.GetInstance().NES_KeyMAP_joypad[key]; } else { continue; } } else { string XY = (joy_event.way_type == 0) ? "X" : "Y"; string key = joy_event.joystick_id.ToString() + "," + JoyPadWayName(XY, joy_event.way_value) + "," + "0" + "," + joy_event.way_value; if (AprNesUI.GetInstance().NES_KeyMAP_joypad.ContainsKey(key)) { joy = AprNesUI.GetInstance().NES_KeyMAP_joypad[key]; } else { string key_a = joy_event.joystick_id.ToString() + "," + JoyPadWayName(XY, 0) + "," + "0" + "," + "0"; string key_b = joy_event.joystick_id.ToString() + "," + JoyPadWayName(XY, 65535) + "," + "0" + "," + "65535"; if (NES_KeyMAP_joypad.ContainsKey(key_a) || (AprNesUI.GetInstance().NES_KeyMAP_joypad.ContainsKey(key_b))) { if (XY == "X") { NesCore.P1_ButtonUnPress((byte)KeyMap.NES_btn_LEFT); NesCore.P1_ButtonUnPress((byte)KeyMap.NES_btn_RIGHT); } if (XY == "Y") { NesCore.P1_ButtonUnPress((byte)KeyMap.NES_btn_UP); NesCore.P1_ButtonUnPress((byte)KeyMap.NES_btn_DOWN); } } continue; } } switch (joy) { case KeyMap.NES_btn_A: { if (joy_event.button_event == 1) { NesCore.P1_ButtonPress((byte)KeyMap.NES_btn_A); } else { NesCore.P1_ButtonUnPress((byte)KeyMap.NES_btn_A); } } break; case KeyMap.NES_btn_B: { if (joy_event.button_event == 1) { NesCore.P1_ButtonPress((byte)KeyMap.NES_btn_B); } else { NesCore.P1_ButtonUnPress((byte)KeyMap.NES_btn_B); } } break; case KeyMap.NES_btn_SELECT: { if (joy_event.button_event == 1) { NesCore.P1_ButtonPress((byte)KeyMap.NES_btn_SELECT); } else { NesCore.P1_ButtonUnPress((byte)KeyMap.NES_btn_SELECT); } } break; case KeyMap.NES_btn_START: { if (joy_event.button_event == 1) { NesCore.P1_ButtonPress((byte)KeyMap.NES_btn_START); } else { NesCore.P1_ButtonUnPress((byte)KeyMap.NES_btn_START); } } break; case KeyMap.NES_btn_UP: NesCore.P1_ButtonPress((byte)KeyMap.NES_btn_UP); break; case KeyMap.NES_btn_DOWN: NesCore.P1_ButtonPress((byte)KeyMap.NES_btn_DOWN); break; case KeyMap.NES_btn_LEFT: NesCore.P1_ButtonPress((byte)KeyMap.NES_btn_LEFT); break; case KeyMap.NES_btn_RIGHT: NesCore.P1_ButtonPress((byte)KeyMap.NES_btn_RIGHT); break; } } } } }