import "io" manifest { iv_none = 0, iv_memory = 1, iv_pagefault = 2, iv_unimpop = 3, iv_halt = 4, iv_divzero = 5, iv_unwrop = 6, iv_timer = 7, iv_privop = 8, iv_keybd = 9, iv_badcall = 10, iv_pagepriv = 11, iv_debug = 12, iv_intrfault = 13 } let ivec = table 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 let set_handler(int, fn) be if int >= 0 /\ int <= 13 then ivec ! int := fn let int_enable() be assembly { LOAD R1, [<ivec>] SETSR R1, $INTVEC LOAD R1, 0 SETFL R1, $IP } let int_disable() be assembly { LOAD R1, 1 SETFL R1, $IP } let set_timer(t) be assembly { LOAD R1, [<t>] SETSR R1, $TIMER } let timhandler() be { outch('*'); set_timer(100000); ireturn } let idle() be assembly { pause } repeat let start() be { set_handler(iv_timer, timhandler); int_enable(); set_timer(100000); idle() }