code wiki / _hdl_build / nx_wasm_breeders_gate.nx
nx_wasm_breeders_gate.nx source
↩ module page · 149 lines · 6289 B
1// nx_wasm_breeders_gate.nx -- verifies the SOVEREIGN breeders build NATIVELY. There is no browser here,
2// so rendering the identical base-relative code to a PNG IS the proof the wasm logic + raster are right
3// (the established "verify wasm by native PNG" loop). Same code, base = mmap instead of 0.
4// license_tier: ORIGINAL expect_exit: 0
5import "nx_wasm_breeders.nx"
6import "nx_png_write.nx"
7
8func vw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
9func vn(v: i64) -> i64 {
10 let t: *u8 = sys_mmap(32) as *u8
11 var m: i64 = v; var w: i64 = 0
12 if m<0 { t[w]=45 as u8; w=w+1; m=0-m }
13 if m==0 { t[w]=48 as u8; sys_write(1,t,w+1); return 0 }
14 let d: *u8 = sys_mmap(32) as *u8
15 var k: i64=0
16 while m>0 { d[k]=(48+(m%10)) as u8; m=m/10; k=k+1 }
17 var j: i64=0
18 while j<k { t[w]=d[k-1-j]; w=w+1; j=j+1 }
19 sys_write(1,t,w); return 0
20}
21func emit(base: i64, path: *u8) -> i64 {
22 let rgbbuf: *u8 = sys_mmap(W*H*3) as *u8
23 let f: *i64 = fb(base)
24 var p: i64 = 0
25 while p < W*H {
26 let v: i64 = f[p]
27 rgbbuf[p*3] = (v & 255) as u8
28 rgbbuf[p*3+1] = ((v >> 8) & 255) as u8
29 rgbbuf[p*3+2] = ((v >> 16) & 255) as u8
30 p = p + 1
31 }
32 return nx_png_write_rgb(path, rgbbuf, W, H)
33}
34func main() -> i64 {
35 let base: i64 = sys_mmap(WORDS*8) as i64
36 var pass: i64 = 0
37 let total: i64 = 7
38 vw("=== nx_wasm_breeders native verify (base-relative; the SAME code runs in wasm) ===\n" as *u8)
39
40 init_impl(base, 20260727)
41 // T1 the world generated with a sane tile mix (not the 64%-water class of failure)
42 var wcount: i64 = 0
43 var tcount: i64 = 0
44 var gcount: i64 = 0
45 var ty: i64 = 0
46 while ty < MH { var tx: i64 = 0
47 while tx < MW { let t: i64 = tile(base,tx,ty)
48 if t==T_WATER {wcount=wcount+1} if t==T_TREE {tcount=tcount+1} if t==T_GRASS {gcount=gcount+1}
49 tx=tx+1 }
50 ty=ty+1 }
51 let tot: i64 = MW*MH
52 vw("T1 tiles grass=" as *u8); vn(gcount*1000/tot); vw(" tree=" as *u8); vn(tcount*1000/tot)
53 vw(" water=" as *u8); vn(wcount*1000/tot); vw(" permil\n" as *u8)
54 if gcount*1000/tot > 200 { if tcount > 0 { if wcount*1000/tot < 500 { pass=pass+1 } } }
55
56 // T2 render a real frame and prove it is non-empty and varied
57 render_impl(base)
58 let f: *i64 = fb(base)
59 var distinct: i64 = 0
60 var seen: *i64 = sys_mmap(4096*8) as *i64
61 var q: i64 = 0
62 while q < 4096 { seen[q]=0; q=q+1 }
63 var p2: i64 = 0
64 while p2 < W*H {
65 let k: i64 = ((f[p2] & 255)/16)*256 + (((f[p2]>>8)&255)/16)*16 + ((f[p2]>>16)&255)/16
66 if seen[k%4096]==0 { seen[k%4096]=1; distinct=distinct+1 }
67 p2 = p2 + 1
68 }
69 vw("T2 frame distinct colours=" as *u8); vn(distinct); vw("\n" as *u8)
70 if distinct > 40 { pass = pass + 1 }
71 emit(base, "knowledge/nx_wasm_breeders_start.png" as *u8)
72
73 // T3 movement actually moves and walls actually block
74 let s: *i64 = st(base)
75 let x0: i64 = s[S_PX]
76 var m: i64 = 0
77 while m < 12 { tick_impl(base, 3); m = m + 1 }
78 vw("T3 moved dx=" as *u8); vn(s[S_PX]-x0); vw("\n" as *u8)
79 if s[S_PX] != x0 { pass = pass + 1 }
80
81 // T4 MENDEL: two heterozygous founders -> 1:2:1 on the coat locus, MEASURED
82 let ga: i64 = founder_g(11)
83 let gb: i64 = founder_g(29)
84 var c0: i64 = 0
85 var c1: i64 = 0
86 var c2: i64 = 0
87 var n: i64 = 0
88 while n < 1200 {
89 let kid: i64 = gcross(base, ga, gb)
90 let ph: i64 = phen(kid, G_COAT)
91 if ph==0 {c0=c0+1} if ph==1 {c1=c1+1} if ph==2 {c2=c2+1}
92 n = n + 1
93 }
94 vw("T4 coat white/rose/crimson = " as *u8); vn(c0*1000/1200); vw("/" as *u8); vn(c1*1000/1200)
95 vw("/" as *u8); vn(c2*1000/1200); vw(" permil (textbook 250/500/250)\n" as *u8)
96 var d1: i64 = c1*1000/1200 - 500
97 if d1 < 0 { d1 = 0 - d1 }
98 if d1 <= 70 { if c0 > 0 { if c2 > 0 { pass = pass + 1 } } }
99
100 // T5 walk a few steps then render a second frame -- proves animation/camera actually change pixels
101 var ck1: i64 = 0
102 var z: i64 = 0
103 while z < W*H { ck1 = (ck1 ^ f[z]) * 3 % 1000000007; z = z + 40 }
104 var mv: i64 = 0
105 while mv < 20 { tick_impl(base, 1); mv = mv + 1 }
106 render_impl(base)
107 var ck2: i64 = 0
108 var z2: i64 = 0
109 while z2 < W*H { ck2 = (ck2 ^ f[z2]) * 3 % 1000000007; z2 = z2 + 40 }
110 vw("T5 frame checksum moved " as *u8); vn(ck1); vw(" -> " as *u8); vn(ck2); vw("\n" as *u8)
111 if ck1 != ck2 { pass = pass + 1 }
112 emit(base, "knowledge/nx_wasm_breeders_walk.png" as *u8)
113
114 // T6 CAUSAL INPUT (F1102 wiring): the device-agnostic layer drives the game -- D held through
115 // step_impl moves the player, release stops him; and the organ's input arena matches the lib.
116 let base2: i64 = sys_mmap(WORDS*8) as i64
117 init_impl(base2, 20260727)
118 let s6: *i64 = st(base2)
119 let x6: i64 = s6[S_PX]
120 ia_key(inp(base2), 68, 1)
121 var m6: i64 = 0
122 while m6 < 12 { step_impl(base2); m6 = m6 + 1 }
123 let moved: i64 = s6[S_PX] - x6
124 ia_key(inp(base2), 68, 0)
125 step_impl(base2)
126 let stay: i64 = s6[S_PX] - x6 - moved
127 vw("T6 D-held dx=" as *u8); vn(moved); vw(" after-release ddx=" as *u8); vn(stay)
128 vw(" ia_words=" as *u8); vn(ia_words()); vw("\n" as *u8)
129 if moved > 0 { if stay == 0 { if ia_words() == 64 { pass = pass + 1 } } }
130
131 // T7 EDGE HONESTY through the WIRED loop: E held across two steps fires interact ONCE.
132 // fresh arena so no wild is in range: the no-target branch sets msgt=90 on the edge step, and
133 // the second step only DECREMENTS it -> 89. A repeat-firing layer would re-arm it to 90.
134 let base3: i64 = sys_mmap(WORDS*8) as i64
135 init_impl(base3, 20260727)
136 let s7: *i64 = st(base3)
137 ia_key(inp(base3), 69, 1)
138 step_impl(base3)
139 step_impl(base3)
140 vw("T7 msg=" as *u8); vn(s7[S_MSG]); vw(" msgt=" as *u8); vn(s7[S_MSGT])
141 vw(" (1/89 = one no-target interact, no held-repeat)\n" as *u8)
142 if s7[S_MSG] == 1 { if s7[S_MSGT] == 89 { pass = pass + 1 } }
143
144 vw("nx_wasm_breeders_gate: " as *u8); vn(pass); vw("/" as *u8); vn(total); vw("\n" as *u8)
145 if pass == total { vw("VERDICT verdict=GREEN -- sovereign breeders verified natively; ready for the wasm chain\n" as *u8); sys_exit(0) }
146 vw("VERDICT RED\n" as *u8)
147 sys_exit(1)
148 return 0
149}