Added an actual starting point for xSp and xBp

This commit is contained in:
cannoli-fruit 2026-07-25 00:17:57 -04:00
commit 0e1237f0be

View file

@ -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;