aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ahoy/emulator.c13
-rw-r--r--src/ahoy/emulator.h2
-rw-r--r--src/ahoy/main.c2
3 files changed, 10 insertions, 7 deletions
diff --git a/src/ahoy/emulator.c b/src/ahoy/emulator.c
index 00a87ff..edb3512 100644
--- a/src/ahoy/emulator.c
+++ b/src/ahoy/emulator.c
@@ -17,6 +17,7 @@ static void opexec(uint16_t);
[[noreturn]] static void badins(uint16_t);
struct chip8 c8;
+static const char *filename;
/* Preload font into memory */
static uint8_t mem[MEM_TOTAL] = {
@@ -39,12 +40,14 @@ static uint8_t mem[MEM_TOTAL] = {
};
void
-emuinit(struct u8view prog)
+emuinit(struct u8view prog, const char *fn)
{
struct timespec tp;
+ filename = fn;
+
if (prog.len > MEM_FREE) {
- diex("%s: binary of size %.1f KiB exceeds %d B maximum", "TODO",
+ diex("%s: binary of size %.1f KiB exceeds %d B maximum", filename,
(double)prog.len / 1024, MEM_FREE);
}
@@ -75,7 +78,7 @@ opexec(uint16_t op)
break;
case 0x00EE:
if (c8.SP == 0)
- diex("%s: stack pointer underflow", "TODO");
+ diex("%s: stack pointer underflow", filename);
c8.PC = c8.callstack[--c8.SP];
break;
default:
@@ -90,7 +93,7 @@ opexec(uint16_t op)
case 0x2:
if (c8.SP == lengthof(c8.callstack))
- diex("%s: stack pointer overflow", "TODO");
+ diex("%s: stack pointer overflow", filename);
c8.callstack[c8.SP++] = c8.PC;
c8.PC = (op & 0xFFF) - 2;
break;
@@ -311,5 +314,5 @@ opexec(uint16_t op)
void
badins(uint16_t op)
{
- diex("%s: invalid opcode: %04X", "TODO", op);
+ diex("%s: invalid opcode: %04X", filename, op);
}
diff --git a/src/ahoy/emulator.h b/src/ahoy/emulator.h
index a9c4398..24aa8ce 100644
--- a/src/ahoy/emulator.h
+++ b/src/ahoy/emulator.h
@@ -24,7 +24,7 @@ struct chip8 {
uint64_t screen[32];
};
-void emuinit(struct u8view);
+void emuinit(struct u8view, const char *);
void emutick(void);
extern struct chip8 c8;
diff --git a/src/ahoy/main.c b/src/ahoy/main.c
index b7f0639..e52e6bd 100644
--- a/src/ahoy/main.c
+++ b/src/ahoy/main.c
@@ -106,7 +106,7 @@ run(int fd, const char *fn)
free(buf);
wininit();
- emuinit(u8strtou8(sb));
+ emuinit(u8strtou8(sb), fn);
while (gs != GUI_STOP) {
double dt;