Skip to content

os8088 v1.0.20260808

Latest

Choose a tag to compare

@jggonz jggonz released this 09 Aug 03:41
· 2 commits to main since this release
ca82112

The disk stops being a floppy. os8088 installs onto a hard disk and boots from a partition, mounts every FAT partition it finds, and a document on any volume opens its own program when you double-click it -- so the system disk, the software disk and a 40MB drive are all just places files live. Three packages join: Missile Command from Atari's own 1979 sources, TameGram from Jason Page, and ModPlug Player, whose face is drawn from an invalidation mask and costs a tenth of the glyphs it used to. The File Manager gets Cut, Copy, Paste and drag and drop, with copies that stream rather than fit in memory. Mono text drawing is ~30% faster. And the kernel grew a debugging story it never had: a serial monitor that ships as a loadable driver, and an emulator-side debugger the guest cannot feel.

Highlights

Hard disks: install it, and boot what you installed (#61) — SPEC.md 52 lands in full. The kernel mounts every FAT partition it finds, an installer writes os8088 onto a drive, and the machine boots from that partition rather than from A:. Rung 0 is the controller ROM, which is what an XT actually has, and it is the rung QEMU cannot test at all: the verification is 86Box emulating st506_xt_st11_m, the calibration machine's own controller.

A document opens its program (#61) — ASSOC.DAT maps an extension to the package that handles it, and says where that package lives, so one mount of a volume's root seeds associations for the whole disk. Double-click a .MOD and the player opens it.

Missile Command, the twelfth package (#53) — ported from Atari's original W3MAIN / W3DSUP / W3COMN 6502 sources, "WWIII", project 23603, July 1979. The numbers are the arcade's and not re-invented. No kernel change and no heap claim.

ModPlug Player, the fourteenth package (#58) — the interface is the port; the replayer is this tree's own, because ModPlugPlayer's real playback is libopenmpt and no 8086 runs that. Every wake used to redraw 158 glyph cells, which at a millisecond a cell is 158ms of work inside a 55ms frame. Drawing is now gated on a word of dirty bits: measured over the same ten seconds of playback, 28,365 glyph cells down to 2,468 (11.5x), and 158 cells a frame down to 13.7.

TameGram, the thirteenth package (#55) — designed and originally implemented by Jason Page, credited in the app's own About panel. The port is a catalogue of the three mistakes this ABI invites: callbacks ending in retf (which assembles perfectly and hangs at the first paint), a reachable out-of-bounds grid write, and drawing outside the window because the gfx primitives clip to the screen.

Cut, Copy, Paste and drag and drop in the File Manager (#54) — with a recursive paste engine. A copy is a stream now, so file size is no longer bounded by memory, and a move inside one volume is three sector writes rather than a copy and a delete.

Note Pad stops walking the note, and ~30% off mono text (#54) — a keystroke draws the cells that changed instead of walking the document and repainting the band. Underneath it is font_run: the erase-and-letter pair as one operation, measured at 1.26x fewer instructions and 2.85x less framebuffer traffic on mono.

Two debuggers (#61) — DEBUG.DRV is a serial monitor that reads and writes memory and I/O on a running machine, and it is a driver, not a SERDBG= build: a knob kernel is a different binary, so the thing you debugged is not the thing that ships. Alongside it, a MartyPC-side debugger that costs the guest not one cycle and does what a guest-side stub cannot: breakpoints, single-step and real cycle counts.

86Box targets for the fast end of the range (#59) — make 486 and make pentium. Recording the trap they cost: 86Box silently replaces an unrecognised cpu_family rather than rejecting it, so a config saying pentium boots a 75MHz P54C while still claiming 133.

The repository stops shipping its own build output (#56) — 35 artifacts under build/ had been force-added past the gitignore. The toolchain is deterministic on purpose, so make reproduces any of those bytes exactly; the images live where a version can be attached to them. tools/setup-macos.sh (#57) installs the toolchain on a Mac.

Notes

  • The Disk window and the file dialog now list .. as the first row, and entries sort by name rather than the order they were written. Both disks carry SYSTEM/ and MEDIA/ folders now, and README.TXT ships on the system disk. If you have scripted anything against row positions, they moved.
  • os8088 mounts every FAT partition it finds — which means a partition it can see is a partition it can write to, so point the installer at a drive you are willing to lose.
  • The kernel image figure jumped from 52,718 to 78,950 bytes, and that is a change of shape rather than 26KB of new resident code. KERNEL.SYS now carries the resident image (54,272), the cold-start code that runs once and is then thrown away (22,016), and the boot overlay (2,662). Image + .bss — the kernel's own 64KB segment — actually fell, from 59,031 to 53,842.
  • The whole-kernel footprint is at its ceiling: KERN_SIZE is 90,112 bytes of a KERN_BUDGET of 90,112, with zero spare.

Sizes

KERNEL.SYS 78,950 bytes
image + .bss 53,842 of 65,536 (11,694 free)
source 112,792 lines across 35 kernel modules

The images

os8088.img boots in QEMU (1.44MB); os8088-360.img is the same kernel for 86Box and real XT hardware (360KB). apps.img / apps360.img are the software disk for drive B:. Downloads and checksums: https://os8088.com/download/