00001
00009 #ifndef CCPU_H
00010 #define CCPU_H 1
00011
00012 #include <iostream>
00013 #include <set>
00014 #include "cdat.h"
00015 #include "cmem.h"
00016 #include "cprogram.h"
00017 #include "cdisplay.h"
00018
00025 class CCPU
00026 {
00027 public:
00037 CCPU(const unsigned cnt);
00038
00048 ~CCPU();
00049
00059 const unsigned getRegisterCount() const
00060 {
00061 return m_regcnt;
00062 }
00063
00073 CDat *getRegisters() const
00074 {
00075 return m_registers;
00076 }
00077
00087 void setMemory(CMem *memory)
00088 {
00089 m_memory = memory;
00090 }
00091
00101 CMem *getMemory() const
00102 {
00103 return m_memory;
00104 }
00105
00115 void setProgram(const CProgram *program)
00116 {
00117 m_program = program;
00118 }
00119
00129 const CProgram *getProgram()
00130 {
00131 return m_program;
00132 }
00133
00143 const std::set<CDisplay *>& getDisplays()
00144 {
00145 return m_displays;
00146 }
00147
00157 void setFlagZero(const bool value)
00158 {
00159 m_flagzero = value;
00160 }
00161
00171 const bool getFlagZero()
00172 {
00173 return m_flagzero;
00174 }
00175
00185 void setFlagSign(const bool value)
00186 {
00187 m_flagsign = value;
00188 }
00189
00199 const bool getFlagSign()
00200 {
00201 return m_flagsign;
00202 }
00203
00213 void run();
00214
00215 #if DEBUG
00216
00225 void dumpRegisters(std::ostream& out);
00226 #endif
00227
00228 private:
00229
00230 CDat *m_registers;
00231 unsigned m_regcnt;
00232 CMem *m_memory;
00233 const CProgram *m_program;
00234 std::set<CDisplay *> m_displays;
00235 bool m_flagzero;
00236 bool m_flagsign;
00237 };
00238
00239 #endif
00240
00241