ZX Spectrum 1-Bit Sound Workshop
A browser-based workshop for ZX Spectrum musicians to compose 1-bit music, hear it as they work through processor-cycle overruns, and export code for real hardware.
People writing soundtracks for early home computers such as the ZX Spectrum must control the beeper using very little processor time. A melody that is only slightly too complex can take computation away from game logic. In the browser, creators choose a target machine or emulator configuration, then arrange notes, rhythms, and timbre changes on an auditionable timeline.
The timeline’s smallest unit is not a conventional musical beat, but the processor cycles required to execute instructions. When a creator drags a rhythm segment, the interface immediately shows how many cycles it consumes, how the beeper will toggle, and where character movement or screen refreshes may be blocked. Sections that exceed their budget become apparent both in the waveform and by ear.
Game programmers can freeze a rhythm segment into a machine-code phrase, along with its required cycles and calling conditions. When the musician revises the melody, the system flags the code sections that must be re-exported. A project page can also play emulator output beside real-hardware recordings, gathering differences in distortion across machines.
The first release supports mono beepers, short looping music, and assembly-code exports that can be embedded directly. Its purpose is to let creators work through hardware constraints while listening; complex multi-chip audio arrangement can come later.
Why now
A September 5 experimental article broke beeper writes, delays, and pitch drift down to individual instruction cycles. S1 When observed on September 9, it ranked 16th in Hacker News’s new submissions feed with 91 points and 26 comments, exposing more retro developers to the problem of sound and game logic competing for cycles. S2
Target user
The core user writes beeper music for ZX Spectrum 48K games or demos. The problem usually appears once a melody plays but must fit inside the game’s main loop, where each phrase competes for cycles with input, character movement, and screen updates. The musician and programmer may also be different people, so they need a reproducible cycle breakdown, not just an audio file.
Minimal entry point
Start in the browser with the ZX Spectrum 48K and its mono beeper. Use JSSpeccy 3's WebAssembly architecture to run the Z80, display, and audio emulation. S3 The editor handles only short loops, note lengths, and port-toggle events. After every edit, it records instruction T-states, port writes, and frame boundaries. Programmers enter the cycle budget manually at first rather than having the tool infer the full game load. Use sjasmplus for export, producing readable assembly, machine code, and a cycle report. S4 The first version does not support multi-chip arrangements or promise identical sound across emulators and every real machine.
Punching above its weight
Early users cluster in the ZX Spectrum retro-development community, demoparties, and the 1-bit music scene. Publish several downloadable projects that pair the same phrase’s cycle timeline with emulator output and real-hardware recordings. Then submit exported short loops to existing open-source games or competition entries to create verifiable examples. Import templates for specific engines will attract trials more effectively than broad claims about browser-based composition.
Competitors & gaps
- BeepolaGoogle
- Beepola already supports ZX Spectrum 48K beeper music through a traditional tracker grid. It includes several historical and modern playback engines, and can compile songs and export assembly code. For users comfortable with patterns, engines, and the Z80 toolchain, this is already a mature workflow. Its core abstraction is still notes, effect columns, and playback engines—not instruction-cycle visibility by section. Creators generally compile first, then use an emulator or the game itself to determine whether playback causes slowdowns. The effect of individual phrases on the main loop, screen refresh, and input scanning is not shown alongside the sound on one timeline. The opening is to make cycle budgets an editable musical constraint, then include calling conditions and affected code sections in the export to reduce back-and-forth between musicians and programmers.
- BintrackerGoogle
- Bintracker is a programmable chip-music workstation supporting multiple platforms and engines, including the ZX Spectrum beeper. It uses MAME as its emulation backend and can export binaries, assembly, and ZX Spectrum TAP files. Its plugins, MDAL abstraction, and built-in command environment suit experimentation with new engines. But it remains centered on a general-purpose tracker and engine adaptation, with substantial configuration and extension capabilities. It does not directly map the Z80 cycles consumed by a phrase to a game’s main loop. Nor can musicians see, while dragging a rhythm, where beeper transitions may block screen updates. Its broad platform coverage leaves room for a focused 48K mono workflow. This product could combine auditioning, cycle diagnostics, and embeddable code in a narrower flow. The trade-off is that it would initially offer far fewer engines and less arranging freedom than Bintracker.
How it makes money
Sell a one-time personal license that includes the browser editor, offline projects, and assembly export. Offer annual upgrade packs for real-hardware comparisons, shared team projects, and support for additional machines.
The case against
Instruction-by-instruction cycle previews can create false certainty. Memory contention, interrupts, code load addresses, and self-modifying code can all alter real timing. If the editor measures only isolated phrases, playback may still stutter or drift out of tune once embedded in a game. Raising confidence requires integrating full program snapshots and calling context, which quickly increases engineering complexity. Real-hardware recordings also vary with machine revision, the audio-capture chain, and volume processing, making the source of differences difficult to determine automatically. The audience is narrow, and many experienced users already have a tracker, assembler, and emulator workflow. They will not switch for a prettier timeline unless cycle diagnostics clearly reduce testing round trips.