Open-source project
skiselev/8088_bios avatar
skiselev/8088_bios

The 8088 BIOS is the firmware that lets a 1980s PC run without a floppy of drivers

BIOS for Intel 8088 based computers

591 stars77 forksAssemblyGPL-3.0

At a glance

What is it?
skiselev 8088_bios is an open source BIOS written in assembly for the 8088 based machines that hobbyists build and rebuild, covering the Micro 8088, NuXT, Xi 8088, Book8088 and Homebrew8088, with a separately versioned XT-IDE extension ROM and a long list of BIOS interrupt level fixes. The build is CMake and the images are committed to the repository.
Who is it for?
The 8088 BIOS earns its place for anyone assembling one of these machines, because the alternative is writing or patching BIOS by hand, and because the project ships a matrix of prebuilt images for the specific board and IDE configuration rather than one generic build that you have to adapt.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 94 days ago.
What is it written in?
Mainly Assembly, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Firmware for machines that exist because someone built one by hand

The project is an open source BIOS for the Micro 8088, the NuXT and the Xi 8088 systems, and it is written in assembly, which is the only realistic choice for a ROM of that era. The context matters, because these are not vintage machines that came with a BIOS. They are machines that hobbyists build from boards and processor cards, and the firmware is part of the design rather than a leftover. That reframes what the project is. A BIOS for a machine nobody has ever manufactured in volume is not a compatibility exercise, it is a design document in executable form, and the configuration options in it are the decisions the builder of the machine gets to make. The README's acknowledgements show the shape of the community behind it, with contributions of XT related fixes, an RTC add-on board, clock frequency configuration, keyboard and VGA initialisation fixes, documentation work, a video update for FreeDOS compatibility, and Homebrew8088 processor card support, spread across a list of named individuals who tested the code and reported bugs.

A matrix of images, because the IDE configuration varies

The binaries table is the most useful part of the README, and it exists because there is no single image that fits. There are separate files for the Micro 8088, the Xi 8088 version 2.0, Sergey's XT version 1.0, the Book8088, the Homebrew8088 V40 processor card and the IBM XT, and the last of those is annotated as not tested and a 16 kilobyte ROM. Within a machine the images differ by IDE configuration, with one variant carrying no IDE extension at all, one with the XUB extension configured for the XT-CF-Lite at port 320h, and several with the XT-IDE at port 300h, including one optimised for the NEC V20. The flashable .bin files for the Micro 8088, the Xi 8088 and the Homebrew8088 are for use with the xiflash utility, while the .rom files are for direct programming. The reason there are so many is a real constraint: the XUB extension has to be configured for the exact card and I/O port, and getting it wrong means the machine boots and then cannot see the drive.

The XT-IDE extension ROM is versioned on its own

The tree contains a directory for the XT-IDE extension ROM, named with a version suffix, and the release notes for version 1.0.0 record an update of that extension BIOS to a specific revision. This is a small detail that says a lot about how the project is maintained. The extension is a separate piece of code with its own upstream, and rather than freezing a copy inside the BIOS source, the maintainer tracks the upstream revision and bumps it deliberately. For a user, that means the extension in your image is a known revision, and for a builder who wants the newest one, the directory is where they would look. The same release also moved the build to CMake, and made the project build ROM images for all the supported machines and configurations, which is the change that produced the binaries table you see today.

Setup options that only make sense on a machine you built

The configuration options exposed by the BIOS are unusual, and reading them tells you what kind of hardware the author is dealing with. There is a setup option for configuring wait states for the Faraday FE2010A and the Proton PT8010AF chipsets, and a setup option to disable the power-on memory test, which speeds up the boot process. There is also a setup configuration option that a contributor added for configuring the CPU clock frequency, and the BIOS performs chipset detection for the Faraday FE2010 and the FE2010A and the Proton PT8010AF, with memory refresh disabled on the latter two. The floppy BIOS was ported from a separate multi-floppy BIOS extension project. None of this would make sense on a machine with a standard chipset, and all of it is the kind of detail that a builder of these boards needs, which is the argument for the project carrying its own firmware rather than relying on anything generic.

