The PowerPC is the main processor behind Power Macs.

# General Notes

All instructions are 32 bits wide, regardless of whether the PowerPC is in 32-bit or 64-bit mode.

Code execution generally begins at 0xFFF00100, which the reset exception vector.

# BATs

The 601 BATs are emulated by the OpenFirmware.

# TLBs

Up to 128 instruction entries and 128 data entries can be stored at a time.

# Processor Revisions

| Model         | PVR Number  | Notable Aspects             |
| :------------ | :---------- | :-------------------------- |
| 601           | 0x00010001  | Supports POWER instructions |
| 603           | 0x00030001  | Software-controlled TLBs    |
| 604           | 0x00040103  | Ability for Multiprocessing |
| 603E          | 0x00060101  |                             |
| 750 (G3)      | 0x00080200  | Built-in L2 data cache      |
| 7400 (G4)     | 0x000C0101  | AltiVec/VMX support added   |

# Registers

| Register Type                     | Number                 | Purpose                                               |
| :-------------------------------- | :--------------------- | :---------------------------------------------------- |
| General Purpose (GPR)             | 32                     | Calculate, Store, and Load 32-bit fixed-point numbers |
| Floating Point (FPR)              | 32                     | Calculate, Store, and Load 32-bit or 64-bit floating-point numbers |
| Special Purpose (SPR)             | Up to 1024 (in theory) | Store and load specialized 32-bit fixed-point numbers |
| Segment (SR)                      | 16                     | Calculate, Store, and Load 32-bit fixed-point numbers |
| Time Base Facility (TBR)          | 2                      | Calculate, Store, and Load 32-bit fixed-point numbers |
| Condition Register                | 1                      | Stores conditions based on the results of fixed-point operations |
| Floating Point Condition Register | 1                      | Stores conditions based on the results of floating-point operations |
| Machine State Register            | 1                      |                                                       |

# HID 0

| Model         | Bits Enabled        |
| :------------ | :------------------ |
| 601           | (NOT PRESENT)       |
| 603           | NHR, DOZE/NAP/SLEEP |
| 604           | NHR                 |
| 603E          | NHR, DOZE/NAP/SLEEP |
| 603EV         | NHR, DOZE/NAP/SLEEP |
| 604E          | NHR                 |
| 750 (G3)      | NHR, DOZE/NAP/SLEEP |

# Eccentricities

* The HW Init routine used in the ROMs uses the DEC (decrement; SPR 22) register to measure CPU speed. With a PowerPC 601, the DEC register operates on the same frequency as RTC - 7.8125 MHz but uses only 25 most significant bits. In other words, it decrements by 128 at 1/7.8125 MHz.

* Apple's memcpy routine uses double floating-point registers rather than general purpose registers to load and store 2 32-bit values at once. As the PowerPC usually operates on at least a 64-bit bus and floating-point processing comes with the processors by default, this saves some instructions and results in slightly faster speeds.

* As the PowerPC does not have an instruction to load an immediate 32-bit value, it's common to see a lis/ori coding pattern.