#subruledef reladdr { {addr: u32} => { reladdr = addr - $ - 2 assert(reladdr <= 0x7f) assert(reladdr >= !0x7f) reladdr`8 } } #ruledef { pass => 0x00 not => 0x01 times2 => 0x02 clrtos => 0x03 square => 0x0D sextb => 0x0E sexth => 0x0F add => 0x12 sub => 0x13 gt => 0x14 lt => 0x15 sgt => 0x16 slt => 0x17 and => 0x18 or => 0x19 xor => 0x1A shl => 0x1B asr => 0x1C mul => 0x1D addi {n: u8} => 0x22 @ n subi {n: u8} => 0x23 @ n gti {n: u8} => 0x24 @ n lti {n: u8} => 0x25 @ n andi {n: u8} => 0x28 @ n ori {n: u8} => 0x29 @ n xori {n: u8} => 0x2A @ n shli {n: u8} => 0x2B @ n asri {n: u8} => 0x2C @ n muli {n: u8} => 0x2D @ n swap => 0x30 dup => 0x34 drop => 0x38 over => 0x3C fetchdw => 0x40 fetchdb => 0x44 fetchrw => 0x48 fetchrb => 0x4C storedw => 0x50 storedb => 0x54 pstoredw => 0x58 pstoredb => 0x5C rtod => 0x60 dtor => 0x64 jump => 0x68 jumpz => 0x6C jumpnz => 0x70 call => 0x74 callz => 0x78 callnz => 0x7C ret => 0x80 retz => 0x84 retnz => 0x88 pushdb {n: u8} => 0x8C @ n pushdr {n: reladdr} => 0x8C @ n @ 0x0E pushdhu {n: u16} => 0x90 @ n pushdwu {n: u32} => 0x94 @ n pushdha {n: u16} => 0x98 @ n pushdwa {n: u32} => 0x9C @ n repeati {n: reladdr} => 0xA0 @ n db {n: u8} => n dh {n: u16} => n dd {n: u32} => n } pushdb 8 start: pushdb 0x8 pushdb fiter call pushdb start jump pushdb 0x10 next: pushdb 4 add pushdb next jump div: push0 swap rot divnx: over sub dup ltz hopzi divdn swap inc swap hopi divnx divdn: drop drop ret fib: dup retz dtor push0 pushdb 1 fiter: over add swap repeati fiter drop ret strlen: push0 swap dup fetchdb