checkpoint
This commit is contained in:
parent
12421d0e5d
commit
1d357c6c96
48 changed files with 1580 additions and 219 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue