checkpoint

This commit is contained in:
aljazbrodar. 2025-12-10 17:57:28 +01:00
parent 12421d0e5d
commit 1d357c6c96
48 changed files with 1580 additions and 219 deletions

View file

@ -20,6 +20,22 @@ Machine::Machine() {
}
}
void Machine::resetRegisters() {
setA(0);
setB(0);
setL(0);
setT(0);
setS(0);
setX(0);
setPC(0);
setSW(0);
setF(0.0);
}
void Machine::resetMemory() {
std::fill(std::begin(memory), std::end(memory), 0);
}
int Machine::getReg(int reg)
{
switch (reg) {
@ -251,6 +267,7 @@ bool Machine::execSICF3F4(int opcode, int ni, int operand) {
UV = (memory[UA] << 16) | (memory[UA + 1] << 8) | memory[UA + 2]; //izracunamo operand oz. uporabno vrednost
}
}
cout << "UA: " << UA << " UV: " << UV << endl;
switch (opcode) {
case Opcode::ADD:
setA(getA() + UV);
@ -277,26 +294,26 @@ bool Machine::execSICF3F4(int opcode, int ni, int operand) {
setA(getA() / UV);
return true;
case Opcode::J:
setPC(UV);
setPC(UA);
return true;
case Opcode::JEQ:
if (getSW() == 0x00) {
setPC(UV);
setPC(UA);
}
return true;
case Opcode::JGT:
if (getSW() == 0x80) {
setPC(UV);
setPC(UA);
}
return true;
case Opcode::JLT:
if (getSW() == 0x40) {
setPC(UV);
setPC(UA);
}
return true;
case Opcode::JSUB:
setL(getPC());
setPC(UV);
setPC(UA);
return true;
case Opcode::LDA:
setA(UV);
@ -336,27 +353,27 @@ bool Machine::execSICF3F4(int opcode, int ni, int operand) {
return true;
case Opcode::STA:
temp = getA();
memory[UV] = (temp >> 16) & 0xFF;
memory[UV + 1] = (temp >> 8) & 0xFF;
memory[UV + 2] = temp & 0xFF;
memory[UA] = (temp >> 16) & 0xFF;
memory[UA + 1] = (temp >> 8) & 0xFF;
memory[UA + 2] = temp & 0xFF;
return true;
case Opcode::STB:
temp = getB();
memory[UV] = (temp >> 16) & 0xFF;
memory[UV + 1] = (temp >> 8) & 0xFF;
memory[UV + 2] = temp & 0xFF;
memory[UA] = (temp >> 16) & 0xFF;
memory[UA + 1] = (temp >> 8) & 0xFF;
memory[UA + 2] = temp & 0xFF;
return true;
case Opcode::STS:
temp = getS();
memory[UV] = (temp >> 16) & 0xFF;
memory[UV + 1] = (temp >> 8) & 0xFF;
memory[UV + 2] = temp & 0xFF;
memory[UA] = (temp >> 16) & 0xFF;
memory[UA + 1] = (temp >> 8) & 0xFF;
memory[UA + 2] = temp & 0xFF;
return true;
case Opcode::STT:
temp = getA();
memory[UV] = (temp >> 16) & 0xFF;
memory[UV + 1] = (temp >> 8) & 0xFF;
memory[UV + 2] = temp & 0xFF;
memory[UA] = (temp >> 16) & 0xFF;
memory[UA + 1] = (temp >> 8) & 0xFF;
memory[UA + 2] = temp & 0xFF;
return true;
case Opcode::STCH:
temp = getA();
@ -364,21 +381,21 @@ bool Machine::execSICF3F4(int opcode, int ni, int operand) {
return true;
case Opcode::STL:
temp = getL();
memory[UV] = (temp >> 16) & 0xFF;
memory[UV + 1] = (temp >> 8) & 0xFF;
memory[UV + 2] = temp & 0xFF;
memory[UA] = (temp >> 16) & 0xFF;
memory[UA + 1] = (temp >> 8) & 0xFF;
memory[UA + 2] = temp & 0xFF;
return true;
case Opcode::STSW:
temp = getSW();
memory[UV] = (temp >> 16) & 0xFF;
memory[UV + 1] = (temp >> 8) & 0xFF;
memory[UV + 2] = temp & 0xFF;
memory[UA] = (temp >> 16) & 0xFF;
memory[UA + 1] = (temp >> 8) & 0xFF;
memory[UA + 2] = temp & 0xFF;
return true;
case Opcode::STX:
temp = getX();
memory[UV] = (temp >> 16) & 0xFF;
memory[UV + 1] = (temp >> 8) & 0xFF;
memory[UV + 2] = temp & 0xFF;
memory[UA] = (temp >> 16) & 0xFF;
memory[UA + 1] = (temp >> 8) & 0xFF;
memory[UA + 2] = temp & 0xFF;
return true;
case Opcode::SUB:
setA(getA() - UV);