From 1b5bd4323c9cda73b8f99b616db8914a0f2015d1 Mon Sep 17 00:00:00 2001 From: "Jakob L. Kreuze" Date: Wed, 25 Dec 2019 17:03:17 -0500 Subject: Implement RET and CALL instructions. --- asm.myr | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/asm.myr b/asm.myr index dcacbda..800a6ef 100644 --- a/asm.myr +++ b/asm.myr @@ -55,11 +55,22 @@ const emitinstr = {p match upcase(p[0]) | "CLS": b = `std.Some([0x00, 0xe0]) + | "RET": + b = `std.Some([0x00, 0xee]) | "SYS": if p.len < 2 -> `std.Err("SYS missing subroutine address") ;; match parsehex(p[1]) + | `std.Some(n): b = `std.Some([0x00 | (n & 0x0f00), (n & 0xff)]) + | `std.None: b = `std.Some([0x20, 0x00]) + mark = `std.Some(strdup(p[1])) + ;; + | "CALL": + if p.len < 2 + -> `std.Err("CALL missing subroutine address") + ;; + match parsehex(p[1]) | `std.Some(n): b = `std.Some([0x20 | (n & 0x0f00), (n & 0xff)]) | `std.None: b = `std.Some([0x20, 0x00]) mark = `std.Some(strdup(p[1])) -- cgit v1.3