joeylib2/scripts/verify-atarist-serial.sh

64 lines
2.1 KiB
Bash
Executable file

#!/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-serial.sh - both-directions RS-232 gate for the Atari ST port.
#
# Runs SERTEST.PRG (examples/sertest: banner, then echo) under Hatari and
# EmuTOS with the Modem port on a pseudo-terminal whose other end is the host
# peer (tests/gate/serialLoopPeer.c): it waits for the banner, sends a
# probe and expects it echoed. That exercises the chain: m68k-atari-mint-gcc
# -> the BIOS Aux channel -> JoeyLib serial HAL -> the MFP's USART -> host.
#
# Usage: scripts/verify-atarist-serial.sh
# Requires: hatari, EmuTOS (install.sh install emulator:atarist);
# build/atarist/bin/SERTEST.PRG (make atarist).
set -uo pipefail
repo=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
source "$repo/scripts/lib/joeyEnv.sh"
joeyNeed HATARI hatari
joeyNeed EMUTOS_IMG emutos
prg="$repo/build/atarist/bin/SERTEST.PRG"
wall=60
[ -f "$prg" ] || { echo "verify-atarist-serial: build SERTEST.PRG first (make atarist)" >&2; exit 2; }
work=$(mktemp -d -t joeylib-atarist-serial.XXXXXX)
cleanup() {
joeyStop "${hatariPid:-}"
joeyStop "${peerPid:-}"
rm -rf "$work"
}
trap cleanup EXIT
mkdir -p "$work/c"
cp "$prg" "$work/c/SERTEST.PRG"
peer=$(joeyTool serialLoopPeer) || exit 1
"$peer" pty "$work/pty" "$wall" > "$work/peer.log" 2>&1 &
peerPid=$!
for _ in $(seq 1 50); do
[ -f "$work/pty" ] && break
sleep 0.1
done
[ -f "$work/pty" ] || { echo "verify-atarist-serial: the peer made no pty" >&2; exit 1; }
pty=$(cat "$work/pty")
SDL_VIDEODRIVER=dummy SDL_AUDIODRIVER=dummy "$HATARI" --tos "$EMUTOS_IMG" \
--harddrive "$work/c" --gemdos-drive C --drive-a off --drive-b off \
--sound off --fast-forward on --rs232-in "$pty" --rs232-out "$pty" \
--auto 'C:\SERTEST.PRG' > "$work/hatari.log" 2>&1 &
hatariPid=$!
wait "$peerPid"
rc=$?
peerPid=""
cat "$work/peer.log"
if [ "$rc" -eq 0 ]; then
echo "verify-atarist-serial: PASS (banner out, probe echoed through the Modem port)"
else
echo "verify-atarist-serial: FAIL" >&2
fi
exit "$rc"