Difference between revisions of "RL8-A disk controller"
(Fairly complete) |
(Add bootstrap) |
||
| Line 93: | Line 93: | ||
HS - Head Select | HS - Head Select | ||
CYL - Cylinder | CYL - Cylinder | ||
| − | |||
===Command Register B=== | ===Command Register B=== | ||
| Line 135: | Line 134: | ||
DE - Drive Error ('Get Status' will provide details) | DE - Drive Error ('Get Status' will provide details) | ||
DRDY - Drive Ready | DRDY - Drive Ready | ||
| − | |||
===Silo Buffer Register=== | ===Silo Buffer Register=== | ||
| Line 152: | Line 150: | ||
| colspan=4 | Unused || DT || HS || CO || HO || BH || colspan=3 | STATE | | colspan=4 | Unused || DT || HS || CO || HO || BH || colspan=3 | STATE | ||
{{12bitoctal-bitout}} | {{12bitoctal-bitout}} | ||
| + | DT - Drive Type | ||
| + | HS - Head Select | ||
| + | CO - Cover Open | ||
| + | HO - Heads Out | ||
| + | BH - Brush Home | ||
{| class="wikitable" | {| class="wikitable" | ||
| Line 186: | Line 189: | ||
DSE - Drive Select Error | DSE - Drive Select Error | ||
| − | + | ==Bootstraps== | |
| − | |||
| − | |||
| + | <!--This [[bootstrap]] will load the block at sector 0 of cylinder 0 of drive 0 into [[main memory]] at [[address]] 20: --> | ||
{| border=1 | {| border=1 | ||
| − | ! Address !! Data !! | + | ! Address !! Data !! Comments |
|- style="background-color: #ccccdd;" | |- style="background-color: #ccccdd;" | ||
| − | | | + | |21||7600|| Clear accumulator |
|- style="background-color: #ccccff;" | |- style="background-color: #ccccff;" | ||
| − | | | + | |22||6600|| Clear controller |
|- style="background-color: #ccccdd;" | |- style="background-color: #ccccdd;" | ||
| − | | | + | |23||7332|| Generate constant |
|- style="background-color: #ccccff;" | |- style="background-color: #ccccff;" | ||
| − | | | + | |24||6605|| Load SA with 20 |
| + | |- style="background-color: #ccccdd;" | ||
| + | |25||1021|| Load constant into accumulator | ||
|- style="background-color: #ccccff;" | |- style="background-color: #ccccff;" | ||
| − | | | + | |26||6607|| Load WC |
|- style="background-color: #ccccdd;" | |- style="background-color: #ccccdd;" | ||
| − | | | + | |27||2327|| Generate constant |
|- style="background-color: #ccccff;" | |- style="background-color: #ccccff;" | ||
| − | | | + | |30||6604|| Load CMD B |
|- style="background-color: #ccccdd;" | |- style="background-color: #ccccdd;" | ||
| − | | | + | |31||6601||Skip on done |
|- style="background-color: #ccccff;" | |- style="background-color: #ccccff;" | ||
| − | | | + | |32||5031||Jump backward if not |
| − | |||
| − | |||
|} | |} | ||
| − | Note that the INIT pulse caused by hitting the [[front panel]]'s 'Start' button will clear the Bus Adddress register, so that the loaded block will be placed at location 0; and the Disk Address register, so that sector 0 will be read. If the drive's heads are not on cylinder 0, since a seek on an RL01/02 is ''relative'', a 'Read Header' command would have to be done before a seek could be commanded (or the [[device driver]] must remember the current cylinder), and that all would require a fair amount of code. To ensure that the drive is on cylinder 0 for the bootstrap, the drive should be power cycled before starting the bootstrap. --> | + | Start at 21; the loaded [[operating system]] will overlay the bootstrap. |
| + | <!-- Note that the INIT pulse caused by hitting the [[front panel]]'s 'Start' button will clear the Bus Adddress register, so that the loaded block will be placed at location 0; and the Disk Address register, so that sector 0 will be read. If the drive's heads are not on cylinder 0, since a seek on an RL01/02 is ''relative'', a 'Read Header' command would have to be done before a seek could be commanded (or the [[device driver]] must remember the current cylinder), and that all would require a fair amount of code. To ensure that the drive is on cylinder 0 for the bootstrap, the drive should be power cycled before starting the bootstrap. --> | ||
[[Category: OMNIBUS Storage Controllers]] | [[Category: OMNIBUS Storage Controllers]] | ||
Latest revision as of 19:30, 26 May 2021
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.
Contents
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.