From 34483e07a0548d32651cda4ca4282f3cf8cae870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Neuwirth?= Date: Tue, 12 May 2009 15:27:58 +0200 Subject: adding rest of files --- ue3/mycpu/cinstruction.cpp | 104 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 ue3/mycpu/cinstruction.cpp (limited to 'ue3/mycpu/cinstruction.cpp') diff --git a/ue3/mycpu/cinstruction.cpp b/ue3/mycpu/cinstruction.cpp new file mode 100644 index 0000000..2c8dedf --- /dev/null +++ b/ue3/mycpu/cinstruction.cpp @@ -0,0 +1,104 @@ +#include +#include +#include +#include "cinstruction.h" +#include "cmem.h" +using namespace std; + +void CInc::exec(CMem& mem, vector& instr) +{ + mem.getRegister(instr[1])++; +} + + +void CDec::exec(CMem& mem, vector& instr) +{ + mem.getRegister(instr[1])--; +} + + +void CAdd::exec(CMem& mem, vector& instr) +{ + mem.getRegister(instr[1]) = mem.getRegister(instr[2]) + + mem.getRegister(instr[3]); +} + + +void CSub::exec(CMem& mem, vector& instr) +{ + mem.getRegister(instr[1]) = mem.getRegister(instr[2]) - + mem.getRegister(instr[3]); +} + + +void CMul::exec(CMem& mem, vector& instr) +{ + mem.getRegister(instr[1]) = mem.getRegister(instr[2]) * + mem.getRegister(instr[3]); +} + + +void CDiv::exec(CMem& mem, vector& instr) +{ + mem.getRegister(instr[1]) = mem.getRegister(instr[2]) / + mem.getRegister(instr[3]); +} + + +void CLoad::exec(CMem& mem, vector& instr) +{ + mem.getRegister(instr[1]) = mem.getMem(instr[2]); +} + + +void CStore::exec(CMem& mem, vector& instr) +{ + mem.setMem(instr[2], mem.getRegister(instr[1])); +} + + +void CTest::test(CMem& mem, vector& instr, bool& f_zero, bool& f_sign) +{ + if(mem.getRegister(instr[1]) == 0) + f_zero = true; + else + f_zero = false; + + if(mem.getRegister(instr[1]) <= 0) + f_sign = true; + else + f_sign = false; +} + + + + + +void CJumpa::exec(CMem& mem, vector& instr) +{ + mem.getRegister(instr[0]) = (int) m_jumpaddr[instr[1]]; +} + + +void CJumpz::exec(CMem& mem, vector& instr, bool& f_zero) +{ + if(f_zero) + mem.getRegister(instr[0]) = (int) m_jumpaddr[instr[1]]; +} + + +void CJumps::exec(CMem& mem, vector& instr, bool& f_sign) +{ + if(f_sign) + mem.getRegister(instr[0]) = (int) m_jumpaddr[instr[1]]; +} + + +void CWrite::exec(CMem& mem, vector& instr) +{ + if(instr[1] == "WDEZ") + cout << mem.getRegister(instr[2]) << endl; + else if (instr[1] == "WHEX") + cout << hex << mem.getRegister(instr[2]) << endl; +} + -- cgit v1.2.3