Skip to main content

tbxi: the Mac OS Toolbox Imager

tbxi is a command-line Python script to help with the inspection and modification of Macintosh Toolbox ROM images. These images contain varying amounts of high-level Mac OS code and low-level boot code.

tbxi has two modes, both with a --help option:

  • tbxi dump converts a ROM image to a tree of self-describing text files and small binaries.
  • tbxi build rebuilds the image as accurately as possible.

In between running the two commands, the directory tree can be modified. The text-file formats produced by tbxi dump are designed to be easily editable using text editors and scripts.

Patch Library

This repository contains known-good scripts to patch the ROM, for example to add Mac mini G4 support to Mac OS 9:

https://github.com/elliotnunn/tbxi-patches

Patches can be applied to a dumped directory or the the ROM file itself.

Background

"OldWorld" (pre-USB) Macs contain a real physical ROM. "NewWorld" Macs (iMac and later) have an unusual "ROM in RAM" arrangement, which retains compatibility with the ROM-based architecture of the Mac OS while easing software updates. An almost-complete legacy ROM image is loaded from the "Mac OS ROM" file in the System Folder (type code 'tbxi'), leaving only a minimal Open Firmware "Boot ROM" in the hardware.

During the progression from 68k ROMs to NewWorld PowerPC ROMs, multiple layers of wrapping and abstraction were added. These are reflected in the multi-level output of tbxi dump:

  • Open Firmware bootinfo file (Mac OS ROM => Bootscript textfile + binaries)
  • structured binary of "Parcels" (Parcels => Parcelfile textfile + binaries)
  • 4 MB PowerPC ROM (MacROM => Configfile-1 textfile + binaries)
  • 3 MB 68k ROM (Mac68kROM => Romfile textfile + binaries)

Bugs

Some very quirky PowerPC OldWorld ROMs (e.g. PowerBook 1400/2400) cannot be rebuilt correctly. NewWorld ROMs of version 2 or later (Sawtooth G4) will be slightly different due to an uninitialised buffer in the original build process.

ROM images predating before the "SuperMario" ROM (Quadra 660AV/840AV) are not supported, excluding most 68k Mac ROMs.

The tbxi dump format is likely to change. If you keep a collection of dumped ROM images to peruse, re-dump them regularly.

Contributing

Yes please! Bug reports, suggestions and requests are welcome. Open a GitHub pull request or image, or get in contact via the email on the PyPI page.

All are welcome on our retro Mac-hacking mailing list:

https://lists.ucc.gu.uwa.edu.au/mailman/listinfo/cdg5

Metadata

Release files for tbxi 0.13

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tbxi 0.13
File Size Uploaded Provenance
tbxi-0.13.tar.gz 36.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for tbxi 0.13
File Interpreter ABI Platform
tbxi-0.13-cp39-cp39-macosx_10_9_universal2.whl CPython 3.9 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64) Details

Total release size: 82.4 kB

Release files / tbxi-0.13.tar.gz

Download URL tbxi-0.13.tar.gz
Size 36.6 kB
Tags Source
SHA-256 checksum
How to use checksums
05b62d5ef4b606400aa7fe0ab3a3235f260df8f92081d943b678ee05e5fa20e3
BLAKE2b-256 checksum
How to use checksums
f82c938b057afa559da83b11e4cefbbf3e0b45909b2fbb3ead5cc0f614fe875d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / tbxi-0.13-cp39-cp39-macosx_10_9_universal2.whl

Download URL tbxi-0.13-cp39-cp39-macosx_10_9_universal2.whl
Size 45.7 kB
Tags CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
a2ca9e35dbca0eefe76ec39a3a2e4cffdc2b2302d2b5d2e0d2ebb747bc19605e
BLAKE2b-256 checksum
How to use checksums
2c4f4086d2e45f008c383e5f952565ef50fe706fe8f3cb6850802514496c2768
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Security for tbxi 0.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page