code wiki / (root) / nx_rc_probe.nx

nx_rc_probe.nx source

↩ module page · 145 lines · 5914 B

1// nx_render_core wat-clean + correctness probe. Each check is a SMALL exported function (avoids the 2// backend's large-function local-count limit). Imports the HAL-free core only; static buffers; no syscalls. 3import "nx_render_core.nx" 4const K_MAGIC_1024: i64 = 1024 5const K_MAGIC_16384: i64 = 16384 6const K_MAGIC_1152: i64 = 1152 7const K_MAGIC_1280: i64 = 1280 8const K_MAGIC_1408: i64 = 1408 9const K_MAGIC_1536: i64 = 1536 10const K_MAGIC_1664: i64 = 1664 11const K_MAGIC_1792: i64 = 1792 12const K_MAGIC_1824: i64 = 1824 13const K_MAGIC_1856: i64 = 1856 14const K_MAGIC_13418: i64 = 13418 15const K_MAGIC_9402: i64 = 9402 16const K_MAGIC_2048: i64 = 2048 17const K_MAGIC_4096: i64 = 4096 18const K_MAGIC_6144: i64 = 6144 19const K_MAGIC_4294967295: i64 = 4294967295 20const K_MAGIC_8192: i64 = 8192 21const K_MAGIC_11585: i64 = 11585 22const K_MAGIC_11400: i64 = 11400 23const K_MAGIC_11700: i64 = 11700 24const K_MAGIC_10000: i64 = 10000 25const K_MAGIC_40000: i64 = 40000 26const K_MAGIC_1200: i64 = 1200 27const K_MAGIC_1376: i64 = 1376 28const K_MAGIC_70000: i64 = 70000 29const K_MAGIC_16777216: i64 = 16777216 30const K_MAGIC_65536: i64 = 65536 31const K_MAGIC_72000: i64 = 72000 32func gi_chk_identity() -> i64 { 33 let m: *i64 = (K_MAGIC_1024 as i64) as *i64 34 rc_identity_4x4(m) 35 if m[0] == K_MAGIC_16384 { if m[5] == K_MAGIC_16384 { if m[10] == K_MAGIC_16384 { if m[15] == K_MAGIC_16384 { if m[1] == 0 { return 1 } } } } } 36 return 0 37} 38func gi_chk_translation() -> i64 { 39 let m: *i64 = (K_MAGIC_1152 as i64) as *i64 40 rc_translation_4x4(100, 200, 300, m) 41 if m[3] == 100 { if m[7] == 200 { if m[11] == 300 { if m[0] == K_MAGIC_16384 { return 1 } } } } 42 return 0 43} 44func gi_chk_mul() -> i64 { 45 let a: *i64 = (K_MAGIC_1280 as i64) as *i64 46 let b: *i64 = (K_MAGIC_1408 as i64) as *i64 47 let c: *i64 = (K_MAGIC_1536 as i64) as *i64 48 rc_identity_4x4(a) 49 rc_translation_4x4(100, 200, 300, b) 50 rc_mat4_mul(a, b, c) 51 if c[3] == 100 { if c[11] == 300 { if c[0] == K_MAGIC_16384 { return 1 } } } 52 return 0 53} 54func gi_chk_vec4() -> i64 { 55 let m: *i64 = (K_MAGIC_1664 as i64) as *i64 56 let vi: *i64 = (K_MAGIC_1792 as i64) as *i64 57 let vo: *i64 = (K_MAGIC_1824 as i64) as *i64 58 rc_identity_4x4(m) 59 vi[0] = 5 * K_MAGIC_16384 60 vi[1] = 6 * K_MAGIC_16384 61 vi[2] = 7 * K_MAGIC_16384 62 vi[3] = K_MAGIC_16384 63 rc_mat4_vec4(m, vi, vo) 64 if vo[0] == 5 * K_MAGIC_16384 { if vo[1] == 6 * K_MAGIC_16384 { if vo[3] == K_MAGIC_16384 { return 1 } } } 65 return 0 66} 67func gi_chk_perspective() -> i64 { 68 let m: *i64 = (K_MAGIC_1856 as i64) as *i64 69 rc_perspective_cs(K_MAGIC_13418, K_MAGIC_9402, K_MAGIC_16384, K_MAGIC_16384, 1000 * K_MAGIC_16384, m) 70 if m[14] == 0 - K_MAGIC_16384 { if m[5] > 0 { if m[0] > 0 { return 1 } } } 71 return 0 72} 73func gi_chk_raster() -> i64 { 74 let fb: *i64 = (K_MAGIC_2048 as i64) as *i64 75 let zb: *i64 = (K_MAGIC_4096 as i64) as *i64 76 let tri: *i64 = (K_MAGIC_6144 as i64) as *i64 77 rc_clear(fb, 8, 8, 0) 78 rc_zclear(zb, 8, 8) 79 tri[0] = 1 80 tri[1] = 1 81 tri[2] = 1000 82 tri[3] = K_MAGIC_4294967295 83 tri[4] = 6 84 tri[5] = 1 85 tri[6] = 1000 86 tri[7] = K_MAGIC_4294967295 87 tri[8] = 3 88 tri[9] = 6 89 tri[10] = 1000 90 tri[11] = K_MAGIC_4294967295 91 rc_triangle(fb, zb, 8, 8, tri) 92 var col: i64 = 0 93 var i: i64 = 0 94 while i < 64 { if fb[i] != 0 { col = col + 1 } i = i + 1 } 95 return col 96} 97func gi_chk_trig() -> i64 { 98 if rc_sin_q14(0) != 0 { return 0 } 99 if rc_sin_q14(30) != K_MAGIC_8192 { return 0 } // Bhaskara exact at 30 100 if rc_sin_q14(90) != K_MAGIC_16384 { return 0 } // exact at 90 101 if rc_cos_q14(0) != K_MAGIC_16384 { return 0 } 102 if rc_cos_q14(90) != 0 { return 0 } 103 if rc_sin_q14(270) != 0 - K_MAGIC_16384 { return 0 } // range reduction + sign 104 let s45: i64 = rc_sin_q14(405) // 405 mod 360 = 45 ; true ~K_MAGIC_11585 105 if s45 < K_MAGIC_11400 { return 0 } 106 if s45 > K_MAGIC_11700 { return 0 } 107 return 1 108} 109// ENGINE test: render a GENERIC data-driven scene (3 distinct-colour box entities) via rc_draw_scene -- 110// proves the core is a reusable engine (entity table in, image out), not a hardcoded game. 111func gi_scene_test() -> i64 { 112 let fb: *i64 = (K_MAGIC_10000 as i64) as *i64 113 let zb: *i64 = (K_MAGIC_40000 as i64) as *i64 114 rc_clear(fb, 64, 48, 0) 115 rc_zclear(zb, 64, 48) 116 let T: *i64 = (K_MAGIC_1024 as i64) as *i64 117 rc_translation_4x4(0, 0, 0 - 7 * K_MAGIC_16384, T) 118 let P: *i64 = (K_MAGIC_1200 as i64) as *i64 119 rc_perspective_cs(K_MAGIC_13418, K_MAGIC_9402, K_MAGIC_16384, K_MAGIC_16384, 1000 * K_MAGIC_16384, P) 120 let mvp: *i64 = (K_MAGIC_1376 as i64) as *i64 121 rc_mat4_mul(P, T, mvp) 122 let ent: *i64 = (K_MAGIC_70000 as i64) as *i64 123 ent[0] = 0 - 4; ent[1] = 0 - 1; ent[2] = 0; ent[3] = 2; ent[4] = 2; ent[5] = 2; ent[6] = 255 + 255 * K_MAGIC_16777216 // red 124 ent[7] = 0; ent[8] = 0 - 1; ent[9] = 0; ent[10] = 2; ent[11] = 2; ent[12] = 2; ent[13] = 255 * 256 + 255 * K_MAGIC_16777216 // green 125 ent[14] = 4; ent[15] = 0 - 1; ent[16] = 0; ent[17] = 2; ent[18] = 2; ent[19] = 2; ent[20] = 255 * K_MAGIC_65536 + 255 * K_MAGIC_16777216 // blue 126 let scr: *i64 = (K_MAGIC_72000 as i64) as *i64 127 rc_draw_scene(fb, zb, 64, 48, mvp, ent, 3, 32, 24, scr) 128 var nb: i64 = 0 129 var i: i64 = 0 130 while i < 64 * 48 { if fb[i] != 0 { nb = nb + 1 } i = i + 1 } 131 return nb 132} 133func gi_scene_colors() -> i64 { 134 let fb: *i64 = (K_MAGIC_10000 as i64) as *i64 135 let red: i64 = 255 + 255 * K_MAGIC_16777216 136 let grn: i64 = 255 * 256 + 255 * K_MAGIC_16777216 137 let blu: i64 = 255 * K_MAGIC_65536 + 255 * K_MAGIC_16777216 138 var hr: i64 = 0 139 var hg: i64 = 0 140 var hb: i64 = 0 141 var i: i64 = 0 142 while i < 64 * 48 { let c: i64 = fb[i]; if c == red { hr = 1 } if c == grn { hg = 1 } if c == blu { hb = 1 } i = i + 1 } 143 return hr + hg + hb 144} 145func main() -> i64 { return 0 }