RL8-A disk controller

From Computer History Wiki
Jump to: navigation, search

The RL8-A disk controller for the OMNIBUS PDP-8s was for the RL01 and RL02 disk drives. It could be set under program control to either 8-bit or 12-bit mode; in the latter, a sector contained 170 words, with 8 bits left unused. (These drives protect the data, and sector headers, with separate CRCs.)

The RL8-A was a hex board, the M8433. It had a 40-pin Berg connector which receives a special inter-drive cable (round in cross-section, with special locking connectors). The cable runs to the first drive; up to 4 drives can be connected to a single controller, using a bus running from one drive to the next, with a terminator in the last drive of the string.

It can be configured as device 60/61 (first controller) or 62/63 (second controller); its normal data break priority is 0, but it can be jumpered to use 1 instead.

Controller capabilities

The controller and drive combination can execute 8 different commands:

  • Maintenance
  • Reset
  • Get Status
  • Seek
  • Read Header
  • Write Data
  • Read Data
  • Read Data Without Header Check

Device instructions

The RL8-A is controlled with 14 instructions:

Code Mnemonic Function
6600 RLDC Clear controller, all register
6601 RLSD Skip on function done, clear if set
6602 RLMA Load memory address register
6603 RLCA Load command register A
6604 RLCB Load command register B
6605 RLSA Load sector address register
6607 RLWC Load word count register
6610 RRER Read error register
6611 RRWC Read word count register
6612 RRCA Read command register A
6613 RRCB Read command register B
6614 RRSA Read sector address register
6615 RRSI Read silo word
6617 RLSE Skip on composite error, clear if set

Device registers

The RL8-A controller includes 7 internal registers:

Register Abbreviation
Command Register A CA
Command Register B CB
Memory Address Register MA
Sector Address Register SA
Word Count Register WC
Error Register ER
Silo Buffer Register SI

Command Register A

During a seek:

DIR HS Unused CYL DIFF
00 01 02 03 04 05 06 07 08 09 10 11
DIR - Direction
HS - Head Select
CYL DIFF - Cylinder Difference (distance to move)

During a data read/write:

Unused HS Unused CYL
00 01 02 03 04 05 06 07 08 09 10 11
HS - Head Select
CYL - Cylinder

Command Register B

Unused MAIN MODE IE DRVSEL EMA FUNC
00 01 02 03 04 05 06 07 08 09 10 11
MAIN - Maintenance
MODE - 12- OR 8-bit mode
IE - Interrupt Enable
DRVSEL - Drive Select
EMA - Extended Memory Address
Function Code Function
0 Maintenance
1 Reset
2 Get Status
3 Seek
4 Read Header
5 Write Data
6 Read Data
7 Read Data, No Header Check

Error Register

DCRC/HCRC OPI DLT/HNF Unused DE DRDY
00 01 02 03 04 05 06 07 08 09 10 11
DCRC/HCRC - Data CRC/Header CRC
OPI - Operation Incomplete
DLT/HNF - Data Late / Header Not Found
DE - Drive Error ('Get Status' will provide details)
DRDY - Drive  Ready

Silo Buffer Register

During a 'Read Header' command - word 0:

Unused CA0 HS SECTOR
00 01 02 03 04 05 06 07 08 09 10 11

During a 'Read Header' command - word 1:

Unused CYLINDER CA8-CA1
00 01 02 03 04 05 06 07 08 09 10 11

During a 'Get Status' command - word 0:

Unused DT HS CO HO BH STATE
00 01 02 03 04 05 06 07 08 09 10 11
DT - Drive Type
HS - Head Select
CO - Cover Open
HO - Heads Out
BH - Brush Home
State Code State
0 Load Cartridge
1 Spin Up
2 Brush Cycle
3 Load Heads
4 Seek
5 Lock On
6 Unload Heads
7 Spin Down

During a 'Get Status' command - word 1:

Unused WDE CHE WL STO SPE WGE VC DSE
00 01 02 03 04 05 06 07 08 09 10 11
WDE - Write Data Error 
CHE - Current Head Error
WL - Write Lock
STO - Seek Time Out Error
SPE - Spin Error
WGE - Write Gate Error
VC - Volume Check
DSE - Drive Select Error

Bootstraps

Address Data Comments
21 7600 Clear accumulator
22 6600 Clear controller
23 7332 Generate constant
24 6605 Load SA with 20
25 1021 Load constant into accumulator
26 6607 Load WC
27 2327 Generate constant
30 6604 Load CMD B
31 6601 Skip on done
32 5031 Jump backward if not

Start at 21; the loaded operating system will overlay the bootstrap.