Einführung
Das Floppy-Disk-Laufwerk VC1541 von Commodore wurde im Laufe der Zeit immer wieder modifiziert. Meistens handelte es sich dabei um Einsparungen aus Kostengründen.
In den 80er Jahren kosteten TTL-Chips der 74er-Serie deutlich mehr als heute. Wo heute die meisten Chips dieser Serie im Durchschnitt 0,50 Euro kosten, oder aus China importiert sogar nur einen Bruchteil davon, waren sie damals deutlich teurer. Seltenere Exemplare kosteten sogar gerne mal 5 Euro (umgerechnet ca 10,- DM) pro Stück.
Zusätzlich gab es auch immer wieder Lieferprobleme mit diesen ICs. Um diese Probleme zu vermeiden, entwickelte Commodore einen eigenen Chip, der eine ganze Handvoll dieser TTL-Chips in einem Gehäuse integriert. So entstand der MOS 325572-01.

Dies ermöglichte es Commodore nicht nur Kosten, sondern auch Platz zu sparen, was natürlich weitere Kosten für die Platine einspart.
Leider neigt dieser Chip auch dazu, frühzeitig kaputt zu gehen. Und Ersatz ist nur in Form von gebrauchten Chips erhältlich. Diese sind jedoch manchmal teurer als eine gebrauchte und funktionsfähige 1541.
Also liegt es nahe, den Chip irgendwie zu kopieren oder nachzubauen.
Was steckt in diesem IC?
Was sich im Gate Array befindet, lässt sich ziemlich gut abschätzen. Denn letztendlich ist alles, was auf den „Longboards“ noch als TTL-Chips vorhanden war und auf den „Shortboards“ nicht mehr, einfach im Gate Array integriert.
Es gibt auch entsprechende Schaltpläne der Longboards im Commodore Servicehandbuch.
In dem genannten Dokument gibt es zum einen ein Funktionsdiagramm:

Dieses gibt bereits einen groben Überblick darüber, was sich in UC1 befindet und welche Funktion es erfüllt. Unten rechts sieht man beispielsweise die Steuerung für den Antriebsmotor und den Schrittmotor des Lese-/Schreibkopfes usw.
Dies wäre bereits ausreichend, um die Logik reproduzieren zu können. Commodore macht es jedoch einfach, indem es auch den Schaltplan enthält, wie diese Logik auf dem alten „Longboard“ aufgebaut war.

Im Grunde muss man also nur genau den „fehlenden“ Teil auf den „Shortboards“ nachbauen.
Nachbau in TTL
Und das klingt schwieriger als es war. Denn man muss wirklich nur die Schaltung 1:1 nachbauen und dann die entsprechenden Signalleitungen auf die 40 Pins des UC1 verteilen.
Um das Ganze auszuprobieren und auch Messungen zu erleichtern, habe ich den MOS 325572-01 in einzelnen TTL-Chips nachgebaut.

Die Platine steht leicht hervor…

Insgesamt wurden 15 TTL-Bauteile benötigt. Zwei davon werden nur für je ein Gatter benötigt. Auf dem Longboard wurden freie Gatter vorhandener Chips einfach verwendet. Das ging hier natürlich nicht. Natürlich hätte ich das Ganze in SMD bauen können, aber es wäre nicht viel kleiner geworden.
Aber es hat Spaß gemacht und man lernt eine Menge darüber, wie diese Schaltung funktioniert.
Jetzt das Ganze in schön
Das nächste Ziel war, das Ganze in einem CPLD oder FPGA platzsparend nachzubilden. Die meisten heutigen CPLDs oder FPGAs sind jedoch nur für 3,3V oder weniger ausgelegt. Natürlich könnte man Pegelwandler dazwischen setzen. Aber das würde mehr Platz benötigen.
Es gibt jedoch noch einige CPLDs und FPGAs, die zumindest 5V-tolerant sind. Das bedeutet, dass sie mit 3,3V arbeiten, aber 5V an den Eingängen ohne Probleme vertragen. An den Ausgängen gibt es jedoch nur noch ein „Low Voltage TTL Level“ mit 3,3V. Aber das ist kein Problem, da bei TTL alles über 2V als HIGH-Pegel erkannt wird.
Lattice, Altera und Xilinx haben solche Chips nicht mehr offiziell im Programm. Aber da diese Chips sehr beliebt sind, sind sie noch in großen Mengen erhältlich und werden es auch noch einige Jahre bleiben.
Für die ersten Tests habe ich den Xilinx XC95144XL gewählt. Eigentlich völlig überdimensioniert, aber ich habe reichlich davon auf Lager. Und dieser Chip kostet in China knapp einen Euro. Viel günstiger wird es wohl nicht.
Erste Experimente
So schön wie die Simulationen in den einzelnen Tools auch sind, ich habe immer wieder festgestellt, dass sie nicht immer helfen, besonders in Kombination mit alter Hardware. Was in Simulationen perfekt funktioniert, hat in der Realität hier und da seine Schwächen. Das gilt insbesondere für fast 40 Jahre alte Technologie.
Also habe ich die Simulationen nur dort verwendet, wo es keinen externen Kontakt gab, und ansonsten das Ganze direkt am lebenden Objekt und mit einem Logikanalysator „simuliert“.
Sicherlich nicht die bevorzugte Methode, die man in Schulungen lernt, aber in diesen Schulungen trifft man auch nicht auf so alte Hardware, die keine Simulation wirklich abbilden kann. TTL-Bauteile werden teilweise als solche abgebildet, aber nur als perfektes Modell. Ein Bauteil, das 40 Jahre alt ist und vielleicht schon Tausende Betriebsstunden hinter sich hat, verhält sich leider nicht immer wie das perfekte Modell.
Also habe ich eine meiner selbstgebauten Experimentierplatinen genommen und angefangen, die Schaltung in VHDL nachzubilden.

