aboutsummaryrefslogtreecommitdiff
path: root/Driver.icl
diff options
context:
space:
mode:
Diffstat (limited to 'Driver.icl')
-rw-r--r--Driver.icl25
1 files changed, 25 insertions, 0 deletions
diff --git a/Driver.icl b/Driver.icl
new file mode 100644
index 0000000..633d248
--- /dev/null
+++ b/Driver.icl
@@ -0,0 +1,25 @@
+implementation module ABC.Driver
+
+import StdEnv
+
+import ABC.Machine
+
+boot :: ([Instruction], [Desc]) -> State
+boot (prog,descs)
+ = { astack = as_init
+ , bstack = bs_init
+ , cstack = cs_init
+ , graphstore = gs_init
+ , descstore = ds_init descs
+ , pc = pc_init
+ , program = ps_init prog
+ , io = io_init
+ }
+
+fetch_cycle :: State -> State
+fetch_cycle st=:{pc,program}
+| pc_end pc = st
+| otherwise = fetch_cycle (currinstr {st & pc=pc`})
+where
+ pc` = pc_next pc
+ currinstr = ps_get pc program