diff --git a/zdocs/aboutthis.md b/zdocs/aboutthis.md new file mode 100644 index 0000000..06708bb --- /dev/null +++ b/zdocs/aboutthis.md @@ -0,0 +1,2 @@ +This folder contains hardware and software documentation, much of which the developers +used during the development of DingusPPC. diff --git a/zdocs/atirage.md b/zdocs/atirage.md new file mode 100644 index 0000000..07b9000 --- /dev/null +++ b/zdocs/atirage.md @@ -0,0 +1,5 @@ +The ATI Rage is a video card that comes bundled with early Power Mac G3s and New World Macs (like the first revisions of the iMac G3). + +#Memory Map + +The ATI Rage can usually be located at IOBase (ex.: 0xF3000000 for Power Mac G3 Beige) + 0x9000. However, the video memory appears to be at 0x81000000. diff --git a/zdocs/awacs.md b/zdocs/awacs.md new file mode 100644 index 0000000..343e1fe --- /dev/null +++ b/zdocs/awacs.md @@ -0,0 +1,11 @@ +# Memory Map + +AWACS can usually be located at IOBase (ex.: 0xF3000000 for Power Mac G3 Beige) + 0x14000. + +# Registers + +Sound Control Register +Codec Control Register +Codec Status Register +Clipping Count Register +Byte Swapping Register diff --git a/zdocs/grackle.md b/zdocs/grackle.md new file mode 100644 index 0000000..8c75d02 --- /dev/null +++ b/zdocs/grackle.md @@ -0,0 +1,15 @@ +The MPC106, codenamed "Grackle", is a memory controller and PCI host bridge. Its predecessor was the MPC105, codenamed "Bandit". + +Unlike the CPU, the Grackle runs in little-endian mode in compliance with the PCI standard. This usually means that to get the result in the correct endian, the PowerPC must load and store byte-reversed inputs and results. + +By default, Grackle operates on Address Map B. + +CONFIG_ADDR can be found at any address in the range 0xFEC00000–0xFEDFFFFF, while CONFIG_DAT can be found at any address in the range 0xFEE00000–0xFEEFFFFF + +PCI Config addresses work as follows: + +bus << 16 | device << 11 | function << 8 | offset + +#Revisions + +Revisions under 4.0 could allow up to 75 MHz, whereas 4.0 and newer can allow up to 83 MHz. diff --git a/zdocs/heathrow.md b/zdocs/heathrow.md new file mode 100644 index 0000000..9110449 --- /dev/null +++ b/zdocs/heathrow.md @@ -0,0 +1,5 @@ +The Heathrow is an I/O subsystem and a DMA controller. + +It contains a feature control register, an auxiliary control register, and some registers to save states for the DBDMA and the VIA Cuda. + +It also contains the emulations for the VIA Cuda, SWIM 3 floppy drive, ESCC, and MESH components. diff --git a/zdocs/misc.md b/zdocs/misc.md new file mode 100644 index 0000000..23939e7 --- /dev/null +++ b/zdocs/misc.md @@ -0,0 +1,23 @@ +# ROM + +The Old World ROM is always 4 megabytes (MB). The first three MB are reserved for the 68k code, while the last MB is for the PowerPC boot-up code. + +# Serial + +For serial, it replicates the functionality of a Zilog ESCC. There are two different ports - one located at 0xF3013000 for the printer, and the other at 0xF3013020 for the modem. + +# DBDMA + +The Description-Based Direct Memory Access relies on memory-based descriptions, minimizing CPU interrupts. + +# SWIM 3 + +The SWIM 3 (Sanders-Wozniak integrated machine 3) is the floppy drive. + +# NVRAM + +Mac OS relies on 8 KB of NVRAM at minimum to run properly. It's usually found at IOBase (ex.: 0xF3000000 for Power Mac G3 Beige) + 0x60000. + +# Miscellaneous + +The Power Mac G3 Beige has an additional register at 0xFF000004, which is dubbed varyingly as the "cpu-id" (by OpenFirmware), the ""systemReg" (display driver) or "MachineID" (platform driver). diff --git a/zdocs/openfirmware.md b/zdocs/openfirmware.md new file mode 100644 index 0000000..5f33334 --- /dev/null +++ b/zdocs/openfirmware.md @@ -0,0 +1,5 @@ +OpenFirmware is a standard to defined a firmware's interfaces. It primarily uses the Forth programming language. + +When using an Old World PCI Power Mac, it gets relocated from 0xFF800000 to 0x00400000 during boot-up, then instruction and data translations are enabled. + +It gets compiled to native PowerPC code during boot-up. diff --git a/zdocs/powerpc.md b/zdocs/powerpc.md new file mode 100644 index 0000000..bb06e74 --- /dev/null +++ b/zdocs/powerpc.md @@ -0,0 +1,35 @@ +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. + +# 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 | | diff --git a/zdocs/viacuda.md b/zdocs/viacuda.md new file mode 100644 index 0000000..5150080 --- /dev/null +++ b/zdocs/viacuda.md @@ -0,0 +1,66 @@ +Using a combination of a 6522 along with some integrated circuits, the VIA Cuda is a microcontroller that heavily controls system operations. It's largely similar to Egret (used in many 68k Macs), but removes some commands. + +The usual offset for a VIA Cuda is IOBase (ex.: 0xF3000000 for Power Mac G3 Beige) + 0x16000. The registers are spaced out by 0x200 bytes on the Heathrow. + +# Usage + +The VIA Cuda is emulated in all Power Macs through an interrupt controller. Early Power Macs also used the Parameter RAM. + +Additionally, nodes are included for ADB peripherals, Parameter RAM, Real-Time Clocks, and Power Management. + +It can be run either synchronously or asynchronously. + +However, the CUDA is also slower than the CPU, thus causing a delay that the OS expects. + +# Packet Types + +| Hex | Packet Type | +|:-------------:|:----------------------:| +| 0x00 | ADB | +| 0x01 | Pseudo | +| 0x02 | Error | +| 0x03 | Timer | +| 0x04 | Power | +| 0x05 | Mac II | + + +# Device Commands + +| Hex | Device Command | +|:-------------:|:----------------------:| +| 0x00 | Reset Bus | +| 0x01 | Flush ADB | +| 0x08 | Write ADB | +| 0x0C | Read ADB | + +# Pseudo Commands + +| Hex | Command Name | +|:-------------:|:----------------------:| +| 0x00 | WARM_START | +| 0x01 | START_STOP_AUTO_POLL | +| 0x02 | GET_6805_ADDRESS | +| 0x03 | GET_REAL_TIME | +| 0x07 | GET_PRAM | +| 0x08 | SET_6805_ADDRESS | +| 0x09 | SET_REAL_TIME | +| 0x0A | POWER_DOWN | +| 0x0B | SET_POWER_UPTIME | +| 0x0C | SET_PRAM | +| 0x0D | MONO_STABLE_RESET | +| 0x0E | SEND_DFAC | +| 0x10 | BATTERY_SWAP_SENSE | +| 0x11 | RESTART_SYSTEM | +| 0x12 | SET_IPL_LEVEL | +| 0x13 | FILE_SERVER_FLAG | +| 0x14 | SET_AUTO_RATE | +| 0x16 | GET_AUTO_RATE | +| 0x19 | SET_DEVICE_LIST | +| 0x1A | GET_DEVICE_LIST | +| 0x1B | SET_ONE_SECOND_MODE | +| 0x21 | SET_POWER_MESSAGES | +| 0x22 | GET_SET_IIC | +| 0x23 | ENABLE_DISABLE_WAKEUP | +| 0x24 | TIMER_TICKLE | +| 0X25 | COMBINED_FORMAT_IIC | +| 0x26 | (UNDOCUMENTED!) |