os8088 v1.0.20260730
os8088 gets sound. One API covers three generations of PC audio -- the PC speaker, the AdLib, and the Sound Blaster playing and recording in the background -- and two new programs on the software floppy use it.
One sound API, three cards, five capability tiers (#26)
A program does not ask for a Sound Blaster. It asks for a tone, an FM note, or a stream, and a router picks the best device present. The layer is a table of drivers, each declaring what it can do -- tone, FM, background PCM, exclusive PCM, PCM in -- and five API slots at 0x0078 that dispatch through it. The PC speaker is always row zero, so every machine can make a sound; an AdLib adds nine-voice FM; a Sound Blaster adds streaming playback and recording that run off their own interrupt while the GUI keeps going. Ownership is a single owner with priority steal, and every grant is made inside one interrupts-off window, so a timer tick can never observe a half-made one. A program that dies with a note held is silenced by its own teardown.
The PC speaker plays sampled sound (#26)
The speaker is a one-bit output, so a clip is played as pulse-width modulation: one PIT write per sample, and the cone integrates the pulse train. Timing comes from reading the scheduler's own channel 0 -- latch-and-read, never a write, so the clock the whole system runs on is untouched -- and a sample that arrives late is dropped by deadline resync rather than played slow. It is exclusive by nature: the clip owns the CPU while it runs, so a mouse click aborts it, and the aborting click is drained rather than falling through to whatever is underneath. An unplayable rate is refused with an error rather than quietly clamped.
Piano and Recorder, on the software floppy (#26)
PIANO is an octave and a half of clickable keys with a scrolling mini-staff, a 300-note sequence recorder, a REPLAY button that reproduces your original timing, and three built-in songs. RECORDER is a wave recorder and player: it captures to a 5-second buffer through a Sound Blaster, draws the waveform, and plays back through whichever device the router picks -- and on a machine with no capture hardware the REC button is grayed and says why when clicked, so it stays a usable player. Both are ordinary packages that reach all of this through the public API table, which is the point: nothing about the sound layer is reserved for the kernel.
The Task Manager draws memory (#25)
Clicking in the Task Manager flips it between the load graph and a new memory view: the RAM line, a map of the 640K conventional space, and a map of the kernel's own segment where every loaded package's region is drawn in its slot's dither pattern, matched by a legend square on that package's row in the process list. The sampler keeps running while you are in the other view, so flipping back shows an unbroken history. The process list is re-columned as NAME / ADDR / SIZE to go with it.
A Sound page in the Control Panel (#26)
It reports which devices were actually found, lets you pin the tone route to the speaker or the AdLib -- refusing the AdLib when no probe found one, the same way the Display page refuses double buffering on a small machine -- carries the exclusive-clips checkbox with its trade-off stated in prose, and has a Test button that plays a synthesised 1 kHz clip through the public API. Underneath it are the emitted and resync counters, which is how the speaker's timing was measured in the first place.
What it cost, and what is left
The kernel grew from 16,611 bytes to 25,136 and its segment footprint from 16,927 to 23,358, leaving 21,698 bytes of headroom below the 0xB000 line where loaded programs begin -- the sound layer spent about a quarter of what the memory release before it bought. Nothing left conventional memory that a 256KB machine needs, and a machine with no sound hardware behaves exactly as it did: the drivers publish themselves only after a probe succeeds, and the speaker row is the one that is always there.
Worth knowing
- The software floppy now holds five packages, not three. Drive B: lists MINES, HELLO, NOTEPAD, RECORDER and PIANO.
- To hear anything past the speaker in QEMU you have to give it the hardware: add
-device adlibfor FM and-device sb16for streaming and recording, each with an-audiodev. Without them the probes correctly report the cards as absent and the Control Panel's Sound page refuses to route to them. - Recording is Sound Blaster only, and QEMU never starts its input DMA against a file audiodev -- a capture there always ends on the watchdog, which RECORDER reports honestly as REC STOPPED (WATCHDOG) rather than pretending it worked. The live capture path is owed to real hardware, as is the whole DSP-below-2.00 branch.
Since v1.0.20260729
- The sound layer: speaker, AdLib, and Sound Blaster under one API (#26)
- Task Manager memory view + the sound layer plan (#25)
The images
os8088.img + apps.img are the 1.44MB pair for QEMU; os8088-360.img + apps360.img are the 360KB pair for 86Box and period hardware. The boot disk goes in drive A:, the software disk in B:. Checksums and the exact command line are on the download page: https://os8088.com/download/