Initial commit: retroDE_ps2 — first-of-its-kind PS2 GS FPGA core (DE25-Nano / Agilex 5)
RTL (GS rasterizer, EE core stub, platform bridge, LPDDR4B path), sim regression (272 TBs), docs, and tooling. Copyrighted PS2 content (BIOS, game code, GS dumps, and all dump-derived textures/traces) is excluded via .gitignore and stays local. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
#!/bin/sh
|
||||
# retroDE_ps2 — Ch339 host-encoder gate. Compiles ps2_feeder and proves its staging output is
|
||||
# BYTE-EQUIVALENT to the golden bake.py fixtures for every representative Ch333-338 scene, then
|
||||
# checks that malformed / oversized / out-of-range commands are rejected cleanly. No board needed.
|
||||
set -u
|
||||
HERE="$(cd "$(dirname "$0")" && pwd)"
|
||||
REPO="$(cd "$HERE/.." && pwd)"
|
||||
MEM="$REPO/sim/data/top_psmct32_raster_demo"
|
||||
BIN="$(mktemp -d)/ps2_feeder"
|
||||
fail=0
|
||||
|
||||
echo "== compile =="
|
||||
gcc -O2 -Wall -Werror -o "$BIN" "$HERE/ps2_feeder.c" || { echo "COMPILE FAILED"; exit 1; }
|
||||
|
||||
echo "== regenerate goldens =="
|
||||
python3 "$MEM/bake.py" >/dev/null 2>&1 || { echo "bake.py failed"; exit 1; }
|
||||
|
||||
echo "== byte-equivalence vs golden .mem =="
|
||||
check() { # $1 scene $2 golden.mem
|
||||
"$BIN" --dump "$1" > /tmp/_dump.txt 2>/tmp/_err.txt
|
||||
tail -n +3 "$MEM/$2" > /tmp/_gold.txt
|
||||
if diff /tmp/_dump.txt /tmp/_gold.txt >/dev/null 2>&1; then
|
||||
echo " MATCH $1 == $2"
|
||||
else
|
||||
echo " MISMATCH $1 != $2"; fail=1
|
||||
fi
|
||||
}
|
||||
check color-tri feeder_color_tri.mem
|
||||
check native-rect feeder_native_rect.mem
|
||||
check gouraud-tri feeder_gouraud_tri.mem
|
||||
check accum feeder_accum.mem
|
||||
check retrigger-a feeder_scene_a.mem
|
||||
check retrigger-b feeder_scene_b.mem
|
||||
check zpersist-near feeder_zpersist_near_first.mem
|
||||
check zpersist-far feeder_zpersist_far_first.mem
|
||||
check zpersist-grad feeder_zpersist_grad.mem
|
||||
check sprite feeder_sprite.mem # Ch345a — runtime textured-alpha SPRITE staging
|
||||
|
||||
echo "== rejection of bad input (each must exit non-zero) =="
|
||||
reject() { # $1 label ; rest = file contents on stdin
|
||||
cat > /tmp/_sc.txt
|
||||
if "$BIN" --dry-run -f /tmp/_sc.txt >/dev/null 2>&1; then echo " NOT-REJECTED $1"; fail=1; else echo " rejected $1"; fi
|
||||
}
|
||||
yes 'tritile 0 0x5000 255 0 0' | head -28 | reject "oversized (28 tris)"
|
||||
printf 'tri 1 2 3\n' | reject "malformed tri"
|
||||
printf 'tritile 99 0x5000 255 0 0\n' | reject "tile out of range"
|
||||
printf 'bogus 1 2 3\n' | reject "unknown op"
|
||||
|
||||
echo "RESULT: $([ $fail -eq 0 ] && echo PASS || echo FAIL)"
|
||||
exit $fail
|
||||
Reference in New Issue
Block a user