The Description-Based Direct Memory Access (DBDMA) relies on memory-based descriptions, minimizing CPU interrupts.
Channel |
Number |
SCSI0 |
0x0 |
FLOPPY |
0x1 |
ETHERNET TRANSMIT |
0x2 |
ETHERNET RECIEVE |
0x3 |
SCC TRANSMIT A |
0x4 |
SCC RECIEVE A |
0x5 |
SCC TRANSMIT B |
0x6 |
SCC RECIEVE B |
0x7 |
AUDIO OUT |
0x8 |
AUDIO IN |
0x9 |
SCSI1 |
0xA |
What's notable about the registers is that they are in little-endian format, thus Mac OS uses the stwbrx and lwbrx instructions to store values.
Register |
Offset |
ChannelControl |
0x00 |
ChannelStatus |
0x04 |
CommandPtrHi |
0x08 |
CommandPtrLo |
0x0C |
InterruptSelect |
0x10 |
BranchSelect |
0x14 |
WaitSelect |
0x18 |
TransferMode |
0x1C |
Data2PtrHi |
0x20 |
Data2PtrLo |
0x24 |
BranchPtrHi |
0x2C |
BranchPtrLo |
0x30 |
Command |
Value |
OUTPUT_MORE |
0x0 |
OUTPUT_LAST |
0x1 |
INPUT_MORE |
0x2 |
INPUT_LAST |
0x3 |
STORE_QUAD |
0x4 |
LOAD_QUAD |
0x5 |
NOP |
0x6 |
STOP |
0x7 |
Key Name |
Value |
KEY_STREAM0 |
0x0 |
KEY_STREAM1 |
0x1 |
KEY_STREAM2 |
0x2 |
KEY_STREAM3 |
0x3 |
KEY_REGS |
0x5 |
KEY_SYSTEM |
0x6 |
KEY_DEVICE |
0x7 |
Control Register
Value |
Offset |
Branch |
0x100 |
Active |
0x400 |
Dead |
0x800 |
Wake |
0x1000 |
Flush |
0x2000 |
Pause |
0x4000 |
Run |
0x8000 |
References