Skip to content

Define M4.3 Falcon 040 FreeMiNT profile #61

Define M4.3 Falcon 040 FreeMiNT profile

Define M4.3 Falcon 040 FreeMiNT profile #61

Workflow file for this run

name: aranym integration probe
# M4.2 guest marker probe revision: 1
on:
push:
paths:
- ".github/workflows/aranym-probe.yml"
- "ROADMAP.md"
- "README.md"
pull_request:
paths:
- ".github/workflows/aranym-probe.yml"
workflow_dispatch:
jobs:
aranym-baseline:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install ARAnyM
run: |
sudo apt-get update
sudo apt-get install -y aranym xvfb imagemagick x11-utils
- name: Record ARAnyM baseline
run: |
set -eux
command -v aranym
dpkg-query -W -f='aranym_version=${Version}\n' aranym | tee aranym-version.txt
(aranym --help || true) > aranym-help.txt 2>&1
test -s aranym-version.txt
- name: Discover ARAnyM CPU FPU MMU profile controls
run: |
set -eux
{
echo '=== aranym --help CPU/FPU/MMU matches ==='
grep -Ei 'cpu|fpu|mmu|680[2346]0|falcon|tt' aranym-help.txt || true
echo '=== packaged ARAnyM config/documentation matches ==='
grep -RniE 'CPU|FPU|MMU|680[2346]0|Falcon|Atari TT|Cookie_MCH' /usr/share/doc/aranym /etc 2>/dev/null | head -200 || true
} | tee aranym-profile-controls.txt
test -s aranym-profile-controls.txt
{
echo '=== installed ARAnyM binaries ==='
command -v aranym || true
command -v aranym-jit || true
command -v aranym-mmu || true
echo '=== packaged reference config ==='
if test -f /usr/share/doc/aranym/config; then
cat /usr/share/doc/aranym/config
else
echo 'reference_config=missing'
fi
} | tee aranym-profile-schema.txt
grep -Eq 'aranym(-jit|-mmu)?' aranym-profile-schema.txt
- name: Provision EmuTOS for ARAnyM
run: |
set -eux
curl --fail --location --retry 3 -o /tmp/emutos.zip \
https://sourceforge.net/projects/emutos/files/emutos/1.4/emutos-512k-1.4.zip/download
unzip -q /tmp/emutos.zip -d /tmp/emutos
rom="$(find /tmp/emutos -type f \( -name 'etos512*.img' -o -name 'etos512*.rom' \) -print -quit)"
test -n "$rom"
mkdir -p "$HOME/.aranym"
cp "$rom" "$HOME/.aranym/emutos-aranym.img"
test -s "$HOME/.aranym/emutos-aranym.img"
sha256sum "$HOME/.aranym/emutos-aranym.img" | tee aranym-emutos.sha256
- name: Record current FreeMiNT snapshot source
run: |
cat > freemint-snapshot-source.txt <<'EOF'
FreeMiNT upstream recommends post-1.18 binary snapshots for current use.
Bootable snapshots: https://atari.joska.no/snapshots/freemint/bootable/
CPU snapshots: https://atari.joska.no/snapshots/freemint/cpu/
M4.2 keeps 1.18.0 as the reproducible legacy control until snapshot provisioning is added.
EOF
- name: Probe current FreeMiNT ARAnyM snapshot availability
run: |
set -eux
base="https://atari.joska.no/snapshots/freemint/bootable"
curl --fail --location --retry 5 --retry-all-errors --connect-timeout 15 --max-time 180 -o freemint-latest-aranym.zip "$base/freemint-latest-aranym.zip"
unzip -l freemint-latest-aranym.zip | tee freemint-snapshot-contents.txt
sha256sum freemint-latest-aranym.zip | tee freemint-snapshot.sha256
unzip -q freemint-latest-aranym.zip -d /tmp/freemint-snapshot
find /tmp/freemint-snapshot -type f \( -iname 'mintara.prg' -o -iname 'mint.cnf' -o -iname 'aranym.xfs' -o -iname 'hostfs.xfs' \) -printf '%P\n' | sort | tee freemint-snapshot-boot-files.txt
test -s freemint-snapshot-boot-files.txt
- name: Stage current FreeMiNT ARAnyM snapshot
run: |
set -eux
root="$(find /tmp/freemint-snapshot -type d -name drive_c -print -quit)"
test -n "$root"
kernel="$(find "$root" -type f -iname mintara.prg -print -quit)"
test -s "$kernel"
cp -a "$root" aranym-freemint-snapshot-C
rel="${kernel#"$root"/}"
{
echo "snapshot_root=$root"
echo "snapshot_kernel=$rel"
echo "snapshot_version=$(basename "$(dirname "$kernel")")"
} | tee freemint-snapshot-stage.txt
test -s "aranym-freemint-snapshot-C/$rel"
probe="$(find aranym-freemint-snapshot-C -type f -iname 'echo' -perm -111 -print -quit || true)"
printf 'snapshot_echo=%s\n' "$probe" | tee -a freemint-snapshot-stage.txt
find aranym-freemint-snapshot-C -type f \( -iname 'bash' -o -iname 'sh' -o -iname 'echo' -o -iname 'touch' \) -printf '%P\n' | sort | tee freemint-snapshot-guest-tools.txt
cnf="$(find aranym-freemint-snapshot-C/mint -mindepth 2 -maxdepth 2 -type f -iname 'mint.cnf' -print -quit)"
test -s "$cnf"
grep -Ein 'exec|init|shell|bash|xaaes|xaloader' "$cnf" | tee freemint-snapshot-mint-cnf-hooks.txt || true
bashbin="$(find aranym-freemint-snapshot-C -type f -path '*/sys-root/bin/bash' -print -quit)"
test -s "$bashbin"
file "$bashbin" | tee freemint-snapshot-bash.txt
eth0_script="$(find aranym-freemint-snapshot-C -type f -path '*/sys-root/bin/eth0-config.sh' -print -quit)"
test -s "$eth0_script"
cp "$eth0_script" freemint-snapshot-eth0-config-original.sh
cat >> "$eth0_script" <<'EOF'
# Ploos-AS M4.2 guest execution probe
echo 'Ploos-AS atari-runtime FreeMiNT ARAnyM execution PASS' > /tmp/PLOOSPASS.TXT
cp /tmp/PLOOSPASS.TXT /c/PLOOSPASS.TXT || true
cp /tmp/PLOOSPASS.TXT u:/c/PLOOSPASS.TXT || true
EOF
grep -n 'exec u:/bin/bash u:/bin/eth0-config.sh' "$cnf" | tee freemint-snapshot-probe-hook.txt
tail -8 "$eth0_script" | tee freemint-snapshot-eth0-config-probe.txt
- name: Configure current FreeMiNT snapshot for ARAnyM
run: |
set -eux
rel="$(sed -n 's/^snapshot_kernel=//p' freemint-snapshot-stage.txt)"
cat > aranym-freemint-snapshot.cfg <<EOF
[GLOBAL]
FastRAM = 64
FixedMemoryOffset = 0
EmuTOS = $HOME/.aranym/emutos-aranym.img
Bootstrap = $GITHUB_WORKSPACE/aranym-freemint-snapshot-C/$rel
BootstrapArgs = MEM_PROT=YES DEBUG_LEVEL=1
BootDrive = C
GMTime = No
EpsEnabled = No
EpsMax = 20
[HOSTFS]
symlinks = posix
C = $GITHUB_WORKSPACE/aranym-freemint-snapshot-C
[JIT]
JIT = Yes
JITFPU = Yes
JITCacheSize = 8192
JITLazyFlush = 1
[TOS]
Cookie_MCH = 50000
RedirConsole = No
EOF
test -s aranym-freemint-snapshot.cfg
- name: Record M4.3 Falcon-040 profile
run: |
set -eux
cat > aranym-m4-3-falcon-040.txt <<'EOF'
milestone=M4.3
profile=falcon-040
emulator=ARAnyM
cpu=MC68040-compatible
fpu=MC68882-compatible
mmu=disabled-in-standard-build
guest=FreeMiNT
qualification_gate=M4.2-guest-marker+xaloader-xaaes
machine_fidelity=ARAnyM-virtual-machine-not-Falcon-hardware-emulation
EOF
grep -Fxq 'profile=falcon-040' aranym-m4-3-falcon-040.txt
grep -Fxq 'cpu=MC68040-compatible' aranym-m4-3-falcon-040.txt
- name: Probe current FreeMiNT snapshot boot
run: |
set -eux
Xvfb :98 -screen 0 1024x768x24 > aranym-snapshot-xvfb.log 2>&1 &
xvfb_pid=$!
export DISPLAY=:98
sleep 1
aranym -N -e -c "$GITHUB_WORKSPACE/aranym-freemint-snapshot.cfg" > aranym-snapshot-startup.log 2>&1 &
aranym_pid=$!
sleep 30
import -display :98 -window root aranym-snapshot.png
identify aranym-snapshot.png | tee aranym-snapshot-framebuffer.txt
cat aranym-snapshot-startup.log | tee aranym-snapshot-startup-visible.log
grep -Ei 'NF BOOTSTRAP|FreeMiNT|MiNT|parse_cnf|realloc_region|pid |panic|fatal|error' aranym-snapshot-startup.log | tee freemint-snapshot-bootstrap-trace.txt || true
grep -Fq 'NF BOOTSTRAP(' aranym-snapshot-startup.log
grep -Fq 'NF BOOTSTRAP_ARGS(MEM_PROT=YES DEBUG_LEVEL=1)' aranym-snapshot-startup.log
grep -Eq 'pid +1 \(xaloader\): run_km\(xaaes\.km\) ok' aranym-snapshot-startup.log
find aranym-freemint-snapshot-C -iname '*PLOOSPASS*' -type f -print | tee freemint-snapshot-marker-locations.txt
marker="$(find aranym-freemint-snapshot-C -iname 'ploospass.txt' -type f -print -quit)"
test -n "$marker"
test -s "$marker"
tr -d '\r' < "$marker" | grep -Fxq 'Ploos-AS atari-runtime FreeMiNT ARAnyM execution PASS'
cp "$marker" freemint-snapshot-guest-marker.txt
printf 'freemint_snapshot_guest_marker=PASS\nmarker=%s\n' "$marker" | tee freemint-snapshot-guest-marker-result.txt
{
echo 'freemint_snapshot_guest_execution=PASS'
echo 'evidence=xaloader executed xaaes.km inside FreeMiNT guest'
grep -E 'pid +1 \(xaloader\): run_km\(xaaes\.km\) ok' aranym-snapshot-startup.log
} | tee freemint-snapshot-guest-result.txt
colors="$(convert aranym-snapshot.png -format %c histogram:info:- | wc -l)"
echo "aranym_snapshot_framebuffer_colors=$colors" | tee -a aranym-snapshot-framebuffer.txt
test "$colors" -gt 1
kill "$aranym_pid" 2>/dev/null || true
wait "$aranym_pid" 2>/dev/null || true
kill "$xvfb_pid" 2>/dev/null || true
test -s aranym-snapshot-startup.log
! grep -Fq "No operating system found" aranym-snapshot-startup.log
- name: Discover current FreeMiNT release
run: |
set -eux
curl --fail --location --retry 3 \
https://api.github.com/repos/freemint/freemint/releases/latest \
-o freemint-release.json
python3 - <<'PY'
import json
d=json.load(open("freemint-release.json"))
print("freemint_release_tag="+d.get("tag_name",""))
for a in d.get("assets",[]):
print(a.get("name","")+"\t"+a.get("browser_download_url",""))
PY
python3 - <<'PY' > freemint-release.txt
import json
d=json.load(open("freemint-release.json"))
print("tag="+d.get("tag_name",""))
print("published_at="+d.get("published_at",""))
for a in d.get("assets",[]):
print("asset="+a.get("name","")+"\t"+a.get("browser_download_url",""))
PY
grep -q '^tag=.' freemint-release.txt
- name: Inspect FreeMiNT 1.18.0 distribution
run: |
set -eux
url="$(python3 - <<'PY'
import json
d=json.load(open("freemint-release.json"))
for a in d.get("assets",[]):
if a.get("name","").endswith(".zip"):
print(a["browser_download_url"])
break
PY
)"
test -n "$url"
curl --fail --location --retry 6 --retry-all-errors --connect-timeout 15 --max-time 180 -o /tmp/freemint.zip "$url"
unzip -l /tmp/freemint.zip | tee freemint-contents.txt
unzip -q /tmp/freemint.zip -d /tmp/freemint
find /tmp/freemint -type f \
\( -iname '*aranym*' -o -iname 'mint*.prg' -o -iname 'mint*.xfs' -o -iname '*kernel*' \) \
-printf '%P\n' | sort | tee freemint-boot-candidates.txt
test -s freemint-boot-candidates.txt
- name: Stage FreeMiNT ARAnyM kernel tree
run: |
set -eux
mkdir -p aranym-freemint/C/mint/1-18-0
cp -a /tmp/freemint/freemint/mint/1-18-0/. aranym-freemint/C/mint/1-18-0/
cp /tmp/freemint/freemint/auto/mintara.prg aranym-freemint/C/mint/1-18-0/mintara.prg
cp /tmp/freemint/freemint/driver/xfs/aranym.xfs aranym-freemint/C/mint/1-18-0/aranym.xfs
cp /tmp/freemint/freemint/driver/xfs/hostfs.xfs aranym-freemint/C/mint/1-18-0/hostfs.xfs
test -s aranym-freemint/C/mint/1-18-0/mintara.prg
test -s aranym-freemint/C/mint/1-18-0/mint.cnf
test -s aranym-freemint/C/mint/1-18-0/aranym.xfs
test -s aranym-freemint/C/mint/1-18-0/hostfs.xfs
sha256sum \
aranym-freemint/C/mint/1-18-0/mintara.prg \
aranym-freemint/C/mint/1-18-0/aranym.xfs \
| tee freemint-aranym-files.sha256
{
echo "freemint_version=1.18.0"
echo "kernel=mint/1-18-0/mintara.prg"
echo "xfs=mint/1-18-0/aranym.xfs"
echo "status=STAGED"
} | tee freemint-aranym-stage.txt
- name: Configure ARAnyM hostfs C drive for FreeMiNT
run: |
set -eux
cat > aranym-freemint.cfg <<EOF
[GLOBAL]
FastRAM = 64
FixedMemoryOffset = 0
EmuTOS = $HOME/.aranym/emutos-aranym.img
Bootstrap = $GITHUB_WORKSPACE/aranym-freemint/C/mint/1-18-0/mintara.prg
BootstrapArgs = DEBUG_LEVEL=1 BOOT_DELAY=0 MEM_PROT=NO
BootDrive = C
GMTime = No
EpsEnabled = No
EpsMax = 20
[IDE0]
Present = No
IsCDROM = No
ByteSwap = No
ReadOnly = No
Path =
[HOSTFS]
symlinks = posix
C = $GITHUB_WORKSPACE/aranym-freemint/C
[JIT]
JIT = Yes
JITFPU = Yes
JITCacheSize = 8192
JITLazyFlush = 1
JITInline = No
[TOS]
Cookie_MCH = 50000
RedirConsole = No
EOF
test -s aranym-freemint.cfg
grep -F "C = $GITHUB_WORKSPACE/aranym-freemint/C" aranym-freemint.cfg
grep -F "symlinks = posix" aranym-freemint.cfg
grep -F "BootDrive = C" aranym-freemint.cfg
grep -F "Bootstrap = $GITHUB_WORKSPACE/aranym-freemint/C/mint/1-18-0/mintara.prg" aranym-freemint.cfg
grep -F "BootstrapArgs = DEBUG_LEVEL=1 BOOT_DELAY=0 MEM_PROT=NO" aranym-freemint.cfg
grep -F "FastRAM = 64" aranym-freemint.cfg
grep -F "FixedMemoryOffset = 0" aranym-freemint.cfg
printf '\n=== ARAnyM startup log ===\n'
# printed after the emulator run below
- name: Probe headless ARAnyM + EmuTOS startup
run: |
set -eux
Xvfb :99 -screen 0 1024x768x24 > aranym-xvfb.log 2>&1 &
xvfb_pid=$!
export DISPLAY=:99
sleep 1
aranym -N -e -c "$GITHUB_WORKSPACE/aranym-freemint.cfg" > aranym-startup.log 2>&1 &
aranym_pid=$!
sleep 30
import -display :99 -window root aranym-emutos.png
identify aranym-emutos.png | tee aranym-framebuffer.txt
cat aranym-startup.log | tee aranym-startup-visible.log
grep -Ei 'NF BOOTSTRAP|FreeMiNT|MiNT|parse_cnf|realloc_region|panic|fatal|error' aranym-startup.log | tee freemint-bootstrap-trace.txt || true
strings aranym-freemint/C/mint/1-18-0/mintara.prg | grep -Ei 'FreeMiNT|MiNT' | head -20 | tee freemint-kernel-identity.txt || true
colors="$(convert aranym-emutos.png -format %c histogram:info:- | wc -l)"
printf 'aranym_framebuffer_colors=%s\n' "$colors" | tee -a aranym-framebuffer.txt
test "$colors" -gt 1
if test -s aranym-freemint/C/MINT/BOOT.LOG; then
cp aranym-freemint/C/MINT/BOOT.LOG freemint-boot.log
echo "freemint_boot_log=present" | tee freemint-guest-result.txt
grep -Ei 'MiNT|FreeMiNT' freemint-boot.log | head -40 | tee -a freemint-guest-result.txt || true
else
echo "freemint_boot_log=missing" | tee freemint-guest-result.txt
fi
kill "$aranym_pid" 2>/dev/null || true
wait "$aranym_pid" 2>/dev/null || true
kill "$xvfb_pid" 2>/dev/null || true
rc=0
rc=${rc:-0}
test "$rc" -eq 0
test -s aranym-startup.log
! grep -Fq "No operating system found" aranym-startup.log
printf 'aranym_startup_exit=%s\n' "$rc" | tee aranym-startup-result.txt
- name: Record M4.1 host capabilities
run: |
{
echo "milestone=M4.1"
echo "emulator=ARAnyM"
echo "guest_target=FreeMiNT"
echo "machine_class=TT/Falcon-oriented"
echo "status=BASELINE_PASS"
} | tee aranym-baseline.txt
- name: Upload ARAnyM baseline evidence
uses: actions/upload-artifact@v4
with:
name: aranym-m4-1-baseline
path: |
aranym-version.txt
aranym-help.txt
aranym-profile-controls.txt
aranym-profile-schema.txt
aranym-m4-3-falcon-040.txt
aranym-package-files.txt
aranym-manual.txt
aranym-package-docs.txt
aranym-config-doc-hits.txt
aranym-startup-visible.log
freemint-bootstrap-trace.txt
aranym-help.txt
aranym-emutos.sha256
freemint-snapshot-source.txt
freemint-snapshot-contents.txt
freemint-snapshot.sha256
freemint-snapshot-boot-files.txt
freemint-snapshot-stage.txt
freemint-snapshot-guest-tools.txt
freemint-snapshot-mint-cnf-hooks.txt
freemint-snapshot-bash.txt
freemint-snapshot-probe-hook.txt
freemint-snapshot-eth0-config-original.sh
freemint-snapshot-eth0-config-probe.txt
freemint-snapshot-guest-marker.txt
freemint-snapshot-guest-marker-result.txt
aranym-freemint-snapshot.cfg
aranym-snapshot-startup.log
aranym-snapshot-startup-visible.log
aranym-snapshot-framebuffer.txt
aranym-snapshot.png
freemint-snapshot-bootstrap-trace.txt
freemint-snapshot-guest-result.txt
freemint-release.txt
freemint-release.json
freemint-contents.txt
freemint-boot-candidates.txt
freemint-aranym-files.sha256
freemint-aranym-stage.txt
aranym-freemint.cfg
aranym-startup.log
aranym-startup-result.txt
aranym-xvfb.log
aranym-emutos.png
aranym-framebuffer.txt
freemint-kernel-identity.txt
freemint-guest-result.txt
freemint-boot.log
aranym-baseline.txt
if-no-files-found: warn