mirror of
https://github.com/pound-emu/pound.git
synced 2025-12-12 10:37:00 +00:00
Added print debug info, .write_byte and .read_byte to cpu, with boundary check and rewrote the test program to use those.
This commit is contained in:
parent
e6829ef94c
commit
cb485588cd
2 changed files with 31 additions and 7 deletions
|
|
@ -11,7 +11,28 @@ struct CPU {
|
||||||
|
|
||||||
CPU() { std::memset(memory, 0, MEM_SIZE); }
|
CPU() { std::memset(memory, 0, MEM_SIZE); }
|
||||||
|
|
||||||
uint64_t& x(int i) { return regs[i]; }
|
uint64_t &x(int i) { return regs[i]; }
|
||||||
|
|
||||||
|
uint8_t read_byte(uint64_t addr) {
|
||||||
|
if (addr >= MEM_SIZE) {
|
||||||
|
printf("%s out of bounds\n", addr);
|
||||||
|
}
|
||||||
|
return memory[addr];
|
||||||
|
}
|
||||||
|
|
||||||
|
void write_byte(uint64_t addr, uint8_t byte) {
|
||||||
|
if (addr >= MEM_SIZE) {
|
||||||
|
printf("%s out of bounds\n", addr);
|
||||||
|
}
|
||||||
|
memory[addr] = byte;
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_debug_information() {
|
||||||
|
printf("PC = %lu\n", pc);
|
||||||
|
for (int reg = 0; reg < 32; reg++) {
|
||||||
|
printf("X%i = %lu\n", reg, x(reg)); // X0 = 0...
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
15
ui/main.cpp
15
ui/main.cpp
|
|
@ -3,20 +3,23 @@
|
||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
int main()
|
int main() {
|
||||||
{
|
|
||||||
CPU cpu;
|
CPU cpu;
|
||||||
cpu.pc = 0;
|
cpu.pc = 0;
|
||||||
|
|
||||||
// Simple ARMv8 program in memory (MOVZ X0, #5; ADD X0, X0, #3; RET)
|
// Simple ARMv8 program in memory (MOVZ X0, #5; ADD X0, X0, #3; RET)
|
||||||
// These are placeholders; real encoding will be parsed later
|
// These are placeholders; real encoding will be parsed later
|
||||||
cpu.memory[0] = 0x05; // MOVZ placeholder
|
cpu.write_byte(0, 0x05); // MOVZ placeholder
|
||||||
cpu.memory[4] = 0x03; // ADD placeholder
|
cpu.write_byte(4, 0x03); // ADD placeholder
|
||||||
cpu.memory[8] = 0xFF; // RET placeholder
|
cpu.write_byte(8, 0xFF); // RET placeholder
|
||||||
|
|
||||||
|
printf("%u\n", cpu.read_byte(0));
|
||||||
|
|
||||||
JIT jit;
|
JIT jit;
|
||||||
jit.translate_and_run(cpu);
|
jit.translate_and_run(cpu);
|
||||||
|
|
||||||
printf("X0 = %llu\n", cpu.regs[0]);
|
cpu.print_debug_information();
|
||||||
|
|
||||||
|
printf("X0 = %lu\n", cpu.x(0));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue