summaryrefslogtreecommitdiffstats
path: root/ue3/mycpu/ccpu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ue3/mycpu/ccpu.cpp')
-rw-r--r--ue3/mycpu/ccpu.cpp93
1 files changed, 36 insertions, 57 deletions
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;
21CCPU::CCPU(const std::string& progfile, const std::string& memfile) 21CCPU::CCPU(const std::string& progfile, const std::string& memfile)
22 : m_program(progfile), m_memory(memfile) 22 : m_program(progfile), m_memory(memfile)
23{ 23{
24 m_instrtype["inc"] = new CInc(); 24 f_zero = false;
25 m_instrtype["dec"] = new CDec(); 25 f_sign = false;
26 m_instrtype["add"] = new CAdd(); 26 m_instrHandler["inc"] = new CInc();
27 m_instrtype["sub"] = new CSub(); 27 m_instrHandler["dec"] = new CDec();
28 m_instrtype["mul"] = new CMul(); 28 m_instrHandler["add"] = new CAdd();
29 m_instrtype["div"] = new CDiv(); 29 m_instrHandler["sub"] = new CSub();
30 m_instrtype["load"] = new CLoad(); 30 m_instrHandler["mul"] = new CMul();
31 m_instrtype["store"] = new CStore(); 31 m_instrHandler["div"] = new CDiv();
32 m_instrtype["test"] = new CTest(); 32 m_instrHandler["load"] = new CLoad();
33 m_instrtype["label"] = new CLabel(); 33 m_instrHandler["store"] = new CStore();
34 m_instrtype["jumpa"] = new CJumpa(m_program.getJumpAddrs()); 34 m_instrHandler["test"] = new CTest(f_zero, f_sign);
35 m_instrtype["jumpz"] = new CJumpz(m_program.getJumpAddrs()); 35 m_instrHandler["label"] = new CLabel();
36 m_instrtype["jumps"] = new CJumps(m_program.getJumpAddrs()); 36 m_instrHandler["jumpa"] = new CJumpa(m_program.getJumpAddrs());
37 m_instrtype["write"] = new CWrite(); 37 m_instrHandler["jumpz"] = new CJumpz(f_zero, f_sign, m_program.getJumpAddrs());
38 m_instrHandler["jumps"] = new CJumps(f_zero, f_sign, m_program.getJumpAddrs());
39 m_instrHandler["write"] = new CWrite();
38} 40}
39 41
40 42CCPU::~CCPU()
43{
44 std::map<std::string, CInstruction *>::iterator it;
45 for (it = m_instrHandler.begin(); it != m_instrHandler.end(); it++)
46 delete (*it).second ;
47}
41void CCPU::proceed() 48void CCPU::proceed()
42{ 49{
43 50
44 while (m_memory.getRegister("R0") < m_program.getMaxProgramCount()) 51 while (m_memory.getRegister("R0") < m_program.getMaxProgramCount())
45 { 52 {
46 std::vector<std::string>& i_list = m_program.getInstruction( 53 std::vector<std::string>& i_list = m_program.getInstruction(
47 m_memory.getRegister("R0") 54 m_memory.getRegister("R0")
48 ); 55 );
49 56
50 /* switch (m_instrtype[i_list[0]])
51 {
52 case INC:
53 cout << "fick mich"<< endl<<endl;
54 break;
55 case DEC:
56 break;
57 case ADD:
58 break;
59 case SUB:
60 cout << "sub"<< endl<<endl;
61 break;
62 case MUL:
63 break;
64 case DIV:
65 break;
66 case LOAD:
67 cout << "load"<< endl<<endl;
68 break;
69 case STORE:
70 break;
71 case TEST:
72 break;
73 case LABEL:
74 break;
75 case JUMPA:
76 break;
77 case JUMPZ:
78 break;
79 case JUMPS:
80 break;
81 default:
82 break;
83 } */
84 57
85 for(int i = 0; i < (int)i_list.size(); i++) 58
59 m_instrHandler[i_list[0]]->exec(m_memory, i_list);
60/* for(int i = 0; i < (int)i_list.size(); i++)
86 cout << i_list[i] << " "; 61 cout << i_list[i] << " ";
87 m_memory.getRegister("R0")++; 62 if (i_list[0] == "load")
88 cout << m_memory.getRegister("R0")<< endl<<endl; 63 {
64
65 cout << m_memory.getRegister(i_list[1])<<" "<<m_memory.getRegister("R255")<<endl;
66 break;
67 }*/
68 m_memory.getRegister("R0")++;
69// cout << m_memory.getRegister("R0")<<endl;
70 // cout<<endl;
89 } 71 }
72
90} 73}
91 74
92void CCPU::execInstruction(CInstruction& instr, vector<string>& i_list)
93{
94
95 75
96}
97 76