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 20: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.