code wiki / _hdl_build / nx_meshview_vm_probe.nx

nx_meshview_vm_probe.nx source

↩ module page · 38 lines · 2435 B

1// nx_meshview_vm_probe.nx -- BOUNDED diagnosis: parse /tmp/mv.wasm and run ONLY mv_render(0) once in the 2// sovereign wasm VM, printing progress markers around each stage. Isolates whether the 24-min-silent 3// nx_meshview_wasm_gate wedge is in (a) wasm parse, (b) the FIRST tiny render (2 tris @64x64), or (c) only 4// the heavy sphere/torus tests (= gate slow, not broken). Run under `timeout`. license_tier: ORIGINAL 5import "nx_syscalls.nx" 6import "nx_wasm_vm.nx" 7const K_MAGIC_131072: i64 = 131072 8const K_MAGIC_2080: i64 = 2080 9 10func hw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 11func pn(v: i64) -> i64 { let t: *u8=sys_mmap(24); var m: i64=v; if m<0{sys_write(1,"-" as *u8,1);m=0-m} var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} let b: *u8=sys_mmap(24); var j: i64=0; while j<k{b[j]=t[k-1-j];j=j+1} sys_write(1,b,k); return 0 } 12 13func main() -> i64 { 14 hw("probe: reading /tmp/mv.wasm\n" as *u8) 15 let box: *i64 = sys_mmap(16) as *i64 16 let wasm: *u8 = sys_read_file("/tmp/mv.wasm" as *u8, box) 17 if (wasm as i64) == 0 { hw("probe FAIL: no /tmp/mv.wasm\n" as *u8); sys_exit(2); return 2 } 18 hw("probe: bytes=" as *u8); pn(box[0]); hw("\n" as *u8) 19 let mod: *WasmMod = wm_new(wasm, box[0]) 20 hw("probe: parsing\n" as *u8) 21 if wm_parse(mod) != 0 { hw("probe FAIL: parse\n" as *u8); sys_exit(3); return 3 } 22 hw("probe: parsed funcs=" as *u8); pn(mod.n_funcs); hw(" exports=" as *u8); pn(mod.n_exports); hw("\n" as *u8) 23 mod.mem = sys_mmap(K_MAGIC_131072) as *u8 24 hw("probe: running mv_render(0) -- 2 tris @64x64\n" as *u8) 25 let t0: i64 = sys_now_ms() 26 let drawn: i64 = wm_run(mod, "mv_render" as *u8, 0, 0, 0, 0, 0, 1) 27 let t1: i64 = sys_now_ms() 28 hw("probe: mv_render returned drawn=" as *u8); pn(drawn); hw(" ms=" as *u8); pn(t1-t0); hw("\n" as *u8) 29 let fbp: *i64 = (mod.mem as i64) as *i64 30 hw("probe: center px=" as *u8); pn(fbp[K_MAGIC_2080]); hw("\n" as *u8) 31 hw("probe: running mv_render_cube(35) -- 12 tris lit\n" as *u8) 32 let t2: i64 = sys_now_ms() 33 let cd: i64 = wm_run(mod, "mv_render_cube" as *u8, 35, 0, 0, 0, 0, 1) 34 let t3: i64 = sys_now_ms() 35 hw("probe: cube drawn=" as *u8); pn(cd); hw(" ms=" as *u8); pn(t3-t2); hw("\n" as *u8) 36 hw("probe DONE (first two renders fine -> gate wedge is in a LATER heavy test OR gate-only code)\n" as *u8) 37 sys_exit(0); return 0 38}