Setup mit den ersten Prototypen
Ich habe das Ganze in einzelne Funktionsblöcke unterteilt. Zum Beispiel habe ich die Motorsteuerung gewählt, die unabhängig vom Rest des Gate Arrays arbeitet.
Dafür habe ich die oben erwähnte TTL-Version genommen, die entsprechenden ICs entfernt und durch einzelne Verbindungen der Experimentierplatine ersetzt.

So konnte ich wunderbare Tests am lebenden Objekt durchführen oder nach Fehlern suchen. Meistens handelte es sich um Timing-Probleme, wenn etwas wieder nicht funktionierte.
Hier ein gutes Beispiel:

In der unteren Reihe sieht man das interne Taktsignal des CPLD. Oben sieht man ein externes Signal. Eigentlich sollten beide synchron laufen. In der Simulation ist das der Fall. Aber die Schaltung in der Realität tut dies nicht.
Die mittleren Signale werden alle durch das untere Taktsignal an der steigenden Flanke ausgelöst und passen intern ebenfalls. Nur dann nicht zur externen Außenwelt.
Das sind Probleme, die immer wieder auftreten, und deshalb habe ich die Simulationen irgendwann weggelassen und nur noch direkt gemessen. Das war für mich schneller und einfacher.

Zwischendurch sah es aufgrund all der Drähte, Schnüre und Prüfspitzen etwas chaotisch aus. Aber es ging sehr schnell voran. Allerdings wurde das Drahtgewirr auf der Experimentierplatine so groß, dass es immer wieder zu Unterbrechungen der Verbindungen kam.
Deshalb entschied ich mich hier, einen Schnitt zu machen und den Stand auf eine neue Prototypenplatine zu übertragen.
Der 2. Prototyp
Ich habe alles, was bereits fertig war, in das CPLD ausgelagert und den Rest weiterhin als TTL bereitgestellt. Die alten Drahtverbindungen waren somit erstmal erledigt und es gab wieder Platz für viele bunte neue Drähte 🙂

Auf dem Bild sieht man, dass inzwischen fast alles bereits im CPLD implementiert ist. Die nach oben gebogenen Kontakte am Flip-Flop gehören zu einem der beiden Flip-Flops im 74LS74. Dieser gehörte zu einem anderen Funktionsblock und war bereits implementiert. Ich konnte den Chip nicht komplett entfernen, da der andere FF noch benötigt wurde.
Zwischendurch habe ich die grundlegenden Floppy-Funktionen getestet, indem ich Disketten formatiert, Dateien erstellt, gelöscht, kopiert, Spiele, Demos, sowie Anwendungen getestet und sogar ganze Disketten kopiert habe.
Fast fertig…
Und jetzt sind die letzten beiden ICs weg und das CPLD hat alles übernommen.

Es wird kein TTL-Bauteil mehr verwendet, die Sockel sind alle leer.
Ich habe jetzt den VHDL-Code bereinigt, temporäre Zuordnungen wieder gelöscht, das Ganze gestrafft und auch kommentiert.
Jetzt muss nur noch die Platine schöner werden. Denn einerseits möchte niemand diese Drähte haben und andererseits muss die Platine kleiner werden.
Wenn man sich die Zusammenfassung nach dem „Kompilieren“ des Codes ansieht, sieht man, dass der hier verwendete XC95144XL viel zu überdimensioniert ist.

Ein „kleiner“ XC9572XL ist hier auch völlig ausreichend. Und von der Anzahl der benötigten I/Os würde sogar die ganz kleine Version im TQFP mit 44 Pins reichen. Es hätte fast sogar in den XC9536XL gepasst. Leider brauchte ich 3 Makrozellen mehr.
Da ich aber noch am Anfang bin, was VHDL betrifft, werde ich das Projekt vielleicht später nochmal angehen. Ich denke, dass ich dann in VHDL so fit sein werde, dass ich sicherlich noch einige Optimierungen hier und da vornehmen könnte. Dann könnte das Ganze sicherlich in einen XC9536XL passen, auch wenn das preislich keinen großen Unterschied macht.
Und das würde problemlos auf eine so kleine Platine passen, die auch nicht größer wäre als der alte Chip.
Neue Platine
Der VHDL-Code ist fertig, das Ganze ist soweit auch getestet, jetzt ist es Zeit, das Ganze zum Abschluss zu bringen. Dazu braucht es eine praktische kleine Platine.
Der Schaltungsaufwand ist hier nicht groß. Der Xilinx XC9572XL arbeitet intern mit 3,3V. Dafür braucht es einen kleinen Spannungswandler, der die von der Floppy gelieferten 5V auf 3,3V umwandelt und ein paar Blockkondensatoren für das CPLD. Das war’s dann auch schon.
Im 3D-Modell sieht die fertige Platine so aus.

