# SSDTTime: a menu-driven generator for macOS ACPI patches

> SSDTTime is a small Python script that writes the SSDT tables a Hackintosh needs, one guided menu at a time, and can dump the system DSDT for inspection. It covers a dozen named patches, from the fake embedded controller to the reserved memory table, and it runs from a terminal, a double click or a batch file depending on the platform.

**corpnewt/SSDTTime** — SSDT/DSDT hotpatch attempts.

- Repository: https://github.com/corpnewt/SSDTTime
- Stars: 1,295 · Forks: 181
- Language: Python
- License: MIT
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/corpnewt-ssdttime

## A table generator dressed as a script

SSDTTime describes itself as a simple tool designed to make creating SSDTs simple, and that phrasing is the whole design brief. The project is a single Python script with a small collection of helper scripts beside it. The top level of the repository contains SSDTTime.py, SSDTTime.command and SSDTTime.bat for the three supported platforms, a matching set of PatchMerge files, and a Scripts directory holding the generated helpers.

The list of supported SSDTs is the feature list, and it is longer than the name suggests. There are entries for the HPET timer, the embedded controller, USB power properties, the CPU plug type, the PMC device for native 300-series NVRAM, the AWAC clock and RTC, USB root hub reset, PCI bridges, laptop backlight, the OS identity table, the DMAR memory table, SMBus compatibility, and an IMEI bridge.

Two of those are not SSDTs at all in the strict sense. The DMAR entry removes reserved memory regions from the DMAR table, and the IMEI bridge entry defines an IMEI device. The naming is loose, but the list makes the scope clear: this is a toolbox for making a non-Apple board satisfy what macOS expects from it, and each entry is a self contained patch that can be applied on its own.

## The patches and the symptoms they address

Reading the list tells you which hardware problem each patch exists to solve, and that is the most useful part of the documentation.

The HPET patch exists to patch out IRQ conflicts. The EC patch supplies an OS-aware fake embedded controller, with separate laptop and desktop variants, which is what lets a board without a real EC boot far enough to be useful. USBX provides generic USB power properties, and the USB-Reset entry returns a zero status for detected root hubs so that the hardware can be queried at all. PLUG sets plugin-type = 1 on CPU0 and PR00, and PMC adds a missing PMCR device for native 300-series NVRAM.

The rest are more specialised. AWAC disables the AWAC clock and enables or fakes the RTC as needed. Bridge creates missing PCI bridges for a passed device path, which is what a GPU passed through to a virtual machine needs. PNLF sets up a PNLF device so that laptop backlight control works. XOSI renames and patches the OS identity table to return true for a range of Windows versions, and it also checks for an OSID. SBUS-MCHC defines an MCHC and a BUS0 device for SMBus compatibility.

The practical consequence is that the tool does not decide for you. It gives you a menu of named patches, and you pick the ones matching the hardware you own. Nothing in the script is a general solution, and the naming in the list is the documentation.

## Three launchers, one behaviour

Running the tool is deliberately undemanding. On Linux you launch SSDTTime.py with any somewhat recent version of Python, either from a terminal window or by running the file directly. On macOS you launch SSDTTime.command, either from a terminal or by double clicking it. On Windows you launch SSDTTime.bat the same two ways.

The three entry points are:

```bash
SSDTTime.py
SSDTTime.command
SSDTTime.bat
```

The platform specific wrappers exist so that the script can be double clicked on a desktop, which is the normal way a macOS user or a Windows user meets it. The Python file is the program itself and the other two are thin launchers around it.

There is no package to install and no dependency to resolve beyond a Python interpreter. The tool also carries its own copy of the utilities it needs, so the credits section names the author of the script, the contributor who made small improvements, and Rehabman and Intel for iasl, the disassembler used to work with ACPI tables. That last credit matters if you want to understand what the generated output contains, because iasl is the tool that turns the binary table back into readable assembly.

## Dumping the DSDT is the part that generalises

On Linux and Windows the script can dump the system DSDT. This is the capability that makes the tool useful even if you never generate a patch, and it is the part that generalises beyond macOS hardware.

The DSDT is the table that describes your machine to the operating system, and when macOS refuses to boot or a device misbehaves, the first question is what that table actually says. A tool that will hand you the table is a starting point for troubleshooting on any platform, not only for the patches the menu offers.

