dingusppc/zdocs/powerpc.md
joevt cd122ce263 Open Firmware is two words
Not OpenFirmware.
Also fixed a spelling mistake and removed some extra spaces.
2022-08-22 16:47:38 -07:00

3.2 KiB

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 Open Firmware.

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.