#!/usr/bin/env bash # Part of JoeyLib, Copyright (c) 2026 Scott Duensing, under the MIT License. # See LICENSE.md for license information. # SPDX-License-Identifier: MIT # # verify-atarist-display.sh - the ST family's present, checked on the page # the shifter shows. UBER's golden hashes are of the stage; a present that # leaves stale rows on screen passes them. UBERPROB (UBER with UBER_PROBE, # make/examples.mk) runs its display row (op_probeDisplayCheck): a tall band # presented, then a small rect inside it, then a settle present and an idle # one, comparing the shown page with the stage's planes after each # (jlpProbeDisplayMismatch in src/atarist/hal.c). Every count must be 0. # # Usage: scripts/verify-atarist-display.sh [MACHINE...] (default: st ste) # st and megast run the ST build, ste and megaste the STe build. # Exit: 0 PASS, 1 FAIL, 2 SKIP (Hatari or EmuTOS not installed) # Requires: Hatari + EmuTOS (install.sh install emulator:atarist); it builds # the probe (make PLATFORM-uberprob). set -uo pipefail repo=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) source "$repo/scripts/lib/joeyEnv.sh" joeyNeed HATARI hatari joeyNeed EMUTOS_IMG emutos label=verify-atarist-display machines=("$@") [ ${#machines[@]} -gt 0 ] || machines=(st ste) failed=0 for machine in "${machines[@]}"; do case $machine in st|megast) build=atarist ;; ste|megaste) build=ste ;; *) echo "$label: unknown machine '$machine' (st, megast, ste, megaste)" >&2; exit 2 ;; esac makefile=$repo/make/$build.mk if ! make -s -f "$makefile" "$build-uberprob"; then echo "$label: FAIL - building the $build UBERPROB failed" >&2 exit 1 fi dir=$repo/build/$build/probe rm -f "$dir/joeylog.txt" BENCH_PRG=UBERPROB.PRG BENCH_BIN_DIR="$dir" TIMEOUT="${TIMEOUT:-120}" "$repo/scripts/bench-atarist.sh" "$machine" > /dev/null 2>&1 line=$(grep "UBER-PROBE: displayMismatch" "$dir/joeylog.txt" 2>/dev/null) if [[ "$line" =~ afterB=0\ afterSettle=0\ afterIdle=0 ]]; then echo "$label: $build build on $machine OK - ${line#UBER-PROBE: }" else echo "$label: $build build on $machine FAIL - ${line:-no displayMismatch line in its log}" >&2 failed=1 fi done if [ "$failed" = 0 ]; then echo "$label: PASS" fi exit "$failed"