code wiki / _hdl_build / _bitreader_authored.nx

_bitreader_authored.nx source

↩ module page · 23 lines · 846 B

1// AUTHORED BY THE NISHI BUILDER (nx_module_author bit-reader template) -- LSB-first bit I/O, bits-up 2import "nx_syscalls.nx" 3func br_bits(buf: *u8, len: i64, cursor: *i64, n: i64) -> i64 { 4 var val: i64 = 0; var got: i64 = 0 5 while got < n { 6 let bytepos: i64 = cursor[0] >> 3 7 if bytepos >= len { return 0 - 1 } 8 let bit: i64 = ((buf[bytepos] as i64) >> (cursor[0] & 7)) & 1 9 val = val | (bit << got) 10 cursor[0] = cursor[0] + 1; got = got + 1 11 } 12 return val 13} 14func main() -> i64 { 15 let buf: *u8 = sys_mmap(8); buf[0] = 0xB4 as u8 16 let cur: *i64 = sys_mmap(8) as *i64; cur[0] = 0 17 let a: i64 = br_bits(buf, 1, cur, 3) 18 let b: i64 = br_bits(buf, 1, cur, 3) 19 let c: i64 = br_bits(buf, 1, cur, 2) 20 if a == 4 { if b == 6 { if c == 2 { sys_exit(0) } } } 21 sys_exit(1) 22 return 1 23}