Damit die Optik etwas ansprechender ist, habe ich die obere Seite freigelassen. So kommt das Ganze einem IC noch am nächsten. Man könnte das Ganze vielleicht in schwarzes Gießharz einbetten, um den Look zu vervollständigen.
Die eigentliche Schaltung befindet sich auf der Unterseite.

Wie man sieht, passt das ausgewählte CPLD wunderbar. Rechts sieht man den Spannungswandler.
Später wird das CPLD durch die Version mit nur 44 Pins ersetzt. Leider habe ich auf die Schnelle keine anderen bekommen, daher die 64-PIN-Version.
So wird die echte Version aussehen. Einmal von oben:

Und einmal die Unterseite:

Wie man sieht, ist der Aufwand nicht groß. Die LEDs sind mehr ein Gag. Es waren noch I/Os frei (bezogen auf die 44-PIN-Version), also habe ich entschieden, sie irgendwie zu nutzen.
Deshalb habe ich einen Taktcontroller eingebaut. Dieser zeigt das Vorhandensein des eingehenden Taktsignals an. Dafür habe ich den Takt entsprechend geteilt, sodass die LED blinkt. So kann man zumindest feststellen, ob der Takt vorhanden ist, der von der UD5 geliefert wird.
Weiterhin habe ich eine Motoranzeige eingebaut, die zeigt, ob der Motor in Betrieb ist. Und schließlich habe ich eine Betriebs-LED hinzugefügt, die zeigt, ob der Spannungswandler arbeitet, und eine Schreib-LED. Diese LED leuchtet oder blinkt, wenn auf die Diskette zugegriffen wird.
Ich hatte hier zum ersten Mal LEDs verwendet, die von hinten eingebaut werden. Wie ich finde, ein netter Gag.
Beim Einbau in eine 1541 sieht das Ganze so aus:

Der Schaltplan ist nicht wirklich aufregend:

Wie man sieht, ist auf der Platine nicht wirklich viel drauf. Die LEDs könnten auch weggelassen werden. Aber irgendwie fand ich sie so schön als netten Gag, dass ich sie gelassen habe.
Dies ist noch die Version für die 64-Pin-Version des XC9572XL. Daher gibt es noch viele ungenutzte I/Os. Mir fiel aber auch nichts anderes ein, um sie sinnvoll zu nutzen. In einer früheren Version hatte ich noch LEDs für die Richtung des Lese-/Schreibkopfes darauf. Aber später habe ich sie wieder entfernt, da diese Informationen einfach nutzlos waren.
Man könnte weiße LEDs unter dem Chip anbringen, falls jemand jemals ein transparentes Gehäuse für die 1541 machen sollte. Würde sicherlich ziemlich lustig aussehen. Es gäbe auch genug Makrozellen für eine PWM-Steuerung, sodass man sie langsam hoch- und runterdimmen könnte.
Wäre eine schöne Idee für lange Winterabende…
Zusammenfassung
Und dieser Ersatz ist gnadenlos günstig. Der Chip kostet in China etwa 1-2 Euro. In Deutschland liegt er bei etwa 3-4 Euro. Die Platine selbst kostet inklusive Versand aus China etwa einen Euro. Und der „Kleinkram“ mit Spannungswandler liegt im Centbereich. Die LEDs sind mit knapp 1,50 Euro fast das teuerste Teil. Wobei diese auch weggelassen werden könnten.
Unterm Strich kostet die Platine knapp 5 Euro. Wenn man ein paar Dutzend davon macht, eher 3 Euro oder weniger.
Vergleicht man den Preis mit gebrauchten Original-Gate-Arrays von eBay, hat sich dieser Aufwand mehr als gelohnt. Den Entwicklungsaufwand für den Code habe ich nicht mit eingerechnet. Aber wenn jemand das als Hobby macht, kann man solche Kosten ohnehin nicht einbeziehen.
Nachtrag (2020-12-31) und Download
Ich habe dieses Projekt jetzt auch auf GitHub veröffentlicht. Wer das Projekt nachbauen möchte, kann dies gerne tun. Alles, was dafür benötigt wird, befindet sich auf meinem GitHub-Account: https://codeberg.org/diwou/EasyGate1541
Nachtrag (2022-03-14) / Firmware Release 1.5
Ich habe noch ein paar Bugs behoben und Timinganpassungen vorgenommen. Jetzt funktioniert auch die Demo Freespin ohne Probleme. Download HIER.
