|
| 1 | +# Joypad Tester — 3DO |
| 2 | + |
| 3 | +3DO Opera (Panasonic FZ-1 / FZ-10, GoldStar GDO, Sanyo TRY, etc.) |
| 4 | +build of the [Joypad Tester](../README.md). Reads the 3DO control |
| 5 | +pad daisy-chain and renders the live button state on screen. |
| 6 | + |
| 7 | +## What it tests |
| 8 | + |
| 9 | +The active 3DO control pad's full 32-bit `DoControlPad` bitfield, |
| 10 | +shown as raw hex plus a per-button held-or-not grid: |
| 11 | + |
| 12 | +``` |
| 13 | +Joypad Tester - 3DO |
| 14 | +=================== |
| 15 | +
|
| 16 | +P1 raw: 0x00000000 |
| 17 | +P2 raw: 0x00000000 |
| 18 | +
|
| 19 | +P1 buttons: |
| 20 | +. . |
| 21 | +. . |
| 22 | +. . |
| 23 | +. . |
| 24 | +. . |
| 25 | +. |
| 26 | +``` |
| 27 | + |
| 28 | +| Source | Detected as | |
| 29 | +|--------|-------------| |
| 30 | +| 3DO control pad (D-pad, A/B/C, Start, Stop, L/R shift) | `DoControlPad` slot 1 / slot 2 | |
| 31 | +| 3DO mouse / lightgun / arcade panel | not yet wired (uses different SDK calls) | |
| 32 | + |
| 33 | +Buttons rendered: Up, Down, Left, Right, A, B, C, Start, Stop, L (Left |
| 34 | +Shift), R (Right Shift). "Stop" is the X button on the original 3DO |
| 35 | +pad — its symbol is the eject-style square. |
| 36 | + |
| 37 | +## trapexit/3do-devkit toolchain |
| 38 | + |
| 39 | +3DO homebrew is built with the Norcroft ARM C/C++ compilers (originally |
| 40 | +1990s ARM Ltd / Acorn) bundled in |
| 41 | +[trapexit/3do-devkit](https://github.com/trapexit/3do-devkit). The |
| 42 | +devkit also ships 3DO Portfolio SDK headers + a small modern C++ |
| 43 | +helper layer (`BasicDisplay`, `abort_err`, etc.) that we link |
| 44 | +against unmodified. We pin to a specific devkit commit |
| 45 | +(`e0845bc4` at v0.1.0) inside [`buildtools/Dockerfile`](buildtools/Dockerfile); |
| 46 | +bumping it = rebuilding the image. |
| 47 | + |
| 48 | +The compilers are 32-bit x86 binaries (Linux only) — and one |
| 49 | +post-compile step (`3doiso`) is a Windows binary the devkit runs via |
| 50 | +Wine. The Docker image bakes both: `libc6-i386` for the 32-bit |
| 51 | +dynamic loader, `wine32` for the iso composer. On Apple Silicon or |
| 52 | +any non-x86 host, the container runs under `--platform=linux/amd64`. |
| 53 | + |
| 54 | +## Build |
| 55 | + |
| 56 | +The toolchain is Docker-only: |
| 57 | + |
| 58 | +``` |
| 59 | +./build_docker.sh # build (first run also builds image) |
| 60 | +./build_docker.sh clean # nuke build/ |
| 61 | +./build_docker.sh rebuild-image # force toolchain image rebuild |
| 62 | +``` |
| 63 | + |
| 64 | +`build/joypad-tester.iso` is the in-tree output. CI builds on every |
| 65 | +push to `main` (see |
| 66 | +[`.github/workflows/verify-build.yml`](../.github/workflows/verify-build.yml)). |
| 67 | + |
| 68 | +## Loading on hardware |
| 69 | + |
| 70 | +### 3DO emulator (Opera / Phoenix / RetroArch's Opera core) |
| 71 | + |
| 72 | +Drop `joypad_tester_v<ver>.iso` onto the emulator. Opera-based |
| 73 | +cores require a 3DO BIOS dump in their `system/` directory |
| 74 | +(`panafz1.bin` / `panafz10.bin` / `goldstar.bin` / `sanyotry.bin`). |
| 75 | + |
| 76 | +### Real 3DO hardware |
| 77 | + |
| 78 | +Burn the `.iso` to CD-R (700 MB blank, ISO mode — 3DO Opera |
| 79 | +filesystem is iso9660-compatible enough that standard burning tools |
| 80 | +handle it). Boot on a chipped console; unmodified retail consoles |
| 81 | +won't boot homebrew CDs. |
| 82 | + |
| 83 | +ODE / SD-loader options like the |
| 84 | +[Plextor / Polymega-replacement chips](https://3dodev.com/) are |
| 85 | +the contemporary path; check 3dodev.com for current hardware notes. |
| 86 | + |
| 87 | +## Releases |
| 88 | + |
| 89 | +Tagged as `3do-v<semver>` from the repo root — see |
| 90 | +[`3do/CHANGELOG.md`](CHANGELOG.md) for per-version notes. The release |
| 91 | +workflow attaches `joypad_tester_v<semver>_3do.iso` to each GitHub |
| 92 | +Release. |
| 93 | + |
| 94 | +## Origin / credits |
| 95 | + |
| 96 | +Built on Antonio SJ Musumeci's |
| 97 | +[3do-devkit](https://github.com/trapexit/3do-devkit) (ISC) — see |
| 98 | +[`LICENSE.md`](LICENSE.md). The Joypad Tester source |
| 99 | +(`src/main.cpp`) is original; `BasicDisplay` + `abort_err` come |
| 100 | +verbatim from the devkit and link in as part of the standard |
| 101 | +homebrew build. |
| 102 | + |
| 103 | +3DO Portfolio SDK headers / libraries shipped within the devkit are |
| 104 | +originally copyrighted by The 3DO Company and widely redistributed |
| 105 | +in the 3DO homebrew scene. |
| 106 | + |
| 107 | +Charles Doty (RasterSoft) wrote the original |
| 108 | +**3DO Controller Test Multi** (2016) — released "free of any licences, |
| 109 | +credit would be appreciated but not required". Distributed in the |
| 110 | +homebrew scene by Aer Fixus. Source is available on |
| 111 | +[3dodev.com](https://3dodev.com/software/homebrew/console_tools). |
| 112 | +Their 8-pad polling loop + Sprite/CEL rendering modules are the |
| 113 | +reference shape for our v0.2 multi-controller + screensaver work |
| 114 | +(see `.dev/docs/3do_roadmap.md`). v0.1.0 is a from-scratch bring-up |
| 115 | +against the modern trapexit devkit's `BasicDisplay` helper. |
0 commit comments