Documentation started for hardware

This commit is contained in:
dingusdev 2020-03-01 10:58:09 -07:00
parent cbb46e8f30
commit 07badbb1b3
9 changed files with 167 additions and 0 deletions

2
zdocs/aboutthis.md Normal file
View File

@ -0,0 +1,2 @@
This folder contains hardware and software documentation, much of which the developers
used during the development of DingusPPC.

5
zdocs/atirage.md Normal file
View File

@ -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.

11
zdocs/awacs.md Normal file
View File

@ -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

15
zdocs/grackle.md Normal file
View File

@ -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 0xFEC000000xFEDFFFFF, while CONFIG_DAT can be found at any address in the range 0xFEE000000xFEEFFFFF
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.

5
zdocs/heathrow.md Normal file
View File

@ -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.

23
zdocs/misc.md Normal file
View File

@ -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).

5
zdocs/openfirmware.md Normal file
View File

@ -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.

35
zdocs/powerpc.md Normal file
View File

@ -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 | |

66
zdocs/viacuda.md Normal file
View File

@ -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!) |