Language: 日本語 · English · 简体中文
Extract an original PlayStation BIOS through sound—not video or serial—and aim to finish in under 180 seconds.
The 512 KiB BIOS travels from an owned original PlayStation to a browser over analog stereo audio. With no FPU on the PS1, the transmitter relies on fixed-point arithmetic, SPU ADPCM, and double-buffered DMA. Payload transport is OFDM only—not FSK—at 44.1 kHz stereo with a 512-point FFT, 64-sample CP, 96 carriers, and QPSK.
The project began with an idea from Hamu (@Imaha486): let an original PlayStation read its own BIOS and carry the data out through interfaces the console already has, without soldering to the motherboard or requiring a dedicated ROM programmer. The goal is a backup from hardware the user owns, using an unmodified console as much as possible.
That idea grew into a complete browser-side recovery system: receive the signal, detect errors, repair missing data, reconstruct all 512 KiB, verify it, and only then offer a download.
PS1 BIOS Ripper ZX explored video as the transport. The PlayStation drew encoded patterns, a capture device digitized them, and the browser reconstructed the data from images. ZX established the visual hierarchy, block tracking, CRC workflow, browser-only reconstruction, and downloadable CD boot image.
SX moved the transport from video to analog stereo audio. That changed the problem completely: SPU ADPCM, audio cables, capture-interface filters, clock drift, and Web Audio replaced pixels and color conversion. ZX and SX share presentation and architecture, but their wire protocols are independent.
The regular SX line first prioritized reliable physical recovery. Burst Edition became the speed-focused branch: payload FSK was removed, stereo OFDM became the only data transport, and FEC, WASM demodulation, and Worker parallelism were added to pursue the under-180-second target.
ZX commits repeatedly mention temporal decoding, real UVC tracking, and self-calibration for eight-color physical transmission. Synthetic frames were easy; real capture introduced duplicated or missing frames, color drift, and timing variation. The response was multithreaded decoding, an NTSC simulator, palette self-calibration, native 60 fps reception, mobile layout fixes, and visible LZSS progress.
SX shows an even rougher path. The history moves through a corrected PS1 OFDM modulator, a 44.1 kHz AudioContext, windowed-sinc resampling, a C demodulator, WASM integration, and RS(16+4). It also records important reversals: enlarging buffering from 2048 to 8192 was reverted; moving block metadata from FSK to OFDM was reverted; a 300-to-400-baud FSK experiment was rolled back. SPU playback boundaries, the FSK-to-OFDM transition, mono transport, and stale one-channel audio all required physical investigation. Only later does the log record verified physical BIOS recovery.
Burst Edition's first major implementation touched 55 files and added roughly 4,700 lines: transmitter, receiver, FEC, WASM, synthetic WAV tests, PS1 UI, and Web UI together. Later commits added the start cue, multilingual UI, disc image, and recovery refinements. The design came from accumulated ZX and SX failures, not from a clean first attempt.
The 180-second target turned transfer time into a lap time. A received block feels like distance covered; a CRC error is lost pace; FEC is a pit-stop repair; an unrecoverable group is a crash. A racing circuit expressed that reality better than another rectangular progress bar.
Blocks became laps, the driven section of track fills with color, CRC trouble makes the car spin, the final block carries a chequered flag, and completion triggers GOAL and confetti. The 2 → 1 → GO! audio cue follows the same race-start language.
The spectacle still rests on Hamu's original idea: recover a PS1 BIOS through outputs already available on the machine. The F1 theme does not replace that origin; it is a respectful way to visualize the under-180-second challenge and the repeated return from emulator success to difficult physical hardware.
The PS1 plays a triangle-wave ADPCM start sequence: two short beeps, a rest, then one long beep. The browser responds with 2 → 1 → GO!. It is not just theatre: the sound is an audible input-gain reference, analogous to FSK carrier calibration. Actual payload data still uses OFDM only.
Each group has up to 32 data and 4 parity shards. A GF(256) Cauchy matrix (polynomial 0x11d) is used; CRC failures are treated as erasures and missing shards are recovered with Gaussian elimination. Packet, block, and whole-image CRC32 are checked after recovery. Heavy OFDM FFT/synchronization/demodulation code is fixed-point C/C++-style WebAssembly in a dedicated Worker, with a JavaScript fallback.
Analog capture is never perfectly repeatable. Gain, channel balance, sample-clock mismatch, interface filtering, and short noise bursts can damage isolated packets. The receiver therefore tries confidence-guided candidates and CRC-guided single-bit repair before asking the 32+4 FEC layer to reconstruct missing shards. Shards are interleaved over time so one dropout is less likely to destroy several members of the same FEC group. If every recovery layer fails, reception stops instead of saving a corrupted BIOS.
The PlayStation SPU uses predictive 4-bit ADPCM with block history. Ideal PC-generated OFDM does not leave the analog output unchanged: quantization, predictor state, block boundaries, end flags, and DMA timing all matter. Some failures appeared only on physical hardware, including stale audio seeming to return on one channel after a buffer transition.
The start sound, payload, and SPU RAM regions were separated; stale buffers are not reused; short fades tame edges; and all PS1-side math remains fixed point. A triangle wave was chosen for the race-start cue because it survives SPU ADPCM predictably and gives the browser a clear level/frequency reference.
The only development Mac was a MacBook Neo with 8 GB memory, using Codex. PS1 builds ran on a 512 GB Mac Studio. After DuckStation validation, CUE/BIN was burned to CD-R and tested on physical hardware.
Signal path: PS1 analog L/R → EP-136 stereo input → browser AudioWorklet. Stereo 44.1 kHz input is required; AGC, noise suppression, and echo cancellation are disabled.
Validation proceeded in distinct layers: host codec tests, synthetic PCM/WAV loopback, DuckStation, CD-R, physical PlayStation audio, and finally whole-image CRC in the browser. Emulator success was never treated as proof of the analog path. The racing UI—track, car, FEC spin, lap timing, and finish celebration—turns a long demodulation run into something visible rather than a silent progress bar.
| Item | Source |
|---|---|
| SCPH-3500 and SCPH-7500 | Mercari |
| Video capture and audio cables | Mercari |
| CD-R media | Akibaoo |
| Apple USB SuperDrive | Mercari |
The two consoles, capture device, and audio cables cost about ¥10,000 total.
| Role | Credit |
|---|---|
| Concept and inspiration | Hamu (@Imaha486) |
| Web and PlayStation applications | Developed with Codex |
| Logo and visual artwork | Generated with ChatGPT |
| Development and hardware testing | GOROman |
