cec9135e9f
"bx_bool" which is always defined as Bit32u on all platforms. In Carbon specific code, Boolean is still used because the Carbon header files define it to unsigned char. - this fixes bug [ 623152 ] MacOSX: Triple Exception Booting win95. The bug was that some code in Bochs depends on Boolean to be a 32 bit value. (This should be fixed, but I don't know all the places where it needs to be fixed yet.) Because Carbon defined Boolean as an unsigned char, Bochs just followed along and used the unsigned char definition to avoid compile problems. This exposed the dependency on 32 bit Boolean on MacOS X only and led to major simulation problems, that could only be reproduced and debugged on that platform. - On the mailing list we debated whether to make all Booleans into "bool" or our own type. I chose bx_bool for several reasons. 1. Unlike C++'s bool, we can guarantee that bx_bool is the same size on all platforms, which makes it much less likely to have more platform-specific simulation differences in the future. (I spent hours on a borrowed MacOSX machine chasing bug 618388 before discovering that different sized Booleans were the problem, and I don't want to repeat that.) 2. We still have at least one dependency on 32 bit Booleans which must be fixed some time, but I don't want to risk introducing new bugs into the simulation just before the 2.0 release. Modified Files: bochs.h config.h.in gdbstub.cc logio.cc main.cc pc_system.cc pc_system.h plugin.cc plugin.h bios/rombios.c cpu/apic.cc cpu/arith16.cc cpu/arith32.cc cpu/arith64.cc cpu/arith8.cc cpu/cpu.cc cpu/cpu.h cpu/ctrl_xfer16.cc cpu/ctrl_xfer32.cc cpu/ctrl_xfer64.cc cpu/data_xfer16.cc cpu/data_xfer32.cc cpu/data_xfer64.cc cpu/debugstuff.cc cpu/exception.cc cpu/fetchdecode.cc cpu/flag_ctrl_pro.cc cpu/init.cc cpu/io_pro.cc cpu/lazy_flags.cc cpu/lazy_flags.h cpu/mult16.cc cpu/mult32.cc cpu/mult64.cc cpu/mult8.cc cpu/paging.cc cpu/proc_ctrl.cc cpu/segment_ctrl_pro.cc cpu/stack_pro.cc cpu/tasking.cc debug/dbg_main.cc debug/debug.h debug/sim2.cc disasm/dis_decode.cc disasm/disasm.h doc/docbook/Makefile docs-html/cosimulation.html fpu/wmFPUemu_glue.cc gui/amigaos.cc gui/beos.cc gui/carbon.cc gui/gui.cc gui/gui.h gui/keymap.cc gui/keymap.h gui/macintosh.cc gui/nogui.cc gui/rfb.cc gui/sdl.cc gui/siminterface.cc gui/siminterface.h gui/term.cc gui/win32.cc gui/wx.cc gui/wxmain.cc gui/wxmain.h gui/x.cc instrument/example0/instrument.cc instrument/example0/instrument.h instrument/example1/instrument.cc instrument/example1/instrument.h instrument/stubs/instrument.cc instrument/stubs/instrument.h iodev/cdrom.cc iodev/cdrom.h iodev/cdrom_osx.cc iodev/cmos.cc iodev/devices.cc iodev/dma.cc iodev/dma.h iodev/eth_arpback.cc iodev/eth_packetmaker.cc iodev/eth_packetmaker.h iodev/floppy.cc iodev/floppy.h iodev/guest2host.h iodev/harddrv.cc iodev/harddrv.h iodev/ioapic.cc iodev/ioapic.h iodev/iodebug.cc iodev/iodev.h iodev/keyboard.cc iodev/keyboard.h iodev/ne2k.h iodev/parallel.h iodev/pci.cc iodev/pci.h iodev/pic.h iodev/pit.cc iodev/pit.h iodev/pit_wrap.cc iodev/pit_wrap.h iodev/sb16.cc iodev/sb16.h iodev/serial.cc iodev/serial.h iodev/vga.cc iodev/vga.h memory/memory.h memory/misc_mem.cc
232 lines
6.2 KiB
C++
232 lines
6.2 KiB
C++
/////////////////////////////////////////////////////////////////
|
|
// $Id: wxmain.h,v 1.36 2002-10-25 11:44:37 bdenney Exp $
|
|
/////////////////////////////////////////////////////////////////
|
|
// This file defines variables and classes that the wxWindows .cc files
|
|
// share. It should be included only by wx.cc and wxmain.cc.
|
|
|
|
// forward class declaration so that each class can have a pointer to
|
|
// the others.
|
|
class MyFrame;
|
|
class MyPanel;
|
|
class SimThread;
|
|
class FloppyConfigDialog;
|
|
class ParamDialog;
|
|
|
|
//hack alert; yuck; FIXME
|
|
extern MyFrame *theFrame;
|
|
extern MyPanel *thePanel;
|
|
|
|
// wxBochsClosing flag, see comments in wxmain.h
|
|
extern bool wxBochsClosing;
|
|
|
|
#define MAX_EVENTS 256
|
|
extern unsigned long num_events;
|
|
extern BxEvent event_queue[MAX_EVENTS];
|
|
|
|
enum
|
|
{
|
|
ID_Quit = 1,
|
|
ID_Config_New,
|
|
ID_Config_Read,
|
|
ID_Config_Save,
|
|
ID_Edit_FD_0,
|
|
ID_Edit_FD_1,
|
|
ID_Edit_ATA0,
|
|
ID_Edit_ATA1,
|
|
ID_Edit_ATA2,
|
|
ID_Edit_ATA3,
|
|
ID_Edit_Cdrom, // for toolbar. FIXME: toolbar can't handle >1 cdrom
|
|
ID_Edit_Boot,
|
|
ID_Edit_Memory,
|
|
ID_Edit_Sound,
|
|
ID_Edit_Cmos,
|
|
ID_Edit_Network,
|
|
ID_Edit_Keyboard,
|
|
ID_Edit_Serial_Parallel,
|
|
ID_Edit_Parallel,
|
|
ID_Edit_LoadHack,
|
|
ID_Edit_Other,
|
|
ID_Simulate_Start,
|
|
ID_Simulate_PauseResume,
|
|
ID_Simulate_Stop,
|
|
ID_Simulate_Speed,
|
|
ID_Debug_ShowCpu,
|
|
ID_Debug_ShowKeyboard,
|
|
ID_Debug_Console,
|
|
ID_Debug_ShowMemory,
|
|
ID_Log_View,
|
|
ID_Log_Prefs,
|
|
ID_Log_PrefsDevice,
|
|
ID_Help_About,
|
|
ID_Sim2CI_Event,
|
|
// ids for Bochs toolbar
|
|
ID_Toolbar_FloppyA,
|
|
ID_Toolbar_FloppyB,
|
|
ID_Toolbar_CdromD,
|
|
ID_Toolbar_Reset,
|
|
ID_Toolbar_Power,
|
|
ID_Toolbar_Copy,
|
|
ID_Toolbar_Paste,
|
|
ID_Toolbar_Snapshot,
|
|
ID_Toolbar_Config,
|
|
ID_Toolbar_Mouse_en,
|
|
ID_Toolbar_User,
|
|
// dialog box: LogMsgAskDialog
|
|
ID_Continue,
|
|
ID_Die,
|
|
ID_DumpCore,
|
|
ID_Debugger,
|
|
ID_Help,
|
|
// dialog box: FloppyConfigDialog
|
|
ID_None,
|
|
ID_Physical_A,
|
|
ID_Physical_B,
|
|
ID_Filename,
|
|
ID_FilenameText,
|
|
ID_Browse,
|
|
ID_Create,
|
|
// dialog box: HDConfigDialog
|
|
ID_Enable,
|
|
ID_Cylinders,
|
|
ID_Heads,
|
|
ID_SPT,
|
|
ID_Megs,
|
|
ID_ComputeGeometry,
|
|
// dialog box: LogOptions
|
|
ID_Advanced,
|
|
// dialog box: CpuRegistersDialog
|
|
ID_Debug_Continue,
|
|
ID_Debug_Stop,
|
|
ID_Debug_Step,
|
|
ID_Debug_Commit,
|
|
ID_Close,
|
|
ID_Execute,
|
|
ID_DebugCommand,
|
|
// advanced log options
|
|
ID_ApplyDefault,
|
|
// that's all
|
|
ID_LAST_USER_DEFINED
|
|
};
|
|
|
|
|
|
// to compile in debug messages, change these defines to x. To remove them,
|
|
// change the defines to return nothing.
|
|
#define IFDBG_VGA(x) /* nothing */
|
|
//#define IFDBG_VGA(x) x
|
|
|
|
#define IFDBG_KEY(x) /* nothing */
|
|
//#define IFDBG_KEY(x) x
|
|
|
|
#define IFDBG_MOUSE(x) /* nothing */
|
|
//#define IFDBG_MOUSE(x) x
|
|
|
|
#define IFDBG_EVENT(x) /* nothing */
|
|
//#define IFDBG_EVENT(x) x
|
|
|
|
#define IFDBG_DLG(x) /* nothing */
|
|
//#define IFDBG_DLG(x) x
|
|
|
|
|
|
// defined in wxmain.cc
|
|
void safeWxStrcpy (char *dest, wxString src, int destlen);
|
|
|
|
/// the MyPanel methods are defined in wx.cc
|
|
class MyPanel: public wxPanel
|
|
{
|
|
bx_bool fillBxKeyEvent (wxKeyEvent& event, BxKeyEvent& bxev, bx_bool release); // for all platforms
|
|
bx_bool fillBxKeyEvent_MSW (wxKeyEvent& event, BxKeyEvent& bxev, bx_bool release);
|
|
bx_bool fillBxKeyEvent_GTK (wxKeyEvent& event, BxKeyEvent& bxev, bx_bool release);
|
|
public:
|
|
MyPanel(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = "panel");
|
|
~MyPanel();
|
|
void OnKeyDown(wxKeyEvent& event);
|
|
void OnKeyUp(wxKeyEvent& event);
|
|
void OnTimer(wxCommandEvent& event);
|
|
void OnPaint(wxPaintEvent& event);
|
|
void OnMouse(wxMouseEvent& event);
|
|
void MyRefresh ();
|
|
static void OnPluginInit ();
|
|
void ToggleMouse (bool fromToolbar);
|
|
private:
|
|
wxCursor *blankCursor;
|
|
bool needRefresh;
|
|
wxTimer refreshTimer;
|
|
Bit16s mouseSavedX, mouseSavedY;
|
|
Bit32u centerX, centerY;
|
|
DECLARE_EVENT_TABLE()
|
|
};
|
|
|
|
/// the MyFrame methods are defined in wxmain.cc
|
|
class MyFrame: public wxFrame
|
|
{
|
|
MyPanel *panel;
|
|
public:
|
|
MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, const long style);
|
|
~MyFrame();
|
|
enum StatusChange { Start, Stop, Pause, Resume };
|
|
void simStatusChanged (StatusChange change, bx_bool popupNotify=false);
|
|
void OnConfigNew(wxCommandEvent& event);
|
|
void OnConfigRead(wxCommandEvent& event);
|
|
void OnConfigSave(wxCommandEvent& event);
|
|
void OnQuit(wxCommandEvent& event);
|
|
void OnAbout(wxCommandEvent& event);
|
|
void OnStartSim(wxCommandEvent& event);
|
|
void OnPauseResumeSim(wxCommandEvent& event);
|
|
void OnKillSim(wxCommandEvent& event);
|
|
void OnSim2CIEvent(wxCommandEvent& event);
|
|
void OnLogMsg(BxEvent *logMsgEvent);
|
|
void OnEditBoot(wxCommandEvent& event);
|
|
void OnEditMemory(wxCommandEvent& event);
|
|
void OnEditSound(wxCommandEvent& event);
|
|
void OnEditCmos(wxCommandEvent& event);
|
|
void OnEditNet(wxCommandEvent& event);
|
|
void OnEditKeyboard(wxCommandEvent& event);
|
|
void OnEditSerialParallel(wxCommandEvent& event);
|
|
void OnEditLoadHack(wxCommandEvent& event);
|
|
void OnEditOther(wxCommandEvent& event);
|
|
void OnLogPrefs(wxCommandEvent& event);
|
|
void OnLogPrefsDevice(wxCommandEvent& event);
|
|
void OnOtherEvent(wxCommandEvent& event);
|
|
void OnShowCpu(wxCommandEvent& event);
|
|
void OnShowKeyboard(wxCommandEvent& event);
|
|
#if BX_DEBUGGER
|
|
void OnDebugLog(wxCommandEvent& event);
|
|
void DebugBreak ();
|
|
void DebugCommand (wxString string);
|
|
void DebugCommand (const char *cmd);
|
|
#endif
|
|
static bool editFloppyValidate (FloppyConfigDialog *dialog);
|
|
void editFloppyConfig (int drive);
|
|
void editATAConfig (int channel);
|
|
void OnToolbarClick(wxCommandEvent& event);
|
|
int HandleAskParam (BxEvent *event);
|
|
int HandleAskParamString (bx_param_string_c *param);
|
|
|
|
// called from the sim thread's OnExit() method.
|
|
void OnSimThreadExit ();
|
|
SimThread *GetSimThread () { return sim_thread; }
|
|
|
|
private:
|
|
wxCriticalSection sim_thread_lock;
|
|
SimThread *sim_thread; // get the lock before accessing sim_thread
|
|
int start_bochs_times;
|
|
wxMenu *menuConfiguration;
|
|
wxMenu *menuEdit;
|
|
wxMenu *menuSimulate;
|
|
wxMenu *menuDebug;
|
|
wxMenu *menuLog;
|
|
wxMenu *menuHelp;
|
|
ParamDialog *showCpu, *showKbd;
|
|
#if BX_DEBUGGER
|
|
DebugLogDialog *showDebugLog;
|
|
#endif
|
|
void RefreshDialogs ();
|
|
char *debugCommand; // maybe need lock on this
|
|
BxEvent *debugCommandEvent; // maybe need lock on this
|
|
public:
|
|
bool WantRefresh ();
|
|
|
|
DECLARE_EVENT_TABLE()
|
|
};
|
|
|