diff --git a/ass2/simulator/.qtcreator/CMakeLists.txt.user b/ass2/simulator/.qtcreator/CMakeLists.txt.user index 282a626..b3e0eab 100644 --- a/ass2/simulator/.qtcreator/CMakeLists.txt.user +++ b/ass2/simulator/.qtcreator/CMakeLists.txt.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -105,16 +105,16 @@ 2 false - -DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} + -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} -DCMAKE_BUILD_TYPE:STRING=Debug +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} -DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON -DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} -DQT_MAINTENANCE_TOOL:FILEPATH=/home/aljaz/Qt/MaintenanceTool -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} 0 /home/aljaz/Desktop/spo/ass2/simulator/build/Desktop_Qt_6_10_1-Debug diff --git a/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/.qtc_clangd/.cache/clangd/index/machine.cpp.FD5DF53B10242751.idx b/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/.qtc_clangd/.cache/clangd/index/machine.cpp.FD5DF53B10242751.idx index 2053dbc..d0731ff 100644 Binary files a/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/.qtc_clangd/.cache/clangd/index/machine.cpp.FD5DF53B10242751.idx and b/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/.qtc_clangd/.cache/clangd/index/machine.cpp.FD5DF53B10242751.idx differ diff --git a/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/.qtc_clangd/.cache/clangd/index/machine.h.D09D611E77E172BE.idx b/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/.qtc_clangd/.cache/clangd/index/machine.h.D09D611E77E172BE.idx index 86a7f4c..f8413d5 100644 Binary files a/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/.qtc_clangd/.cache/clangd/index/machine.h.D09D611E77E172BE.idx and b/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/.qtc_clangd/.cache/clangd/index/machine.h.D09D611E77E172BE.idx differ diff --git a/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/.qtc_clangd/.cache/clangd/index/opcode.h.2460D9A23E2279B0.idx b/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/.qtc_clangd/.cache/clangd/index/opcode.h.2460D9A23E2279B0.idx index de57000..e12b481 100644 Binary files a/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/.qtc_clangd/.cache/clangd/index/opcode.h.2460D9A23E2279B0.idx and b/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/.qtc_clangd/.cache/clangd/index/opcode.h.2460D9A23E2279B0.idx differ diff --git a/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/Testing/Temporary/LastTest.log b/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/Testing/Temporary/LastTest.log index b42501f..a10933d 100644 --- a/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/Testing/Temporary/LastTest.log +++ b/ass2/simulator/build/Desktop_Qt_6_10_1-Debug/Testing/Temporary/LastTest.log @@ -1,3 +1,3 @@ -Start testing: Nov 27 14:24 CET +Start testing: Dec 04 13:01 CET ---------------------------------------------------------- -End testing: Nov 27 14:24 CET +End testing: Dec 04 13:01 CET diff --git a/ass2/simulator/machine.cpp b/ass2/simulator/machine.cpp index c316ba3..f7d473b 100644 --- a/ass2/simulator/machine.cpp +++ b/ass2/simulator/machine.cpp @@ -1,5 +1,6 @@ #include "machine.h" #include "device.h" +#include "opcode.h" #include using namespace std; @@ -95,15 +96,55 @@ void Machine::setDevice(int num, Device* device) { void Machine::notImplemented(string mnemonic) { - throw std::runtime_error("Instruction: " + mnemonic + " is not yet implemented."); + std::cerr << "Instruction: " << mnemonic << " is not yet implemented." << endl; } void Machine::invalidOpcode(int opcode) { - throw std::runtime_error("Invalid opcode: " + to_string(opcode)); + std::cerr << "Invalid opcode: " << to_string(opcode) << endl; } void Machine::invalidAddressing() { - throw std::runtime_error("Invalid addressing used."); + std::cerr << "Invalid addressing used." << endl; +} + +// Nalozi in vrni en bajt z naslova PC +// in ga poveca za 1 +int Machine::fetch() { + int address = getReg(8); + setReg(8, address + 1); + return readByte(address); +} + + +void Machine::execute() { + int opcode = fetch(); + int operand; + switch (opcode) { + // Format 1 + case Opcode::FIX: + case Opcode::FLOAT: + case Opcode::NORM: + execF1(opcode); + break; + + // Format 2 + case Opcode::ADDR: + case Opcode::CLEAR: + case Opcode::DIVR: + case Opcode::MULR: + case Opcode::RMO: + case Opcode::SHIFTL: + case Opcode::SHIFTR: + case Opcode::SUBR: + operand = fetch(); + execF2(opcode, operand); + break; + + // Format 3/4 (SIC/XE) + default: + decode_F3_F4(opcode); + break; + } } @@ -113,3 +154,6 @@ void Machine::invalidAddressing() { + + + diff --git a/ass2/simulator/machine.h b/ass2/simulator/machine.h index 5c86b08..869170f 100644 --- a/ass2/simulator/machine.h +++ b/ass2/simulator/machine.h @@ -53,11 +53,19 @@ public: void notImplemented(string mnemonic); - // Izvajalnik je naletel na operacijsko kodo ukaza, ki ni veljavna. void invalidOpcode(int opcode); - // Neveljavno naslavljanje. void invalidAddressing(); + + int fetch(); + + void execute(); + + bool execF1(int opcode); + + bool execF2(int opcode, int operand); + + bool execSICF3F4(int opcode, int ni, int operand); }; #endif