Bei der Restauration einer PDP-11 fehlte mir ein Festplatten-Controller. Jedoch sind an der Maschine vier RS-232-Ports verfügbar und IDE-Platten hatte ich noch genug. Die Idee hinter dem Projekt ist es, einen möglichst einfachen Adapter für moderne Festplatten zu konstruieren welcher es der PDP-11 ermöglicht auf diese zuzugreifen.
Hardware
Ein Microcontroller der Firma Microchip des Types PIC16F877A eignet sich relativ gut als IDE-Controller, da viele I/O Pins und eine eingebaute UART.
Die IDE-Schnittstelle relativ einfach aufgebaut, da diese eine quasi nur eine Erweiterung des AT-Bus ist. Die Schnittstelle besteht aus einem 16-Bit breiten Datenbus, einem vier-Bit Adressbus und zwei Richtungs-Leitungen (Schreiben/Lesen). Die Adressleitungen wählen Datenregister auf dem in der Festplatte integrierten Controller aus, durch setzen der Schreib- bzw. Leseleitung werden Daten vom Bus gelesen oder auf diesen ausgegeben. Schreiben von Daten auf die Festplatte wird durch laden eines Schreibe-Befehls in das Kommando-Register der Festplatte gestartet. Danach werden in das Datenregister nach und nach die zu schreibenden Daten geladen. Jeder Festplattenblock ist besteht aus 256 16-Bit Wörtern, also 512 Byte. Somit ist die kleinste lesbare/schreibbare Einheit auf der Festplatte ein Block zu 512 Byte. Die einzelnen Blöcke werden ü durch das LBA-Verfahren adressiert.
Software
Die Firmware des PIC implementiert eine Statemachine welche Datenströme transparent (jedenfalls nahezu) zwischen Host (der PDP-11) und Festplatte überträgt. Dazu werden die Befehle über das ESC-Zeichen übergeben, soll ein ESC übertragen werden wird einfach ESC ESC gesandt. Hierdurch ergibt sich eine nahezu transparente Übergabe von Daten und die Möglichkeit beide Systeme bei Kommunikations-Problemen zu synchronisieren.
Zur Entwicklung der PIC-Firmware wurde die Programmiersprache JALv2 gewählt, da diese eine relativ gut lesbare Syntax (ähnlich wie Pascal) und relativ guten PIC-Assembler produziert. Die Quellcodes der Firmware stehen am Ende dieser Seite zum Download zur Verfügung.
Die Firmware ist in drei Bestandteile gegliedert, in der Datei uart.jal wird ein Treiber für die integrierte USART des PIC implementiert. Die Datei ide_drv.jal ist die eigentliche IDE-Implementation diese wurde möglichst ohne "Magische Zahlen" implementiert. Alle von Null verschiedenen Werte sind als Konstanten mit einigermassen sinnvollen Namen deklariert um eine Portierung bzw. Erweiterung zu vereinfachen, auch die Anschlussbelegung kann im Kopf des Treibers angepasst werden. Es sind Befehle auf niedrigster Ebende dort implementiert. Also lese/schreibe Register, IDE-Platte initialisieren. Höhere Funktionen, wie lese/schreibe Sektor, identifizieren des Geräts, usw. werden hier bewusst nicht bereitgestellt. Diese sind gegenwärtig mitsamt der Statemachine in der Datei main.jal implementiert, da die Statemachine relativ direkt auf die Festplattenelektronik zugreift.