#!/bin/sh # retroDE_ps2 — Ch336 DEFINITIVE color diagnostic. # # 14-prim >FIFO_DEPTH scene: batch0 (tiles 0-7) BLUE, batch1 (tiles 8-13) GREEN. # GREEN (0,FF,0) shares NO color channel with RED (the suspected fallback) or BLUE (batch0), # so batch 1's rendered color is unambiguous. Read the HDMI bottom rows and report: # GREEN bottom -> batch1 color tracks its staged value (the color path is fine). # RED bottom -> batch1 ignores its staged color and falls back to a constant RED. # BLUE bottom -> batch1 reuses batch0's color. # Top half should be BLUE either way. Accumulation (both halves lit) should still hold. set -u BASE="${PS2_BRIDGE_BASE:-0x40000000}" DEVMEM="${DEVMEM:-busybox devmem}" OFF_STATUS=0x0D8; OFF_LO=0x0DC; OFF_HI=0x0E4; OFF_GO=0x0E8 w() { $DEVMEM $(printf "0x%X" $(( BASE + $1 ))) w "$2" >/dev/null; } r() { $DEVMEM $(printf "0x%X" $(( BASE + $1 ))) w; } GREEN="000000000000000e 0000000000010000 0000000000000044 0000000000050000 0000000000000002 0000000088004060 0000000000000053 00000000ffff0000 0000000000000000 0000500000100010 00000000ffff0000 0000000000000030 00005000001000e0 00000000ffff0000 00000000000c0000 0000500000e00010 00000000ffff0000 0000000000000000 0000510000100110 00000000ffff0000 0000000000000030 00005100001001e0 00000000ffff0000 00000000000c0000 0000510000e00110 00000000ffff0000 0000000000000000 0000520000100210 00000000ffff0000 0000000000000030 00005200001002e0 00000000ffff0000 00000000000c0000 0000520000e00210 00000000ffff0000 0000000000000000 0000530000100310 00000000ffff0000 0000000000000030 00005300001003e0 00000000ffff0000 00000000000c0000 0000530000e00310 00000000ffff0000 0000000000000000 0000540001100010 00000000ffff0000 0000000000000030 00005400011000e0 00000000ffff0000 00000000000c0000 0000540001e00010 00000000ffff0000 0000000000000000 0000550001100110 00000000ffff0000 0000000000000030 00005500011001e0 00000000ffff0000 00000000000c0000 0000550001e00110 00000000ffff0000 0000000000000000 0000560001100210 00000000ffff0000 0000000000000030 00005600011002e0 00000000ffff0000 00000000000c0000 0000560001e00210 00000000ffff0000 0000000000000000 0000570001100310 00000000ffff0000 0000000000000030 00005700011003e0 00000000ffff0000 00000000000c0000 0000570001e00310 00000000ff00ff00 0000000000000000 0000580002100010 00000000ff00ff00 0000000000000030 00005800021000e0 00000000ff00ff00 00000000000c0000 0000580002e00010 00000000ff00ff00 0000000000000000 0000590002100110 00000000ff00ff00 0000000000000030 00005900021001e0 00000000ff00ff00 00000000000c0000 0000590002e00110 00000000ff00ff00 0000000000000000 00005a0002100210 00000000ff00ff00 0000000000000030 00005a00021002e0 00000000ff00ff00 00000000000c0000 00005a0002e00210 00000000ff00ff00 0000000000000000 00005b0002100310 00000000ff00ff00 0000000000000030 00005b00021003e0 00000000ff00ff00 00000000000c0000 00005b0002e00310 00000000ff00ff00 0000000000000000 00005c0003100010 00000000ff00ff00 0000000000000030 00005c00031000e0 00000000ff00ff00 00000000000c0000 00005c0003e00010 00000000ff00ff00 0000000000000000 00005d0003100110 00000000ff00ff00 0000000000000030 00005d00031001e0 00000000ff00ff00 00000000000c0000 00005d0003e00110" wait_ready() { i=0 while [ $i -lt 300 ]; do st=$(r $OFF_STATUS); [ $(( st & 1 )) -eq 1 ] && return 0; i=$(( i + 1 )); sleep 0.01 2>/dev/null || true; done echo " !! feeder never reported ready"; return 1 } echo "=== Ch336 DEFINITIVE: batch0 BLUE (top), batch1 GREEN (bottom) ===" wait_ready || exit 1 w $OFF_STATUS 0x0; n=0 for word in $GREEN; do lo=$(printf '%s' "$word" | cut -c9-16); hi=$(printf '%s' "$word" | cut -c1-8) w $OFF_LO 0x$lo; w $OFF_HI 0x$hi; n=$(( n + 1 )) done echo "wrote $n words; bridge addr=$(( $(r $OFF_LO) )) (expect $n)" wait_ready || exit 1 w $OFF_GO 0x1 wait_ready || exit 1 echo "records=$(( $(r $OFF_HI) )) (expect 14)" echo "=== Report HDMI: TOP color (expect BLUE) and BOTTOM color (GREEN=ok / RED=fallback / BLUE=batch0 reuse). ==="