-
Notifications
You must be signed in to change notification settings - Fork 0
Reference Error codes seen
Added 15 September 2026 —
VrOpen returned 8=EIO. Seen when/chosen bootpathnames the SWIM3 floppy (/bandit/gc/swim3): the veneer builds ARC nodes for it, derives the pathmulti(0)other(0)other(0)— it has no SWIM3 case and falls through to "other" — and then the open fails with 8. On the ARC status ordering (ESUCCESS, E2BIG, EACCES, EAGAIN, EBADF, EBUSY, EFAULT, EINVAL, EIO, …) that isEIO, notENODEV. The ordering is corroborated by this project's own wall 22, whereVrOpen returned d= 13 =ENODEV.The distinction matters: the device is found and the I/O fails, even though Open Firmware reads the same drive correctly with
read-blocks. See the boot floppy plan §4.
This page owns: every failure this project has met, with what it actually turned out to mean on this machine.
A lookup table for "I have seen this message, what now". The meanings here are what each turned out to be in practice, which is not always what the message says.
| What you see | What it meant |
|---|---|
DEFAULT CATCH!, code=FFF00300 |
a data access fault in Forth — usually dump on memory the firmware has not claimed. Use alloc-mem
|
DEFAULT CATCH!, code=FFF00600 |
alignment — often a Forth word given the wrong stack |
<word>, unknown word |
the serial input dropped the head of your line. The FIFO holds about sixteen characters; type in chunks |
Program complete - please reboot |
the loaded program returned. The veneer or the loader exited; nothing NT-level ran |
can't find device |
an Open Firmware path that does not resolve |
| What you see | What it meant |
|---|---|
Bare hex ids (0000232e) |
BlInitResources failed — no message table, so ids print raw. The first failure is that, not what the ids say |
| 9006 / 9011 / 9040 | "computer disk hardware configuration problem" / "could not access disk partition tables" — in practice: a BlOpen failed, usually raw opens returning the whole disk |
| 9004 / 9017 / 9038 | "<winnt root>\system32\ntoskrnl.exe is missing or corrupt" — often the same cause as above |
The 'osloader' parameter does not point to a valid file |
argv is missing a named entry. The value may be present; the lookup is by name |
\WINNT\SYSTEM32\CONFIG\SYSTEM is missing or corrupt |
the hive failed structural validation. A header can be perfect and the file still short. Here the file was damaged after being written — a HAL DMA bug landing one file's data on NT's cached FAT page (STORY.md wall 50) |
| Code | Name | On this machine |
|---|---|---|
0x1E with P1 0x80000002
|
KMODE_EXCEPTION_NOT_HANDLED / STATUS_DATATYPE_MISALIGNMENT
|
a misaligned access — almost always the compiler folding byte accesses into a wide one |
0x50 |
PAGE_FAULT_IN_NONPAGED_AREA |
P1 is the referenced address, munged. Once: a corrupted TOC register |
0x0A |
IRQL_NOT_LESS_OR_EQUAL |
a bad pointer; once, a KDPC that wanted 8-byte alignment |
0x09 |
IRQL_NOT_GREATER_OR_EQUAL |
calling a driver's callback at the wrong IRQL |
0x7B |
INACCESSIBLE_BOOT_DEVICE |
the boot device symbolic link was never created — firmware, not NT |
0x4C |
FATAL_UNHANDLED_HARD_ERROR |
P1 carries the real status |
| Code | Name | Seen as |
|---|---|---|
0xC0000034 |
STATUS_OBJECT_NAME_NOT_FOUND |
"fatal error while initializing your computer's video" — \Device\Video0 was never created |
0xC0000102 |
STATUS_FILE_CORRUPT_ERROR |
a driver whose cluster chain is shorter than its recorded size. Long blamed on a truncated capture; the cause was the HAL's IoMapTransfer handing the SCSI chip a run spanning non-contiguous pages, so one file's data landed on the cached FAT page (wall 50) |
0xC000026C |
unable to load device driver | as above, reported through bugcheck 0x4C
|
0xC0000143 |
missing system file |
win32k could not load a display driver. The name it prints, DISPLAY_DRIVER.DLL, is a placeholder — no such file exists. Either no \Device\Video0 was created, or InstalledDisplayDrivers names one that cannot start (wall 51) |
0xC0000221 |
STATUS_IMAGE_CHECKSUM_MISMATCH |
a driver whose PE checksum does not match its contents — what you get for patching a .SYS on disk without recomputing it |
| What you see | What it meant |
|---|---|
| The hardware menu lists only IBM/Motorola machines | the OEM TXTSETUP.SIF patch was not applied before go
|
| "The file haleagle.dll was not copied correctly" | the CD directory record's length does not match the HAL. Re-run mkoem.py
|
| "Setup did not find a keyboard" | no ADB driver — or, once, a drive-letter bug wearing a disguise |
| "No valid system partitions" | Setup asks the firmware for one; it does not look. SYSTEMPARTITION was unset |
"…video" (0, 0xC0000034)
|
the miniport failed, or its resource claim was rejected |
Read down that last column and a theme emerges: on this machine the message very often names the symptom rather than the cause. "Could not access disk partition tables" was a firmware workaround applied to the wrong media. "Setup did not find a keyboard" was drive letters. A page fault in a Matrox driver was our own stack-frame bug.
The habit that pays is to treat the message as where NT noticed, not as what is wrong.
Corrections welcome — this wiki is edited directly, so nothing here has had a review. Repository · STORY.md · GPL-2.0-only
Start here
Theory
- Why NT on a Power Mac is hard
- Open Firmware
- ARC
- The veneer
- The NT boot chain
- The HAL contract
- The NT PowerPC ABI
- Little-endian PowerPC
- How Setup chooses a HAL
- The NT video stack
Machines
Emulator
- Getting Granny Smith
- Media you must supply
- Building the HAL
- Making an OEM CD
- Preparing disks
- Running text-mode Setup
- Capturing the installed image
- Booting the installed system
- Iterating on the HAL
- Checkpoints and deltas
Real hardware
Debugging
- The emulator shell
- Reading NT binaries
- Decoding a bugcheck
- When your instrumentation lies
- Debugging recipes
Reference
- HAL exports
- ARC environment variables
- The veneer's VrDebug bitmask
- Veneer patch catalogue
- Address and interrupt map
- Error codes seen
Project