Files
dingusppc/zdocs/developers/cpu/powerpc/powerpc.md
2025-03-30 07:41:15 -07:00

7.5 KiB

The PowerPC is the main processor used for Power Macs. Currently, DingusPPC only implements the 32-bit variant.

General Notes

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

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
Vector Status and Control Register (VSCR) 1 Stores conditions based on the results of vector operations
Machine State Register (MSR) 1 Stores the state of the processor

Special Registers

Register Name Register Number Purpose
Multiply Quotient Register (MQ) 0 (601 only)
Integer Exception (XER) 1
RTC Upper Register (RTCU) 4 (601 only)
RTC Lower Register (RTCL) 5 (601 only)
Link Register (LR) 8
Counter Quotient Register (CTR) 9
Search Description Register (SDR1) 25 Specifies starting address of the page table
Save and Restore Register 0 (SRR0) 26
Save and Restore Register 1 (SRR1) 27
Vector Save/Restore 256 (G4+)
Time Base Lower (TBL) 268 (603+)
Time Base Upper (TBU) 269 (603+)
External Access (EAR) 282
Processor Version (PVR) 287
Hardware Implementation 0 (HID0) 1008
Hardware Implementation 1 (HID1) 1009

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

Exceptions

nnn is either 0x000 or 0xFFF, depending on the 25th bit (0x40) set in the MSR. Usually, the 25th bit is set when booting up a system and unset after it is set.

Exception Address
System Reset 0xnnn00100
Machine Check 0xnnn00200
DSI 0xnnn00300
ISI 0xnnn00400
External Interrupt 0xnnn00500
Alignment 0xnnn00600
Program 0xnnn00700
Floating Point Unavailable 0xnnn00800
Decrementer 0xnnn00900
System Call 0xnnn00C00
Trace 0xnnn00D00
Performance Monitor (G3+) 0xnnn00F00
AltiVec Unavailable (G4+) 0xnnn00F20
Instruction Address Breakpoint (G3+) 0xnnn01300
System Management Interrupt (G3+) 0xnnn01400
AltiVec Assist (G4+) 0xnnn01600
Thermal Management Interrupt (G3+) 0xnnn01700

Endianness

PowerPC supports both big-endian and little-endian modes. Mac OS largely operates in big-endian mode, due to its 68k heritage.

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.

  • The 603 relies on the instructions tlbld and tlbli to assist in TLB reloading.

  • To accommodate for early programs compiled on PowerPC 601 Macs, the classic Mac OS has to emulate the POWER instructions that were removed from later processors.

  • BeOS uses the exception handler by deliberately invoking a supervisor-level instruction while the PR bit is set in the MSR.

  • Mac OS X touches the FP bit in the MSR to performing floating-point operations.

References

http://www.ibmfiles.com/ibmfiles/powerpc/itso_powerpc_inside_view.pdf