Skip to content

Casquinha b55 — the preemptive decoder

Latest

Choose a tag to compare

@felipedbene felipedbene released this 07 Jul 03:36
· 17 commits to master since this release

Fix release of Casquinha — the b50→b55 arc: MP3 decode moves off the cooperative loop onto a preemptive Multiprocessing Services task, so menus, window drags and dialogs no longer kill the music.

What changed since b49:

  • Decode survives the loop: an MPLibrary task pumps the new portable cq_decring pipeline (compressed SPSC ring → minimp3 → PCM ring) every ~5 ms, preemptively — freezes never stop decode, short menu holds are fully seamless, and recovery from long ones is instant (no more machine-gun catch-up). Falls back to inline decode when MPLibrary is absent.
  • The event loop reads as the schedule it is: HandleEvent / ComputeSleep / TickCaret / TickDiagnostics extracted; the loop stays the only clock.
  • Radio physics documented, chaos removed: the deep-cushion/live-cut experiment ran its course in the field and is reverted — latency stays at the proven ~3 s. The conservation law (ear-lag == cushion) and the post-mortem live in design/CUSHION-PHYSICS.md.
  • Server pairing (recommended): design/SPEC-burst.md — Icecast queue-size ~2 MB stops slow-client disconnects during long UI freezes.

Requirements: Mac OS 9.x (PowerPC or emulated via UTM/QEMU), Open Transport, MPLibrary (ships with 8.6+; optional — inline fallback otherwise), a gopher-spot server on the LAN (default 10.0.100.112:70, configurable in Preferences ⌘,).

Files:

  • Casquinha-b55.bin — MacBinary-encoded application
  • Casquinha-b55.dsk — mountable disk image containing the app

Host-side test suite: 231 checks green. Debug telemetry opt-in via the Casquinha Debug marker file — see the README.

🤖 Generated with Claude Code