you could use these opcodes:
0C6A: 0@ = create_custom_thread_at_label @new_thread_label // instead of "0AB1: call_scm_func"
0C6C: set_thread 0@ local_var 0 = 1@ // 1@ is passed to the new thread (it becomes 0@ variable there)
0A93: end_custom_thread // instead of "0AB2: ret"
So instead of calling a function, you'd create a separate thread at a label. This thread will not block the main code (even when it's using "wait"), so you'll be able to create multiple threads, running at the same time
use timer variables
32@ or 33@