#!/usr/bin/env bash # snapDemo.sh - boot a demo OMF in MAME and capture multiple SHR # snapshots while it runs. Useful for verifying that a demo's window # is actually drawn (vs the headless test which only checks the $99 # end-marker at $00:0070). # # Usage: bash scripts/snapDemo.sh [snap-frame-list] # Default snap frames: 4800,5000,5200,5500,6000,6500. # Optional env: SYSDISK=path/to/sys602.po (or other ProDOS .po). # # Snapshots land in a TMPDIR-rooted snapdir; the path is echoed at # the end. The work disk image and Finder navigation script are # cleaned up via trap. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" [ $# -ge 1 ] || { echo "usage: $0 [frames]" >&2; exit 2; } BASE="$1" FRAMES="${2:-4800,5000,5200,5500,6000,6500}" CADIUS="${CADIUS:-$PROJECT_ROOT/tools/cadius/cadius}" SYSDISK="${SYSDISK:-$PROJECT_ROOT/tools/gsos/sys602.po}" OMF="$PROJECT_ROOT/demos/${BASE}.omf" [ -x "$CADIUS" ] || { echo "cadius not found: $CADIUS" >&2; exit 2; } [ -f "$SYSDISK" ] || { echo "sysdisk not found: $SYSDISK" >&2; exit 2; } [ -f "$OMF" ] || { echo "OMF not found: $OMF (run demos/build.sh $BASE first)" >&2; exit 2; } command -v mame >/dev/null || { echo "mame not in PATH" >&2; exit 2; } WORK=$(mktemp -d -t snapDemo.XXXXXX) SNAPDIR=$(mktemp -d -t snapDemoOut.XXXXXX) trap 'rm -rf "$WORK"' EXIT cp "$SYSDISK" "$WORK/disk.po" "$CADIUS" CREATEVOLUME "$WORK/data.po" DATA 800KB >/dev/null cp "$OMF" "$WORK/HELLO#B30000" "$CADIUS" ADDFILE "$WORK/data.po" /DATA "$WORK/HELLO#B30000" >/dev/null # Build lua steps[] entries for each requested snap frame. SNAP_STEPS="" for f in ${FRAMES//,/ }; do SNAP_STEPS="${SNAP_STEPS} {${f}, function() manager.machine.video:snapshot(); print(string.format(\"SNAP-FRAME=${f}\")) end}, " done cat > "$WORK/launch.lua" <= park_frame_start and frame <= park_frame_end then mx:set_value(100); my:set_value(0) end while idx <= #steps and frame >= steps[idx][1] do steps[idx][2](); idx = idx + 1 end end) LUA timeout 200 mame apple2gs -rompath "$PROJECT_ROOT/tools/mame/roms" \ -window -nothrottle -sound none \ -snapshot_directory "$SNAPDIR" \ -seconds_to_run 180 -flop3 "$WORK/disk.po" -flop4 "$WORK/data.po" \ -autoboot_script "$WORK/launch.lua" &1 | \ grep -E "MAME-READ|SHR-|SNAP-" || true echo "snaps in: $SNAPDIR" find "$SNAPDIR" -name '*.png' | sort