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");
|
FILE *f = fopen(fname, "rb");
|
||||||
int byte;
|
int byte;
|
||||||
xPc = 0x4000000000000000;
|
xPc = 0x4000000000000000;
|
||||||
|
xSp = 0xFFFFFFFFFFFFFF00;
|
||||||
|
xBp = 0xFFFFFFFFFFFFFF00;
|
||||||
uint64_t i = xPc;
|
uint64_t i = xPc;
|
||||||
while ((byte = fgetc(f)) != EOF) {
|
while ((byte = fgetc(f)) != EOF) {
|
||||||
memory_set8(i, byte);
|
memory_set8(i, byte);
|
||||||
|
|
@ -160,7 +162,6 @@ int main(int argc, char **argv) {
|
||||||
((uint64_t)x7 << 8) +
|
((uint64_t)x7 << 8) +
|
||||||
((uint64_t)x8 << 0);
|
((uint64_t)x8 << 0);
|
||||||
registers[reg] = val;
|
registers[reg] = val;
|
||||||
//printf("Moved value 0x%lX into r%d\n", val, reg);
|
|
||||||
registers[0] = 0;
|
registers[0] = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -185,6 +186,19 @@ int main(int argc, char **argv) {
|
||||||
negativeFlag = (val < 0);
|
negativeFlag = (val < 0);
|
||||||
break;
|
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
|
case 0x94: { // Mov64
|
||||||
unsigned char dst = inputs[0];
|
unsigned char dst = inputs[0];
|
||||||
unsigned char src = inputs[1];
|
unsigned char src = inputs[1];
|
||||||
|
|
@ -234,6 +248,14 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 0xC3: { // JmpIP
|
||||||
|
unsigned char addr = inputs[0];
|
||||||
|
if (positiveFlag) {
|
||||||
|
if (DEBUG) printf("Jump!\n");
|
||||||
|
xPc = registers[addr];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 0x46: { // Call
|
case 0x46: { // Call
|
||||||
unsigned char addr = inputs[0];
|
unsigned char addr = inputs[0];
|
||||||
xSp -= 8;
|
xSp -= 8;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue