Skip to content

Commit 51a5ebc

Browse files
3do: SVG-derived logo, layout fixes, README + build script cleanup.
Logo: regenerate from branding/logo_solid_black.svg via rsvg-convert at 76x64 (matches the SVG's 1.177:1 aspect natively). Removes the runtime HDX stretch hack -- the source PNG now has the right proportions and the cel renders 1:1. Layout fixes on the device row: - K: column shifted from x=108 to x=128 to clear the ID column (which ends at x=112 after the move to x=96). - Keyboard terminal-input row starts at x=40, aligned with the Type column. Buffer cap reduced to 33 chars to fit the narrower available width after the prompt. README rewritten: dropped the wrong "chipped console" line (3DO boots CD-Rs natively), trimmed the toolchain history, condensed the device-class explanation to one table. build_docker.sh: dropped the cport*.rom case-rename loop (OperaFS is case-insensitive AND we static-link the driverlets, so disc-load filename case never matters) along with the rest of the AI-narrative comments. Same behaviour, ~30% fewer lines.
1 parent 191f6c5 commit 51a5ebc

5 files changed

Lines changed: 103 additions & 257 deletions

File tree

3do/README.md

Lines changed: 51 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,70 @@
11
# Joypad Tester — 3DO
22

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.
3+
3DO build of the [Joypad Tester](../README.md). Talks directly to the
4+
Portfolio event broker and renders the live state of every PBUS
5+
device on the daisy chain.
66

7-
## What it tests
7+
## What it shows
88

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:
9+
One row per detected pod. Layout:
1110

1211
```
1312
Joypad Tester - 3DO
1413
===================
1514
16-
P1 raw: 0x00000000
17-
P2 raw: 0x00000000
18-
19-
P1 buttons:
20-
. .
21-
. .
22-
. .
23-
. .
24-
. .
25-
.
15+
P TYPE ID
16+
1 PAD 80 U . . R . A B C . P . R
17+
2 MOUSE 49 X-032 Y+069 L . R
18+
3 STICK 01 . . L . F A . . . P . .
19+
H+000 V-018 D+002
20+
4 GUN 4D C 28800 L1 T
21+
5 ARCADE C0 . S1 . S2 Sv
22+
6 KEYB 4B K:02 1C 23 -- --
23+
> hello world_
2624
```
2725

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.
26+
| Class | PBUS ID(s) | Decoded fields |
27+
|------------|-------------|-----------------------------------------------|
28+
| `PAD` | 0x80 / 0xA0 | D-pad, A/B/C, X, P (Start), L/R Shift |
29+
| `MOUSE` | 0x49 | X / Y delta, L / M / R |
30+
| `STICK` | 0x01 | H / V / D analog, Fire/A/B/C/X/P/Shifts + hat |
31+
| `GUN` | 0x4D | timing counter, line pulse, trigger |
32+
| `ARCADE` | 0xC0 | P1/P2 Coin / Start, Service |
33+
| `KEYB` | 0x02 / 0x4B | 256-bit matrix + terminal-style typed text |
34+
| any other | `0xNN` | shown by raw class byte |
4735

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`.
36+
After 30 s of no input → bouncing-logo screensaver. Any input wakes.
5337

5438
## Build
5539

56-
The toolchain is Docker-only:
40+
Docker-only:
5741

5842
```
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
43+
./build_docker.sh # build
44+
./build_docker.sh clean
45+
./build_docker.sh rebuild-image
6246
```
6347

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.
48+
Compiles `main.cpp` against
49+
[trapexit/3do-devkit](https://github.com/trapexit/3do-devkit), then
50+
rebuilds the event broker daemon from
51+
[trapexit/portfolio_os](https://github.com/trapexit/portfolio_os) with
52+
every driverlet (pad, mouse, stick, lightgun, glasses, keyboard, plus
53+
a local `SillyPadDriver.c` for 0xC0) static-linked in. Output:
54+
`build/joypad-tester.iso`.
55+
56+
## Loading
57+
58+
- **CD-R** — burn the ISO, boot it. No modchip needed.
59+
- **ODE** — drop the ISO on the SD.
60+
- **Emulator** — RetroArch's Opera core / standalone Opera / Phoenix.
61+
Requires a 3DO BIOS in the emulator's `system/`.
62+
63+
## Credits
64+
65+
- Build infra: [trapexit/3do-devkit](https://github.com/trapexit/3do-devkit) (ISC).
66+
- Driverlets: [trapexit/portfolio_os](https://github.com/trapexit/portfolio_os), with the keyboard one finished by us (PR open).
67+
- `SillyPadDriver.c`: new, written from the PBUS spec + the
68+
[SNES23DO](https://github.com/SNES23DO/SNES23DO) firmware reference
69+
(Orbatak baked its 0xC0 driver into its game binary, no
70+
redistributable `CPORTC0.ROM` ever shipped).

3do/assets/logo_64.png

-186 Bytes
Loading

3do/assets/logo_64_inv.png

-19 Bytes
Loading

0 commit comments

Comments
 (0)