Define M4.3 Falcon 040 FreeMiNT profile #61
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |