From e41c92320aef4a54b7f3b323f7302b180019b6d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Neuwirth?= Date: Tue, 12 May 2009 19:53:07 +0200 Subject: some changes --- ue3/mycpu/ccpu.cpp | 93 +++++++++++++++++++++--------------------------------- 1 file changed, 36 insertions(+), 57 deletions(-) (limited to 'ue3/mycpu/ccpu.cpp') diff --git a/ue3/mycpu/ccpu.cpp b/ue3/mycpu/ccpu.cpp index 72ad96c..978f1f7 100644 --- a/ue3/mycpu/ccpu.cpp +++ b/ue3/mycpu/ccpu.cpp @@ -21,77 +21,56 @@ using namespace boost; CCPU::CCPU(const std::string& progfile, const std::string& memfile) : m_program(progfile), m_memory(memfile) { - m_instrtype["inc"] = new CInc(); - m_instrtype["dec"] = new CDec(); - m_instrtype["add"] = new CAdd(); - m_instrtype["sub"] = new CSub(); - m_instrtype["mul"] = new CMul(); - m_instrtype["div"] = new CDiv(); - m_instrtype["load"] = new CLoad(); - m_instrtype["store"] = new CStore(); - m_instrtype["test"] = new CTest(); - m_instrtype["label"] = new CLabel(); - m_instrtype["jumpa"] = new CJumpa(m_program.getJumpAddrs()); - m_instrtype["jumpz"] = new CJumpz(m_program.getJumpAddrs()); - m_instrtype["jumps"] = new CJumps(m_program.getJumpAddrs()); - m_instrtype["write"] = new CWrite(); + f_zero = false; + f_sign = false; + m_instrHandler["inc"] = new CInc(); + m_instrHandler["dec"] = new CDec(); + m_instrHandler["add"] = new CAdd(); + m_instrHandler["sub"] = new CSub(); + m_instrHandler["mul"] = new CMul(); + m_instrHandler["div"] = new CDiv(); + m_instrHandler["load"] = new CLoad(); + m_instrHandler["store"] = new CStore(); + m_instrHandler["test"] = new CTest(f_zero, f_sign); + m_instrHandler["label"] = new CLabel(); + m_instrHandler["jumpa"] = new CJumpa(m_program.getJumpAddrs()); + m_instrHandler["jumpz"] = new CJumpz(f_zero, f_sign, m_program.getJumpAddrs()); + m_instrHandler["jumps"] = new CJumps(f_zero, f_sign, m_program.getJumpAddrs()); + m_instrHandler["write"] = new CWrite(); } - +CCPU::~CCPU() +{ + std::map::iterator it; + for (it = m_instrHandler.begin(); it != m_instrHandler.end(); it++) + delete (*it).second ; +} void CCPU::proceed() { - + while (m_memory.getRegister("R0") < m_program.getMaxProgramCount()) { std::vector& i_list = m_program.getInstruction( m_memory.getRegister("R0") ); - /* switch (m_instrtype[i_list[0]]) - { - case INC: - cout << "fick mich"<< endl<exec(m_memory, i_list); +/* for(int i = 0; i < (int)i_list.size(); i++) cout << i_list[i] << " "; - m_memory.getRegister("R0")++; - cout << m_memory.getRegister("R0")<< endl<& i_list) -{ - -} -- cgit v1.2.3