Exemplo n.º 1
0
        private void UpdateScreen(RenderWindow window)
        {
            if (ppu.ppu_scanline == 0 && ppu.isbackgroundrendering)
            {
                window.Clear();
                GuiImpl.Update(window, clock.Restart());

                if (gui.filemanager)
                {
                    gui.LoadFile(window, clock);
                    Reset();
                    return;
                }

                gui.RenderUI(window, clock);

                if (ppu.isbackgroundrendering)
                {
                    RenderFrame(window);
                }

                GuiImpl.Render(window);
                window.Display();
            }
        }
Exemplo n.º 2
0
        private void RenderFrame()
        {
            bool wopen = false;

            emutex.Update(gfxdata);
            emusprite.Texture = emutex;

            uint id = emusprite.Texture.NativeHandle;

            if (ImGui.Begin("Nes Sharp", ref wopen))
            {
                ImGui.SetWindowPos(new ImVec2(0, 25));
                ImGui.SetWindowSize(new ImVec2(512, 480));
                ImGui.Image((IntPtr)id, new ImVec2(512, 464));
            }

            GuiImpl.Render(window);
            window.Display();
        }
Exemplo n.º 3
0
        private void UpdateReset(RenderWindow window)
        {
            GuiImpl.Update(window, clock.Restart());

            if (gui.resetemu)
            {
                Reset();
                emustate = State.Running;
                return;
            }

            gui.MainMenu();
            gui.LoadFile(window, clock);
            if (emustate == State.Running)
            {
                Reset();
            }

            GuiImpl.Render(window);
            window.Display();
        }
Exemplo n.º 4
0
        public void LoadFile(RenderWindow window, Clock clock)
        {
            while (filemanager && window.IsOpen)
            {
                window.DispatchEvents();
                GuiImpl.Update(window, clock.Restart());
                window.Clear();

                MainMenu();
                DebuggerView(window, clock);

                if (filemanager)
                {
                    int romselectindex = 0;
                    if (ImGui.Begin("Open Rom"))
                    {
                        string   folder = "roms";
                        string[] files  = Directory.EnumerateFiles("roms", "*.nes").Select(Path.GetFileName).ToArray();
                        ImGui.PushItemWidth(-1);
                        ImGui.SetWindowPos(new ImVec2(0, 25));
                        ImGui.SetWindowSize(new ImVec2(256, window.Size.Y));

                        if (ImGui.ListBox("##Roms", ref romselectindex, files, files.Length, 20))
                        {
                            gamename    = folder + "/" + files[romselectindex];
                            c.emustate  = State.Running;
                            filemanager = false;
                        }

                        ImGui.PopItemWidth();
                        ImGui.End();
                    }
                }

                GuiImpl.Render(window);
                window.Display();
            }
        }
Exemplo n.º 5
0
        public void Run()
        {
            var window = new RenderWindow(new SFML.Window.VideoMode(256, 240), "Nes Sharp");

            GuiImpl.Init(window);
            window.Closed  += (s, e) => window.Close();
            window.Size     = new Vector2u(window.Size.X * 6 - 120, window.Size.Y * 4);
            window.Position = new Vector2i(20, 20);

            window.SetFramerateLimit(60);

            emustate = State.Reset;

            gui = new Gui();

            Initialize(window);

            gui.filemanager = true;

            SetAppStyle();

            while (window.IsOpen)
            {
                window.DispatchEvents();

                if (!window.IsOpen)
                {
                    break;
                }

                switch (emustate)
                {
                case State.Running:
                    cpu.Step();
                    if (!cpu.Breakmode)
                    {
                        ppu.RenderScanline();
                    }

                    if (cpu.Breakmode)
                    {
                        emustate = State.Debug;
                    }

                    UpdateScreen(window);
                    break;

                case State.Reset:
                    UpdateReset(window);
                    break;

                case State.Debug:
                    //window.Clear();
                    GuiImpl.Update(window, clock.Restart());

                    gui.RenderUI(window, clock);
                    RenderFrame(window);

                    GuiImpl.Render(window);
                    window.Display();
                    break;
                }
            }

            if (cpu != null && mapper != null && mapper.ram != null)
            {
                File.WriteAllBytes("ram.bin", mapper.ram);
                File.WriteAllBytes("vram.bin", mapper.vram);
            }

            GuiImpl.Shutdown();
        }