summaryrefslogtreecommitdiff
path: root/main.myr
diff options
context:
space:
mode:
Diffstat (limited to 'main.myr')
-rw-r--r--main.myr47
1 files changed, 41 insertions, 6 deletions
diff --git a/main.myr b/main.myr
index b51de02..68aef16 100644
--- a/main.myr
+++ b/main.myr
@@ -54,16 +54,51 @@ const main = {
var mem : uint8[memsz]
var reg : uint8[regsz]
var stk : uint16[stksz]
- var I : uint16
- var pc : uint16
- var sp : uint16
- var delay : uint8
- var sound : uint8
+ var pc : uint16 = 0x200
+ var sp : uint16 = 0
+ var I : uint16 = 0
+ var delay : uint8 = 0
+ var sound : uint8 = 0
clrscr(&gfx, scrsz)
-
loadprg(&mem, "/home/jakob/Airplane.ch8")
+ var opcode, arg
+
+ while true
+ opcode = mem[pc]
+ arg = mem[pc + 1]
+ match (opcode & 0xf0) >> 4
+ | 0x0:
+ // CLS
+ if (opcode & 0x0f) == 0 && (arg & 0x0f) == 0
+ clrscr(&gfx, scrsz)
+ // RET
+ elif (opcode & 0x0f) == 0
+ if sp == 0
+ std.die("stack underflow")
+ ;;
+ pc = stk[sp]
+ sp--
+ // SYS
+ else
+ std.die("RCA 1802 SYS unimplemted\n")
+ ;;
+ // JP
+ | 0x1:
+ pc = ((opcode & 0x0f) << 8) | arg
+ // CALL
+ | 0x2:
+ sp++
+ if sp > stksz
+ std.die("stack overflow")
+ ;;
+ stk[sp] = pc
+ pc = ((opcode & 0x0f) << 8) | arg
+ | _ : std.die("unimplemented opcode\n")
+ ;;
+ ;;
+
sdl.update(tex, (gfx[:] : void#), 64)
sdl.copy(r, tex)
sdl.present(r)