Added an actual starting point for xSp and xBp
This commit is contained in:
parent
966a7f0de1
commit
0e1237f0be
1 changed files with 23 additions and 1 deletions
24
src/interp.c
24
src/interp.c
|
|
@ -98,6 +98,8 @@ int load_program(const char *fname) {
|
|||
FILE *f = fopen(fname, "rb");
|
||||
int byte;
|
||||
xPc = 0x4000000000000000;
|
||||
xSp = 0xFFFFFFFFFFFFFF00;
|
||||
xBp = 0xFFFFFFFFFFFFFF00;
|
||||
uint64_t i = xPc;
|
||||
while ((byte = fgetc(f)) != EOF) {
|
||||
memory_set8(i, byte);
|
||||
|
|
@ -160,7 +162,6 @@ int main(int argc, char **argv) {
|
|||
((uint64_t)x7 << 8) +
|
||||
((uint64_t)x8 << 0);
|
||||
registers[reg] = val;
|
||||
//printf("Moved value 0x%lX into r%d\n", val, reg);
|
||||
registers[0] = 0;
|
||||
break;
|
||||
}
|
||||
|
|
@ -185,6 +186,19 @@ int main(int argc, char **argv) {
|
|||
negativeFlag = (val < 0);
|
||||
break;
|
||||
}
|
||||
case 0x7D: { // Cmp64
|
||||
unsigned char regA = inputs[0];
|
||||
unsigned char regB = inputs[1];
|
||||
|
||||
uint64_t valA = registers[regA];
|
||||
uint64_t valB = registers[regB];
|
||||
|
||||
zeroFlag = (valA == valB);
|
||||
parityFlag = (valA-valB)&1;
|
||||
positiveFlag = (valA > valB);
|
||||
negativeFlag = (valA < valB);
|
||||
break;
|
||||
}
|
||||
case 0x94: { // Mov64
|
||||
unsigned char dst = inputs[0];
|
||||
unsigned char src = inputs[1];
|
||||
|
|
@ -234,6 +248,14 @@ int main(int argc, char **argv) {
|
|||
}
|
||||
break;
|
||||
}
|
||||
case 0xC3: { // JmpIP
|
||||
unsigned char addr = inputs[0];
|
||||
if (positiveFlag) {
|
||||
if (DEBUG) printf("Jump!\n");
|
||||
xPc = registers[addr];
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 0x46: { // Call
|
||||
unsigned char addr = inputs[0];
|
||||
xSp -= 8;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue