os8088 v1.0.20260804
Three programs arrive at once -- Solitaire, Arkanoid and an FT2-style MOD player -- taking the software disk from seven packages to ten, which is also why the disk now has folders. Each of the three left something behind in the kernel, because a card game that drags a fan of cards, a game whose ball has to keep moving between keystrokes, and a player that has to keep a sound card fed while it redraws a full screen all needed something the API did not yet offer. The application menu bar gained the one cell it was missing: an About item under the program's own name, where a Macintosh has always kept it.
Solitaire (#44)
Klondike, ported from the same fork that contributed Paint: three-card draw, a stock that recycles, and the full set of tableau and foundation moves. It is the one package that drags the way the window manager does -- a held card is an XOR outline that erases before the drawing lock drops, so a hand of cards costs a few inverted strips per timer tick and nothing repaints until you let go. Card faces are drawn from primitives, but the backs are blitted: the lattice is rendered once into a packed 4bpp image and every later back is a single gfx_blit4 call instead of hundreds of far calls across the package boundary. On a Hercules or CGA machine the red pips go hollow rather than red, because the red index reduces to white and a filled pip would vanish into the card face -- the shape carries the color when the color cannot.
About moved under the application's name (#44)
The menu bar has carried the active application's name since the menus became per-app, but the name was only a label. It becomes a real one-item menu -- About <Name> -- the moment a window registers a handler through the new OSAPI_ABOUT_SET call, which is where a Macintosh application has always kept its About box. The cell is appended to the bar rather than inserted, so every application menu keeps the index it had and nothing downstream of the dispatch had to change. Locator never grows one: its About is already in the chip menu, where the system's own About belongs.
Arkanoid (#45)
A brick-breaker, and the first package whose game loop is its worker task -- one frame per tick of sleep, running whether or not you touch the keyboard, because a ball has to keep moving between keystrokes. Everything the UI task does is set a word the worker reads. Two things it discovered are worth knowing before writing another real-time program here. The BIOS keyboard has no key-up event, so a held arrow key has to be inferred from typematic repeat: each press refills a deadline that must outlast the roughly half-second typematic delay, or a held key stalls and reads as a dropped keyboard. And OSAPI_SND_TONE turns out to be safe to call from a worker -- the kernel stamps the grant with the running task's own instance when no callback is being dispatched -- which the SDK had never said.
The software disk has folders (#45)
Ten packages is more than a flat 32-entry root wants to show at once, so the apps disk now keeps them in two folders: APPS for the tools and GAMES for the games, and nothing else in the root. The Disk window already knew how to walk a subdirectory -- it grew that with the FAT write path -- so this is a change to what is on the disk rather than to the file manager. The visible consequence is that a program is now two double-clicks away instead of one, and the Folder menu's Up One Folder and Root Folder are how you get back.
Tracker, an FT2-style MOD player (#46)
A four-channel ProTracker MOD player with a FastTracker II screen: pattern view, live VU bars, and a song that keeps playing while you scroll. The window it opens is only a splash card -- any key or click takes it fullscreen, F toggles and Esc comes back. The audio is the interesting half: the UI task opens and closes the stream, and the worker mixes and feeds it, handing the sound card a 16KB ring buffer that is refilled a half at a time rather than a clip that has to be complete before it starts. Playback runs at 11, 22 or 44 kHz, and there is an XT mode sized for what a 4.77MHz 8088 can actually mix in real time. It ships with BEVERLY.MOD, a 116,085-byte module -- which is what forced the next item.
What the Tracker needed from the kernel (#46)
Three amendments, all of them things the player could not fake. Ring-mode streams: the sound stream verbs learned an open flag that makes a grant a circular buffer with free-running counters, so a stream can be fed forever instead of being staged whole up front -- and the feed verb is safe to call from a worker task. Wide rates: a DSP 4.00 or better now opens up to 44,100 Hz instead of stopping at the 22,222 Hz the timing-constant range allows. OSAPI_FILE_READBIG: the ordinary read call takes a 16-bit byte count, so any file of 65,536 bytes or more failed outright; BEVERLY.MOD is 116,085. The API table went from 57 far slots to 62, all appended.
Notes
- Packages built for the previous release still run. The API table grew from 57 slots to 62 and every new one is appended, so nothing was renumbered and the format is still v3.
- Programs are two double-clicks away now. The software disk's root holds only the APPS and GAMES folders. Minesweeper is GAMES then MINES.O88; the Note Pad is APPS then NOTEPAD.O88. Folder > Up One Folder and Folder > Root Folder navigate back out.
- The Disk window's size column is 16-bit and clamps at 65535, so BEVERLY.MOD lists as 65535 rather than its real 116,085 bytes. Only the display is clamped -- the file loads in full.
- Sound hardware is what decides how the Tracker sounds. 44 kHz needs a Sound Blaster 16 or another DSP 4.00 part; older cards top out at 22 kHz, and the XT mode exists for machines that cannot mix faster than they can play.
- Recorded as unexercised: 86Box -- the XT targets and the three AT-class machines -- and the 256KB floor, where the arena is empty and no package can load at all. QEMU is the only environment run routinely. Verified there: all ten packages load from their folders, Solitaire deals and drags, Arkanoid plays with sound from its worker, and the Tracker loads BEVERLY.MOD through readbig and plays it fullscreen. The XT mode and the 44 kHz path were not verified on period hardware.
Size
The kernel is 47,617 bytes (image + far code), and 47,681 of its 65,536-byte segment counting .bss -- 17,855 free on the binding guard, up from 45,595 / 45,586 last release. 58,243 lines of assembly across 31 kernel modules.
Files
All four images were booted before publishing. Download them below, or from https://os8088.com/download/.
| file | what it is |
|---|---|
os8088.img |
Boot disk, 1.44MB geometry (18 spt). For QEMU. |
os8088-360.img |
Boot disk, 360KB geometry (9 spt). For 86Box and real XT hardware. |
apps.img |
Software disk, 1.44MB: FAT12, ten packages in APPS and GAMES. Not bootable. |
apps360.img |
Software disk, 360KB. Same ten packages, different geometry. |