Reparatur C64: Out of Memory Error in 0 - RAM auslöten und sockeln
In meinem Artikel Homecomputer Commodore C64 und VC20 Hauptplatinen nackt getestet hatte ich ja festgestellt, dass der C64 leider defekt ist.Beim Einschalten zeigt er nur folgende Meldung an:
Mein Schlussfolgerung war die folgende:
Mit der Fehlermeldung schlussfolgere ich, dass dem C64 Speicher fehlt. Vielleicht ist die Verbindung zu den RAM-Chips unterbrochen? Oder das RAM ist defekt?Ein wenig im Internet recherchiert wird in einigen Foren das gleiche Problem geschildert und da soll der Austausch des RAMs geholfen haben. An dem Ausrufezeichen (Bildschirmcode 33) erkennt man, dass mit Bit 0 (mit der Wertigkeit 1), also die D0-Leitung nicht richtig funktioniert. Denn eigentlich will der C64 ein Space (Bildschirmcode 32) darstellen, da funkt jetzt aber zusätzlich nur eine 1 von defekte D0-RAM rein und macht daraus eine 33 (32+1).
Ein paar der Ausrufezeichen flackern. Das könnte an defektem oder nicht angeschlossenem RAM liegen. Dazu muss man wissen, dass zwischen Byte 1024 und 2023 der Bildschirmspeicher des C64 liegt. Alles was sich in diesem RAM-Bereich befindet, wird auf den Bildschirm ausgegeben. Mit Poke 1024,1 kann ich z. B. ein A in den Anfang des Bildschirmspeichers schreiben, was zur Folge hat, dass dieser sofort auf dem Bildschirm erscheint.
Das die Ausrufezeichen nun so rumflackern könnte an einer "in der Luft hängenden" Leitung liegen. Vom Arduino und Raspberry Pi weiß ich, dass, wenn man einen nicht angeschlossenen Pin misst, dieser zwischen 1 und 0 hin und herspringt, man spricht dann von "floating pins". Jetzt könnte das Flackern gut die Folge eines Floating Pin sein, denn das flackert ja ganz ähnlich hin und her. Das Ausrufezeichen wäre übrigens ein Poke 1,33 und 33 stände für das 1. und 5. Bit. Eventuell sind die Datenleitungen 1 und 5 irgendwie defekt? Irgendwie sowas... oder auch was ganz Anderes...
Die Wertigkeit des Bits sind übrigens:
vvvv vvvv Bit / DRAM-Nr.
7654 3210 Wertigkeit: Bildschirmcode
^--- 1 32 + 1 = 33 entspricht !
^---- 2 32 + 2 = 34 "
^----- 4 32 + 4 = 36 $
^------ 8 32 + 8 = 40 (
^-------- 16 32 + 16 = 48 0 (Null)
^--------- 32 32 + 32 = 64 hor. Mittelstrich
^---------- 64 32 + 64 = 96 Space (sieht man dann nicht)
^-----------128 32 + 128 = 160 inverses 32 = Block
Bei der Architektur des C64 kommt jedes Bit eines Bytes aus einem anderen RAM-Speicherbaustein, denn die verwendeten DRAM-Chip 4164 oder 4264haben nur ein einzige Datenleitung (an Pin 2), können also nur ein einziges Datenbit liefern. Dafür haben sie 8 Adressleitungen (A0 bis A7). Die beiden SN74LS257-Chips vor den DRAM Chips sind Selektoren / Multiplexer und sorgen dafür, das jeweils der richtige Chip nach dem richtigen Bit gefragt wird. Die hätte ich evtl. als nächstes in Verdacht, wenn es doch nicht das RAM ist.
Das und noch mehr zeigt uns der Schaltplan des C64 im RAM-Sektor:
Der zeigt uns nämlich auch, auf welchem Bestückungsplatz des Boards welcher RAM-Chips sitzt und für welches Datenbit der zuständig ist:
D0 = U21 !
D1 = U9 "
D2 = U22 $
D3 = U10 (
D4 = U23 0
D5 = U11 hor. Mittelstrich
D6 = U24 Leerzeichen (nicht sichtbar)
D7 = U12 Block
Mit der obigen Tabelle lässt sich so ganz einfach ablesen, welcher RAM-Chip auszutauschen ist. Es sei denn, es hat D6 auf U24 erwischt, dann hat man zwar kaputte Zeichen, aber die sieht man nicht, weil es das 2. Leerzeichen auf Platz 96 (1. Leerzeichen ist auf 32) ist.Da ich ein Ausrufezeichen sehe, sollte das defekte RAM das auf Platz U21, also der 4264-Chip ganz unten links auf der Hauptplatine.
Meine Idee war jetzt, U21 (D0) und U22 (D2) auszulöten und die DRAMS dort miteinander auszutauschen. Ist aktuelle D0 defekt, wird der defekte Chip danach für D2 zuständig sein und das Ausrufezeichen sollte sich in ein Dollarzeichen ändern.
Bevor es aber an den Lötkolben geht, wollte ich noch etwas anderes testen: wird der C64 in diesem Zustand laufen, wenn ich eine Cartridge einschiebe? Die sollte ja eigentlich das RAM teilweise überlagern und das Programm läuft dann im ROM der Cartrigde und nicht mehr im RAM. So könnte ich sehen, ob noch mehr kaputt ist und auch meine Defekte-RAM-Theorie (zumindest zum Teil) verifizieren.
Doch erst einmal habe ich den Versuchsaufbau abgeändert, weil ich den Platz vor dem PC-Monitor zu häufig brauche und dort normalerweise meine Tastatur steht. Also geht es auf meinen Labor-Schreibtisch und zur Anzeige dient jetzt ein älterer Monitor, der eigentlich für eine Rückfahrkamera im Auto gedacht ist und sehr klein ist. Aber zum Anzeigen einer Fehlermeldung ist er groß genug. Und kann so schnell mitbekommen, ob sich an der Bildschirmausgabe etwas ändert.
Bei der Gelegenheit habe ich dem Monitorkabel auch gleich ein Audiokabel spendiert. Das musste ich eh noch einmal neu löten hatte ich doch zu lange mit dem Feuerzeug auf den Schrumpfschlauch eingewirkt und irgendwo im Kabel einen Wackelkontakt erzeugt. Jetzt ist es besser, auch wenn mein Monitor doch nicht, wie zuerst gedacht, einen eingebauten Lautsprecher hat.
Die Cartridge Wizard of War ließ sich starten und auch ganz gut spielen - ich habe zwar keine Tastatur aber wohl noch einen Joystick. Allerdings flackert auch hier etwas, wo es nicht hingehört. Das Gleiche beim Siel Lazarian: auch hier ein flackerndes Artefakt, ansonsten spielbar.
Es wird also wohl das RAM sein. Also ging es ans Auslöten der RAMs. Da hatte ich allerdings die Rechnung ohne fast 40 Jahre altes, stinkendes Lot und eine Platine mit welligen, extrem dünnen Leiterbahnen gemacht. Beim Versuch, DRAM 0 auszulöten, sind mir gleich mal 2 Lötpads und eine Durchkontaktierung abgerissen. Ich war kurz davor, die Platine in die Tonne zu kloppen und die gesockelten Chips auf eBay zu verkloppen...
... aber nach einer Kaffeepause fand ich meine Geduld dann doch wieder. So hatte das keinen Sinn. Ich musste die Chips opfern und die Beinchen durchknipsen, damit ich hier überhaupt noch eine Chance hatte, die Platine noch zu retten und nicht unrettbar zu schrotten.
Außerdem habe ich mir überlegt, dass, wenn mal was an DRAM 2, 4 oder 6 defekt sein sollte, ich mich dann sehr schwer tun würde wegen der Höhe der dann vorhandenen Sockel noch etwas zu löten und beschloss deshalb die auch gleich zu sockeln. Auch hier versuchte ich mit Entlötlitze und Entlötpumpe die Chips auszulöten. Aber auch hier keine Chance. Es blieb immer ein klein wenig Lot in den Löchern und die Chips wollten nicht herauskommen.
Also wurde hier auch die ICs geopfert und die Beinchen gekappt. Zum Glück entschloss ich mich früh genug dazu und habe bei den Chipplätzchen alle Lötpads intakt gelassen.
Aber bei DRAM 0 musste ich tricksen und Lötze um die Beinchen an Pin 11 und 12 wickeln und verlöten und dann später an die hauchdünnen, übrig gebliebenen Leiterbahnen anlöten, um die Verbindung wieder herzustellen, wie man auf dem folgenden Bild sieht.
Getreu dem Motto "nur nicht hetzen" und im Hinterkopf habend, dass es dest einfacher ist, einen Fehler an einem Sockel zu korrigieren, je weniger Sockel schon eingelötet sind, wurde nach jedem Sockel penibel durchgemessen, ob alle Pins auch richtig verbunden sind. Zum Schluss hatte ich dann alle vier Sockel für die DRAM-Chips drin:
Fertig sieht das gar nicht mehr so nach Trümmerfeld aus. Die Sockel verdecken die Schande.
Jetzt muss nur noch der freundliche Chinese die bestellten 4164-15 DRAMs liefern, aber das kann dauern. Bis dahin - also ein paar Wochen - muss dieses Projekt erst einmal ruhen, dafür wird es umso spannender sein, auszuprobieren, ob dann alles funktioniert oder es noch woanders hapert.
Ich berichte an dieser Stelle, sobald es soweit ist.
Zu dem Ganzen habe ich natürlich auch wieder ein Video gemacht, dass die Vorgänge vielleicht noch einmal viel besser zeigt: