/cregfix

Fix for a CSM BIOS bug affecting old OSes

Primary LanguageAssemblyBSD Zero Clause License0BSD

CREGFIX
=======

CREGFIX is a small program that works around an issue of many modern CSM BIOS
implementations where certain control register bits are left "dirty", thus
causing issues when trying to run legacy operating systems such as Microsoft
Windows 9x (see "While initializing device VCACHE: Windows protection error"
issue).

This program can be built using "nasm":

  nasm -DCREGFIX_BOOT cregfix.asm -fbin -o cregfix.img
  nasm -DCREGFIX_COM cregfix.asm -fbin -o cregfix.com

but included in this repository is prebuilt "cregfix.{img,com}" files.

The ".com" version of CREGFIX is a DOS-compatible .COM executable which can be
added to the beginning of the AUTOEXEC.BAT file and it will sanitise the
control register bits every time DOS boots up.

Alternatively, the ".img" version of CREGFIX is a PC booter floppy disk image
that will sanitise the control register bits before any OS runs.

Write this floppy disk image file to a USB stick or a real floppy disk using a
utility like "dd" or "cat".
On Windows, a utility such as Rufus (in dd mode!) or balenaEtcher should work.

The written disk can then be attached to the target PC, booted from, and it
will chainload the first hard drive after sanitising the control register bits.

If using a USB drive, make sure that the BIOS is emulating a floppy disk drive.

Make sure to tell the BIOS to boot from the USB/floppy drive first in order to
automate the process of running the CREGFIX chainloader.