The PatchMerge files in the repository, in Python, command and batch form, mirror the same three platform story. Their name suggests they combine or apply tables rather than generate new ones, which is the part of the workflow that comes after generation, when you have more than one SSDT to place in the right directory with the right name and the right permissions.

The README does not document the output location, the file naming convention, or the order in which several generated tables must be loaded. That is the gap to be aware of, and it is why keeping the original table and working on one patch at a time is the safer way to use the tool.

## DMAR and XOSI carry the side effects

Two entries on the list deserve more caution than the rest, because they alter behaviour that other software depends on.

Removing reserved memory regions from the DMAR table is a memory reservation change. The patch exists because certain reserved regions block hardware access, and the tool lets you remove them. Reserved memory also exists to protect devices that an operating system should not touch directly, and the operating system no longer believes those regions are reserved once the table is patched. A machine with the table edited is a machine where device access policy is being decided by something other than the kernel.

XOSI is a related case. The patch renames and modifies the OS identity table so that it reports true for a range of Windows versions, and the tool also checks for an OSID value. This is a compatibility shim: hardware and driver stacks branch on the reported OS version, and the patch makes that branch go the way the hardware needs. It also means the machine lies about which OS it is to code that asks.

Neither of these is a reason to avoid the tool. Both are reasons to apply one patch, boot, confirm the symptom is gone, and know exactly which table you changed so you can put it back.

## Narrow hardware scope and a quiet release history

Two of the patches name specific hardware generations, and they are a reminder of how narrow this work is. The IMEI bridge is only needed on SNB with 7-series or IVB with 6-series, which are Intel platform generations from the era when Hackintosh builds were most common. The PMC patch targets native 300-series NVRAM. A tool that covers 300-series NVRAM and Sandy Bridge era boards is not aimed at the newest hardware.

The project is MIT licensed, the primary language is Python, the default branch is master, and there is no homepage and no GitHub releases. The repository is not archived and the last push was on 2026-10-11, so the script is still being touched even though there is no tagged version to point at. For a tool that writes files into system directories and boots a machine differently afterwards, a fixed version is worth more than a recent commit, and this project does not offer one.

The code is small enough to read in full. For anyone who needs to know exactly what a given patch emits, the script and its Scripts directory are the reference, and the iasl credit means the output can be disassembled and compared against the DSDT you captured before making any change.

## Conclusion

SSDTTime earns a place on a Hackintosh builder's machine because it removes the guesswork from hand writing ACPI tables and gives each patch a name that maps to a symptom. It is a generator rather than a debugger, so it will not tell you which table your hardware actually needs, and several of its patches, DMAR and XOSI among them, change behaviour that other software depends on. Before running any of them, read the generated AML in the output directory and compare it with the DSDT you dump, and keep a copy of the original table so you can undo it.

## FAQ

### How do I run SSDTTime on macOS?

Launch SSDTTime.command, either from a terminal window or by double clicking the file. The macOS entry point is a wrapper around SSDTTime.py, so the same menu is available either way.

### Can SSDTTime dump my DSDT on Linux or Windows?

Yes. The documentation states that on Linux and Windows the tool can be used to dump the system DSDT, which is useful for inspecting what your firmware reports independently of the patches it generates.

### What patches does SSDTTime generate?

The supported list covers SSDT-HPET, SSDT-EC, SSDT-USBX, SSDT-PLUG, SSDT-PMC, SSDT-AWAC, SSDT-USB-Reset, SSDT-Bridge, SSDT-PNLF, SSDT-XOSI, DMAR and SSDT-SBUS-MCHC, plus an IMEI bridge. Each entry changes one specific table or device, and the tool does not choose between them for you.

### Does SSDTTime need any extra tools installed?

No installation step is described beyond having a somewhat recent Python version. The credits name Rehabman and Intel for iasl, the disassembler used to work with ACPI tables, which indicates the tool carries what it needs to handle the tables it produces.

## Sources

- [corpnewt/SSDTTime on GitHub](https://github.com/corpnewt/SSDTTime)
- [Issues](https://github.com/corpnewt/SSDTTime/issues)
- [License: MIT](https://github.com/corpnewt/SSDTTime/blob/master/LICENSE)
- [README](https://github.com/corpnewt/SSDTTime/blob/master/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/corpnewt-ssdttime
