コード例 #1
0
ファイル: AprNesUI.cs プロジェクト: jizang/AprNes
        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();
        }
コード例 #2
0
ファイル: AprNesUI.cs プロジェクト: jizang/AprNes
 private void AprNesUI_FormClosing(object sender, FormClosingEventArgs e)
 {
     app_running  = false;
     NesCore.exit = true;
     NesCore.SaveRam();
     Thread.Sleep(10);
 }
コード例 #3
0
ファイル: AprNesUI.cs プロジェクト: jizang/AprNes
 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]);
     }
 }
コード例 #4
0
ファイル: AprNesUI.cs プロジェクト: jizang/AprNes
        //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);
        }
コード例 #5
0
ファイル: AprNesUI.cs プロジェクト: jizang/AprNes
        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;
        }
コード例 #6
0
ファイル: AprNesUI.cs プロジェクト: jizang/AprNes
        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;
                        }
                    }
                }
            }
        }