Skip to content

Commit 35f8024

Browse files
3do: cut v1.0.0 -- broker-based multi-device tester.
1 parent e746c7c commit 35f8024

3 files changed

Lines changed: 42 additions & 15 deletions

File tree

3do/CHANGELOG.md

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,43 @@
11
# Joypad Tester — 3DO — Changelog
22

3-
## v0.1.0 — 2026-05-12
3+
## v1.0.0 — 2026-05-14
44

5-
First release. Bring-up of the 3DO controller test ROM via the
6-
trapexit/3do-devkit toolchain.
5+
First production release. The earlier v0.1.0 was a single-pad
6+
`DoControlPad` polling bring-up; v1.0.0 rewrites the data path to
7+
talk to the Portfolio event broker directly and detects / renders
8+
every PBUS device class on the daisy chain.
79

810
### Highlights
911

10-
- Live P1 button readout: raw 32-bit `DoControlPad` bitfield rendered
11-
on screen, plus per-button labels for the 11 standard 3DO inputs
12-
(D-pad, A/B/C, Start, Stop, L/R shifts).
13-
- Two-pad slot reserved in the polling code (`InitControlPad (2)`) —
14-
P2 hex is shown alongside P1; full P2 button-grid display comes
15-
next.
12+
- Per-class renderers, one row per detected pod:
13+
- `PAD` (0x80) — D-pad, A/B/C, X, P (Start), L/R Shift
14+
- `MOUSE` (0x49) — X / Y delta, L / M / R
15+
- `STICK` (0x01) — H / V / D analog + hat + 8 face/shift buttons
16+
- `GUN` (0x4D) — timing counter, line pulse, trigger
17+
- `ARCADE` (0xC0) — P1/P2 Coin/Start + Service
18+
- `KEYB` (0x02 / 0x4B) — 256-bit key matrix + a terminal-style
19+
typed-text row with blinking cursor and backspace
20+
- any other class → row labelled with the raw `0xNN` byte
21+
- Custom event broker daemon built from the full
22+
[trapexit/portfolio_os](https://github.com/trapexit/portfolio_os)
23+
source. The stripped daemon in the devkit returns
24+
`ER_NotSupported` for everything past `EB_Configure` /
25+
`EB_EventRecord`, which kills non-pad enumeration. Our build
26+
links every driverlet (pad, mouse, stick, lightgun, glasses,
27+
keyboard) statically into the broker.
28+
- `SillyPadDriver.c` written from scratch — no public `CPORTC0.ROM`
29+
ever shipped (Orbatak baked its 0xC0 driver into the game binary).
30+
Decodes both the PBUS-spec bit layout and the SNES23DO firmware's
31+
variant.
32+
- `KeyboardDriver.c` completed from the public stub in
33+
portfolio_os. Implements the PS/2 Set 2 byte-stream decoder,
34+
populates `ked_KeyMatrix[8]`, emits all four `EVENTNUM_Keyboard*`
35+
events. PR open upstream.
36+
- Bouncing-logo screensaver after 30 s idle. Cycling-colour
37+
silhouette on black background via an uncoded 16 bpp cel with
38+
pixel-buffer colour mutation per frame.
1639

17-
Full feature breakdown + build / loading instructions in
18-
[`3do/README.md`](https://github.com/joypad-ai/joypad-tester/blob/main/3do/README.md).
40+
## v0.1.0 — 2026-05-12 (never tagged)
41+
42+
Scaffold release. Single-pad `DoControlPad` polling, raw 32-bit
43+
bitfield render. Superseded by v1.0.0.

3do/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.1.0
1+
1.0.0

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ A collection of homebrew controller test ROMs across game consoles. Each console
3131
| GameCube | working | [`gcn/`](gcn/) | [zlib](gcn/LICENSE.md) |
3232
| Game Boy Advance | working | [`gba/`](gba/) | [MIT](gba/LICENSE.md) |
3333
| PC Engine | working | [`pce/`](pce/) | [MIT](pce/LICENSE.md) |
34-
| 3DO | scaffolded | [`3do/`](3do/) | [MIT](3do/LICENSE.md) |
34+
| 3DO | working | [`3do/`](3do/) | [MIT](3do/LICENSE.md) |
35+
| Dreamcast | scaffolded | [`dc/`](dc/) | [MIT](dc/LICENSE.md) |
3536

36-
Subdirs use short 3-letter codenames (`gcn`, `gba`, `pce`, future
37+
Subdirs use short 3-letter codenames (`gcn`, `gba`, `pce`, `dc`, future
3738
`n64`/`snes`/…) matching homebrew-community conventions. Release tags
3839
follow the same prefix: `<codename>-v<semver>`.
3940

@@ -46,7 +47,8 @@ Each console app has its own lineage. As more consoles join, this list grows.
4647
| GameCube | Derived from [corenting/GC-Controller-Test](https://github.com/corenting/GC-Controller-Test) (zlib). Multi-port layout and accessory probe flow modeled after [meeq/JoypadTest-N64](https://github.com/meeq/JoypadTest-N64). GC keyboard wire format and scancode table come from the [joypad-os](https://github.com/joypad-ai/joypad-os) firmware (`src/lib/joybus-pio`). |
4748
| Game Boy Advance | Joybus handshake + main loop from [Doridian/Joybus-PIO](https://github.com/Doridian/Joybus-PIO) (MIT). Eyes overlay ported from [joypad-os](https://github.com/joypad-ai/joypad-os)'s `eyes_anim`. Mode-4 page-flipped screensaver matches the GameCube tester's logo + color cycle. Two ROM variants from one source tree: `joypad_mb.gba` (eyes, for joypad-os submodule consumers) and `tester_mb.gba` (Doridian + on-GBA console). |
4849
| PC Engine | Baseline from [dshadoff/PCE_Mouse_Test](https://github.com/dshadoff/PCE_Mouse_Test) (MIT). Detects 2-button / 6-button pads and the PC Engine mouse, including multitap support. Built with [uli/huc](https://github.com/uli/huc) (HuC) pinned in a Docker image we maintain. |
49-
| 3DO | Fresh implementation against [trapexit/3do-devkit](https://github.com/trapexit/3do-devkit) (ISC). Reads the daisy-chain control pad via the 3DO Portfolio SDK's `DoControlPad` API. Reference: Charles Doty (RasterSoft)'s [3DO Controller Test Multi](https://3dodev.com/software/homebrew/console_tools) (2016, permissively-licensed). Pinned devkit commit lives in `3do/buildtools/Dockerfile`. |
50+
| 3DO | Fresh implementation against [trapexit/3do-devkit](https://github.com/trapexit/3do-devkit) (ISC). Detects every PBUS device on the daisy chain (Pad, Mouse, Stick, LightGun, Arcade SillyPad, Keyboard) by talking directly to the Portfolio event broker. Bundles a rebuilt broker daemon from [trapexit/portfolio_os](https://github.com/trapexit/portfolio_os) with every driverlet static-linked in, plus a new `SillyPadDriver.c` for the 0xC0 silly-pad and a finished `KeyboardDriver.c` (PR open upstream). Conceptual ancestor: Charles Doty (RasterSoft)'s [3DO Controller Test Multi](https://3dodev.com/software/homebrew/console_tools) (2016). Pinned devkit commit lives in `3do/buildtools/Dockerfile`. |
51+
| Dreamcast | Fresh implementation against [KallistiOS](https://github.com/KallistiOS/KallistiOS) (BSD-style). Reads every maple-bus device class — controllers, mice, keyboards, light guns, plus per-port slot peripherals (VMU, Purupuru, microphone). Also hosts a built-in VMU icon editor mode (v0.2+) ported from [RobertDaleSmith/vmu-icon-maker](https://github.com/RobertDaleSmith/vmu-icon-maker) (MIT). First console in the repo to ship the mode-switching scaffold (Options menu via Start+Down) that future testers can adopt. Pinned KOS commit lives in `dc/buildtools/Dockerfile`. |
5052

5153
Originating copyrights are preserved in each console's source headers.
5254

0 commit comments

Comments
 (0)