code wiki / _hdl_build / nx_pcb_render_gate.nx
nx_pcb_render_gate.nx source
↩ module page · 81 lines · 5321 B
1// nx_pcb_render_gate.nx -- GATE for the mechanistically-ACCURATE PCB visual. Routes a real net on the shared router,
2// renders it at TRUE scale (pitch=10 mil, trace=6 mil, scale=4 px/mil), and PROVES the drawing is dimensionally exact:
3// T1 DIMENSIONAL -- a vertical scan through the trace shows EXACTLY trace_width*scale = 24 copper pixels (a 6-mil
4// trace is exactly 6 mil wide on screen). The visual is a scale twin, not a cartoon. (the liar-kill)
5// T2 NO-FABRICATE -- an empty board renders ZERO copper (the render never invents copper that wasn't routed).
6// T3 DETERMINISM -- routing+rendering twice yields byte-identical images (#26 never-brick: reproducible).
7// T4 REFLECTS-ROUTE- the routed board has copper>0 driven by the ACTUAL route.
8// Writes knowledge/nx_pcb_render.ppm to eyeball. GREEN iff T1-T4. Sovereign integer raster. expect_exit: 0 license_tier: ORIGINAL
9import "nx_pcb_render.nx"
10import "nx_pcb_autoroute.nx"
11import "nx_png_write.nx"
12import "nx_syscalls.nx"
13
14func w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
15func wn(v: i64) -> i64 { var m: i64=v; if m<0{w("-" as *u8);m=0-m} let t:*u8=sys_mmap(24); 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} var i:i64=0; let o:*u8=sys_mmap(24); while i<k{o[i]=t[k-1-i];i=i+1} sys_write(1,o,k); return 0 }
16func fill(a: *i64, n: i64, v: i64) -> i64 { var i: i64=0; while i<n { a[i]=v; i=i+1 } return 0 }
17
18func main() -> i64 {
19 w("=== nx_pcb_render_gate: mechanistically-ACCURATE PCB visual (true-scale, deterministic, sovereign) ===\n" as *u8)
20 var pass: i64 = 0; var total: i64 = 0
21 let W: i64 = 4; let H: i64 = 4
22 let pitch: i64 = 40; let tw: i64 = 24 // 10 mil pitch, 6 mil trace, 4 px/mil
23 let IMGW: i64 = W*pitch; let IMGH: i64 = H*pitch
24 let nb: i64 = IMGW*IMGH*3
25 let img: *u8 = sys_mmap(nb)
26 let img2: *u8 = sys_mmap(nb)
27
28 let nh: i64 = H*(W-1); let nv: i64 = (H-1)*W
29 let ax: *i64=sys_mmap(8*4) as *i64; let ay: *i64=sys_mmap(8*4) as *i64
30 let bx: *i64=sys_mmap(8*4) as *i64; let by: *i64=sys_mmap(8*4) as *i64
31 let cap_h: *i64=sys_mmap(8*64) as *i64; let cap_v: *i64=sys_mmap(8*64) as *i64
32 let block: *i64=sys_mmap(8*64) as *i64; let usedby: *i64=sys_mmap(8*64) as *i64
33 let vis: *i64=sys_mmap(8*64) as *i64; let came: *i64=sys_mmap(8*64) as *i64
34 let q: *i64=sys_mmap(8*64) as *i64; let pathbuf: *i64=sys_mmap(8*64) as *i64
35 let sh: *i64=sys_mmap(8*2) as *i64; let ok: *i64=sys_mmap(8*2) as *i64
36
37 // route a real horizontal net (0,1)->(3,1) on the shared router, render it
38 ax[0]=0; ay[0]=1; bx[0]=3; by[0]=1
39 fill(cap_h, nh, 8); fill(cap_v, nv, 8)
40 pa_route_board(1, ax, ay, bx, by, W, H, cap_h, cap_v, block, usedby, vis, came, q, pathbuf, 1, sh, ok)
41 pr_render_board(img, IMGW, IMGH, usedby, W, H, pitch, tw)
42
43 // T1 dimensional: vertical scan at x=80 (mid trace) must be EXACTLY tw copper px
44 var colc: i64 = 0
45 var y: i64 = 0
46 while y < IMGH { if pr_is_copper(img, IMGW, 80, y) == 1 { colc = colc + 1 } y = y + 1 }
47 total=total+1; if colc == tw { pass=pass+1; w(" [PASS] " as *u8) } else { w(" [FAIL] " as *u8) }
48 w("T1 dimensional: trace cross-section = " as *u8); wn(colc); w(" px (== 6 mil * 4 px/mil = 24; exact scale)\n" as *u8)
49
50 // T4 reflects-route: copper > 0
51 let cop: i64 = pr_count_copper(img, IMGW, IMGH)
52 total=total+1; if cop > 0 { pass=pass+1; w(" [PASS] " as *u8) } else { w(" [FAIL] " as *u8) }
53 w("T4 reflects-route: copper pixels = " as *u8); wn(cop); w(" (the ACTUAL routed trace)\n" as *u8)
54
55 // T2 no-fabricate: empty board -> 0 copper
56 var i: i64 = 0
57 while i < W*H { usedby[i] = 0 - 1; i = i + 1 }
58 pr_render_board(img2, IMGW, IMGH, usedby, W, H, pitch, tw)
59 let cop0: i64 = pr_count_copper(img2, IMGW, IMGH)
60 total=total+1; if cop0 == 0 { pass=pass+1; w(" [PASS] " as *u8) } else { w(" [FAIL] " as *u8) }
61 w("T2 no-fabricate: empty board copper = " as *u8); wn(cop0); w(" (render invents nothing)\n" as *u8)
62
63 // T3 determinism: re-route + re-render -> byte-identical
64 ax[0]=0; ay[0]=1; bx[0]=3; by[0]=1
65 fill(cap_h, nh, 8); fill(cap_v, nv, 8)
66 pa_route_board(1, ax, ay, bx, by, W, H, cap_h, cap_v, block, usedby, vis, came, q, pathbuf, 1, sh, ok)
67 pr_render_board(img2, IMGW, IMGH, usedby, W, H, pitch, tw)
68 var diff: i64 = 0
69 var k: i64 = 0
70 while k < nb { if (img[k] as i64) != (img2[k] as i64) { diff = 1; k = nb } else { k = k + 1 } }
71 total=total+1; if diff == 0 { pass=pass+1; w(" [PASS] " as *u8) } else { w(" [FAIL] " as *u8) }
72 w("T3 determinism: re-render byte-identical diff=" as *u8); wn(diff); w("\n" as *u8)
73
74 pr_write_ppm("knowledge/nx_pcb_render.ppm" as *u8, img, IMGW, IMGH)
75 nx_png_write_rgb("knowledge/nx_pcb_render.png" as *u8, img, IMGW, IMGH)
76 w(" wrote knowledge/nx_pcb_render.png + .ppm (" as *u8); wn(IMGW); w("x" as *u8); wn(IMGH); w(" real-scale board, SOVEREIGN png no python)\n" as *u8)
77
78 w("\n=== nx_pcb_render_gate " as *u8); wn(pass); w("/" as *u8); wn(total)
79 if pass == total { w(" GREEN (true-scale PCB visual: dimensionally exact, no-fabrication, deterministic; the accurate engineering visual)\n" as *u8); sys_exit(0); return 0 }
80 w(" RED\n" as *u8); sys_exit(1); return 1
81}