The 1.0.2 fix list reads like a post mortem for a 40 year old BIOS

The release notes for version 1.0.2 are the best documentation the project has, because they describe the exact BIOS interrupts and their behaviour. The list covers a fix to the print screen function through interrupt 05h, two fixes to the ROM BIOS extension scan, one an infinite loop when an extension has a size of zero and the other a case where two kilobytes were skipped when an extension has an incorrect checksum, and a fix to the teletype output of interrupt 10h function 0Eh so that it writes to the current video page instead of page 0. There is a fix to the read and write of the modem control register so that the MCR is used instead of the line control register, a fix to the typematic rate in interrupt 16h so the repeat rate is set properly, and a fix to the scaling factor in interrupt 15h where the 1:1 factor was never applied and the 2:1 factor was always used. The real time clock control register flag bits were shifted by one, the floppy read, write and verify functions set the wrong step rate for 1.44 megabyte disks, the chipset detection and clock estimation routines had their push and pop order wrong, and the parallel printer detection did not preserve the DI register.

Building with CMake, and a repository that ships its own binaries

The build system is CMake, with a CMakeLists.txt at the root and the source under a src directory, and the README links separate build instruction documents for Linux and for Windows, which is the practical detail for anyone who wants to modify the code rather than flash a released image. The tree also contains a copyright template file, which is how a licence header gets applied consistently to assembly sources, and a binaries directory with the built images committed, which is the opposite choice from most projects and a good one here, because the artefacts are the thing most users actually need. The maintenance picture is slightly unusual, since the release notes describe a version 1.0.2 with a substantial list of fixes, while the newest tagged release listed is 1.0.1 from December 2025, with 1.0.0 from October 2023 and 0.9.9 from February 2023 before it. The last push was on 2026-07-21, so work continues on the default branch, and the version 1.0.1 notes are the ones that added Homebrew8088 V40 processor card support, chipset detection for the Faraday FE2010, and the disabling of the boot sector signature check that allows booting older Minix versions.

Editorial conclusion

The 8088 BIOS earns its place for anyone assembling one of these machines, because the alternative is writing or patching BIOS by hand, and because the project ships a matrix of prebuilt images for the specific board and IDE configuration rather than one generic build that you have to adapt. It is the wrong choice for a modern PC, obviously, and it is the wrong choice if you need a BIOS with a graphical setup, since the configuration options here are a small set of switches rather than a menu system. Verify three things before you flash anything: which of the committed images matches your board and your IDE card and its port, since the XUB configuration varies across the table and a mismatch means the drive is not found, whether the build instructions for your platform match the toolchain you have, and whether the version you flash corresponds to the release notes you are reading, since the notes describe a 1.0.2 while the newest tag is 1.0.1. The licence is GPL-3.0, the last push was on 2026-07-21, and the binaries directory means you can start without building anything.

Frequently asked questions

Which computers does the 8088 BIOS support?

The project targets the Micro 8088, the NuXT, the Xi 8088, Sergey's XT, the Book8088 and the Homebrew8088 V40 processor card, and it also provides an IBM XT image that is annotated as not tested and as a 16 kilobyte ROM.

Why are there so many BIOS binary files?

The images differ by machine and by IDE configuration, with variants carrying the XUB extension for the XT-CF-Lite at port 320h, variants configured for the XT-IDE at port 300h including one optimised for the NEC V20, and images with no IDE extension at all. Flashable .bin files are for the xiflash utility and .rom files for direct programming.

What configuration options does the 8088 BIOS expose?

There is a setup option for wait states on the Faraday FE2010A and Proton PT8010AF chipsets, an option to disable the power-on memory test to speed up booting, a CPU clock frequency configuration setting, and chipset detection for the Faraday FE2010, FE2010A and Proton PT8010AF.

How do I build the 8088 BIOS?

The build uses CMake with the source under the src directory, and the README links separate build instruction documents for Linux and for Windows. The binaries are also committed to the repository, so flashing a released image needs no build at all.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. README
  4. Releases
  5. skiselev/8088_bios on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/skiselev-8088-bios.svg)](https://hysenlabs.com/projects/skiselev-8088-bios)

Was this useful?