From 1438999790627cecbd6f7c7e21462e5081a0b7b3 Mon Sep 17 00:00:00 2001 From: "Christopher A. Mosher" Date: Tue, 13 Dec 2022 23:58:43 -0500 Subject: [PATCH] fix Visual6502 mode transistors file; add Open/Close Emulator commands --- src/E2wxApp.cpp | 31 ++++++++++++++++--------------- src/E2wxApp.h | 1 + src/E2wxFrame.cpp | 19 ++++++++++++++++++- src/E2wxFrame.h | 2 ++ src/Emu6502.h | 5 +++-- src/TransNetwork.cpp | 14 +++++++++++--- src/TransNetwork.h | 4 ++-- src/apple2.cpp | 2 +- src/apple2.h | 6 ++++-- 9 files changed, 58 insertions(+), 26 deletions(-) diff --git a/src/E2wxApp.cpp b/src/E2wxApp.cpp index 4717547..12b318d 100644 --- a/src/E2wxApp.cpp +++ b/src/E2wxApp.cpp @@ -197,7 +197,7 @@ bool E2wxApp::OnInit() { - StartEmulator(); +// TODO option? or use last-state? StartEmulator(); @@ -258,14 +258,7 @@ int E2wxApp::OnExit() { delete wxXmlResource::Set(nullptr); BOOST_LOG_TRIVIAL(info) << "Deleting emulator instance..."; - if (this->emu_timer) { - delete this->emu_timer; - this->emu_timer = nullptr; - } - if (this->emu) { - delete this->emu; - this->emu = nullptr; - } + StopEmulator(); BOOST_LOG_TRIVIAL(info) << "Application OnExit complete."; return 0; @@ -397,13 +390,21 @@ void E2wxApp::InitBoostLog() { +void E2wxApp::StopEmulator() { + if (EnsureCanQuit()) { + if (this->emu_timer) { + delete this->emu_timer; + this->emu_timer = nullptr; + } + if (this->emu) { + delete this->emu; + this->emu = nullptr; + } + } +} + void E2wxApp::StartEmulator() { - if (this->emu_timer) { - delete this->emu_timer; - } - if (this->emu) { - delete this->emu; - } + StopEmulator(); this->emu = new Emulator(); E2Config cfg{this->arg_configfile, this->opt_config_from_prefs_only}; diff --git a/src/E2wxApp.h b/src/E2wxApp.h index 6409e15..1c6de26 100644 --- a/src/E2wxApp.h +++ b/src/E2wxApp.h @@ -84,6 +84,7 @@ public: const std::filesystem::path GetDocumentsDir() const; void StartEmulator(); + void StopEmulator(); void OnFnKeyPressed(const SDL_Keycode k); diff --git a/src/E2wxFrame.cpp b/src/E2wxFrame.cpp index bcea14d..a17d4d0 100644 --- a/src/E2wxFrame.cpp +++ b/src/E2wxFrame.cpp @@ -41,6 +41,8 @@ enum E2MenuID { ID_MENUITEM_RESET, ID_MENUITEM_SCREEN_SHOT, ID_MENUITEM_TOGGLE_BUFFERED, + ID_MENUITEM_START_EMULATOR, + ID_MENUITEM_STOP_EMULATOR, }; wxBEGIN_EVENT_TABLE(E2wxFrame, wxFrame) @@ -56,6 +58,8 @@ wxBEGIN_EVENT_TABLE(E2wxFrame, wxFrame) EVT_MENU(wxID_PASTE, E2wxFrame::OnPaste) EVT_MENU(ID_MENUITEM_SCREEN_SHOT, E2wxFrame::OnScreenShot) EVT_MENU(ID_MENUITEM_TOGGLE_BUFFERED, E2wxFrame::OnToggleBuffered) + EVT_MENU(ID_MENUITEM_START_EMULATOR, E2wxFrame::OnStartEmulator) + EVT_MENU(ID_MENUITEM_STOP_EMULATOR, E2wxFrame::OnStopEmulator) wxEND_EVENT_TABLE() @@ -84,6 +88,11 @@ void E2wxFrame::InitMenuBar() { wxMenu *menuFile = new wxMenu(); menuBar->Append(menuFile, "&File"); + wxMenuItem *miStart = menuFile->Append(ID_MENUITEM_START_EMULATOR, "Open Emulator"); + miStart->SetAccel(new wxAcceleratorEntry(wxACCEL_CTRL, 'O')); + wxMenuItem *miStop = menuFile->Append(ID_MENUITEM_STOP_EMULATOR, "Close Emulator"); + miStop->SetAccel(new wxAcceleratorEntry(wxACCEL_CTRL, 'W')); + menuFile->AppendSeparator(); wxMenuItem *miExit = menuFile->Append(wxID_EXIT); miExit->AddExtraAccel(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F9)); @@ -93,7 +102,7 @@ void E2wxFrame::InitMenuBar() { miPaste->AddExtraAccel(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F7)); menuEdit->AppendSeparator(); wxMenuItem *miPrefs = menuEdit->Append(wxID_PREFERENCES); - miPrefs->SetAccel(new wxAcceleratorEntry(wxACCEL_CTRL, 44)); + miPrefs->SetAccel(new wxAcceleratorEntry(wxACCEL_CTRL, ',')); wxMenu *menuMachine = new wxMenu(); @@ -209,3 +218,11 @@ void E2wxFrame::OnScreenShot(wxCommandEvent& event) { void E2wxFrame::OnToggleBuffered(wxCommandEvent& event) { wxGetApp().ToggleBuffered(); } + +void E2wxFrame::OnStartEmulator(wxCommandEvent& event) { + wxGetApp().StartEmulator(); +} + +void E2wxFrame::OnStopEmulator(wxCommandEvent& event){ + wxGetApp().StopEmulator(); +} diff --git a/src/E2wxFrame.h b/src/E2wxFrame.h index 54e42cf..bdfa202 100644 --- a/src/E2wxFrame.h +++ b/src/E2wxFrame.h @@ -50,6 +50,8 @@ private: void OnPaste(wxCommandEvent& event); void OnScreenShot(wxCommandEvent& event); void OnToggleBuffered(wxCommandEvent& event); + void OnStartEmulator(wxCommandEvent& event); + void OnStopEmulator(wxCommandEvent& event); wxDECLARE_EVENT_TABLE(); }; diff --git a/src/Emu6502.h b/src/Emu6502.h index 971b021..2d91724 100644 --- a/src/Emu6502.h +++ b/src/Emu6502.h @@ -16,14 +16,15 @@ #include "TransNetwork.h" #include "TransCache.h" #include "SegmentCache.h" -#include + +#include class AddressBus; class Emu6502 : public AbstractCpu { public: - Emu6502(std::istream& transistors, AddressBus& mem) : tn(transistors, segs, transes), c(tn), trace(segs, transes, c), cpu(mem, trace, c), cpuhelper(cpu, c) { + Emu6502(std::filesystem::path& transistors, AddressBus& mem) : tn(transistors, segs, transes), c(tn), trace(segs, transes, c), cpu(mem, trace, c), cpuhelper(cpu, c) { } virtual ~Emu6502() { diff --git a/src/TransNetwork.cpp b/src/TransNetwork.cpp index 9d65dfc..debb782 100644 --- a/src/TransNetwork.cpp +++ b/src/TransNetwork.cpp @@ -1,7 +1,7 @@ -/* +/* * File: TransNetwork.cpp * Author: cmosher - * + * * Created on December 11, 2013, 10:44 AM */ @@ -10,12 +10,20 @@ #include "SegmentCache.h" #include "StateCalculator.h" #include "trans.h" +#include "E2wxApp.h" +#include "e2filesystem.h" + #include #include #include #include +#include + +TransNetwork::TransNetwork(std::filesystem::path& p, SegmentCache& segs, TransCache& transes) : segs(segs), transes(transes) { + std::filesystem::path inpath = valid_input_file(p, wxGetApp().GetResDir()); + + std::ifstream in(inpath); -TransNetwork::TransNetwork(std::istream& in, SegmentCache& segs, TransCache& transes) : segs(segs), transes(transes) { std::string c1, gate, c2; in >> c1 >> gate >> c2; while (in.good()) { diff --git a/src/TransNetwork.h b/src/TransNetwork.h index a9f5961..aeda500 100644 --- a/src/TransNetwork.h +++ b/src/TransNetwork.h @@ -8,7 +8,7 @@ #ifndef TRANSNETWORK_H #define TRANSNETWORK_H -#include +#include #include #include @@ -20,7 +20,7 @@ class Trans; class TransNetwork final { public: - TransNetwork(std::istream& readFromHere, SegmentCache& segs, TransCache& transes); + TransNetwork(std::filesystem::path& readFromHere, SegmentCache& segs, TransCache& transes); private: diff --git a/src/apple2.cpp b/src/apple2.cpp index cd029c6..361a17f 100644 --- a/src/apple2.cpp +++ b/src/apple2.cpp @@ -48,7 +48,7 @@ cassetteOut(gui), addressBus(gui, revision, ram, rom, kbd, videoMode, paddles, paddleButtonStates, speaker, cassetteIn, cassetteOut, slts), picgen(tv, videoMode, revision), video(videoMode, addressBus, picgen, textRows), -transistors("transistors"), // TODO load file from resources +transistors("transistors"), cpu(nullptr), powerUpReset(*this), revision(1) { diff --git a/src/apple2.h b/src/apple2.h index 5de3ce9..1031090 100644 --- a/src/apple2.h +++ b/src/apple2.h @@ -38,7 +38,9 @@ #include "cassettein.h" #include "cassetteout.h" #include "Emu6502.h" -#include + +#include + class Emulator; class ScreenImage; @@ -57,7 +59,7 @@ class Apple2 : public Timable PictureGenerator picgen; TextCharacters textRows; Video video; - std::ifstream transistors; + std::filesystem::path transistors; AbstractCpu* cpu; PowerUpReset powerUpReset; int revision;