#ifndef VMACHINE_H #define VMACHINE_H #include #include #include "system.h" #include "MKCpu.h" #include "Memory.h" #include "Display.h" //#define WINDOWS 1 #if defined (WINDOWS) #include #endif #define IOREFRESH 32 #define OPINTERRUPT 25 // operator interrupt code (CTRL-Y) #define HDRMAGICKEY "SNAPSHOT" #define HDRDATALEN 15 #define HEXEOF ":00000001FF" using namespace std; namespace MKBasic { class VMachine { public: VMachine(); VMachine(string romfname, string ramfname); ~VMachine(); void InitVM(); Regs *Run(); Regs *Run(unsigned short addr); Regs *Exec(); Regs *Exec(unsigned short addr); Regs *Step(); Regs *Step(unsigned short addr); void LoadROM(string romfname); void LoadRAM(string ramfname); int LoadRAMBin(string ramfname); int LoadRAMHex(string hexfname); unsigned short MemPeek8bit(unsigned short addr); void MemPoke8bit(unsigned short addr, unsigned char v); Regs *GetRegs(); void SetCharIO(unsigned short addr, bool echo); void DisableCharIO(); unsigned short GetCharIOAddr(); bool GetCharIOActive(); void ShowIO(); void ClearScreen(); void ScrHome(); bool IsAutoExec(); bool IsAutoReset(); void EnableROM(); void DisableROM(); void SetROM(unsigned short start, unsigned short end); void EnableROM(unsigned short start, unsigned short end); unsigned short GetROMBegin(); unsigned short GetROMEnd(); bool IsROMEnabled(); unsigned short GetRunAddr(); void SetOpInterrupt(bool opint); bool IsOpInterrupt(); queue GetExecHistory(); unsigned short Disassemble(unsigned short addr, char *buf); void Reset(); void Interrupt(); int SaveSnapshot(string fname); protected: private: MKCpu *mpCPU; Memory *mpROM; Memory *mpRAM; Display *mpDisp; unsigned short mRunAddr; unsigned short mCharIOAddr; bool mCharIOActive; bool mCharIO; bool mOpInterrupt; // operator interrupt from console bool mAutoExec; bool mAutoReset; void LoadMEM(string memfname, Memory *pmem); void ShowDisp(); bool HasHdrData(FILE *fp); bool LoadHdrData(FILE *fp); void SaveHdrData(FILE *fp); }; } // namespace MKBasic #endif