Es gibt viele Gründe, eine andere Betriebssystem Version beim Commodore C64 mal eben auszuprobieren. Oder man möchte seinen Rechner nicht aufschrauben, bzw. daran herum basteln. Angeregt durch die REX 9628 Extern Kernal 8 Karte, hatte ich mir meine eigene Karte zusammengebaut. Aus einer kleiner Spielerei, wurde letztendlich eine große Spielerei mit Gimmick. In diesem Artikel geht es um den Nachbau dieser Karte.

Einleitung

Angefangen hat es eigentlich mit dem Nachbau der REX 9628 Karte, welchen in in dem Artikel Nachbau der REX 9628 Extern Kernel 8 Karte schon beschreiben hatte.

Anfangs hatte ich mit diesem Nachbau meine liebe Not. Es funktionierte schlichtweg nicht so, wie es sollte. Später fand ich den Fehler dann in einem defekten IC Sockel. Aber vorher hatte ich dann angefangen, eine eigene Karte zu bauen. Dazu hatte ich ja schon einige Informationen in Externes 8fach Kernal Modul für den C64 selbst gebaut geschrieben gehabt.

Was mir an der REX Karte nicht gefiel, waren die beiden EPROMs. Als die Karte damals gebaut wurde, waren EPROMs sehr teuer. Und je mehr Speicherkapazität das EPROM hatte, desto teurer wurde es. Ich bin mir nicht einmal ganz sicher, ob damals die 27512 EPROMs überhaupt in einem bezahlbaren Rahmen käuflich zu erwerben gab.

Das hat sich heute aber geändert. Es gibt mittlerweile die elektrisch löschbare Variante als EEPROM von Winbond bei einem bekannten Auktionshaus im 10er Pack für umgerechnet 5,- Euro. Das macht also knapp 50 Cent für ein EEPROM. Selbst die 27C64 EPROMs, welche nur 8kByte speichern können, kosten gut das 5fache. Und haben als EPROM noch den Nachteil, das zum löschen eine UV Lampe benötigt wird.

EEPROMs hingegen können einfach gelöscht werden. Dazu reicht ein einfacher EPROM Brenner, wie der beliebte MiniPro TL866 vollkommen aus. 

 

Projektbeschreibung

So fing ich im ersten Schritt damit an, das ganze auf einem Breadboard aufzubauen, was ein klein wenig chaotisch anmutet.

8x Kernal Modul Pro Breadboard 800

 

Man kann von diesen Breadboards halten was man will, aber praktisch sind diese schon. Man kann eben mal eine Schaltung aufbauen, und auch jederzeit Änderungen vornehmen. Um das Breadboard an des C64, bzw. dessen Expansion Port zu bekommen, habe ich eine kleine Adapterplatine, die auf das Breadboard gesteckt werden kann. 

Also dann soweit alles zufriedenstellend funktionierte, habe ich das Breadboard durch eine Lochrasterplatine ersetzt. Denn so praktisch die Breadboards sind, so anfällig sind diese auch. Einmal nicht aufgepasst, und man hat eine Verbindungsleitung in der Hand. Und es geht dann die Sucherei los, wohin dieses Käbelchen gehört.

Daher das ganze noch einmal neu aufgebaut, aber diesmal alles gelötet und nicht gesteckt.

8x Kernal Modul Pro Hole Grid Board Top 800

 

Ich habe meine Experimentierplatine modular gehalten. So kann ich bei dem oben genannten Adapter einfach eine Lochrasterplatine dran stecken, welche sogar noch erweiterbar ist. Ich habe da verschiedene Platinen, die auch teilweise schon vorbestückt sind. So bin ich sehr schnell und flexibel, was solche aufbauten angeht. Hier in diesem Fall hatte ich die Lochraster Variante gewählt.

Von oben betrachtet, sieht das ganze ja noch recht überschaubar und sauber aus. Könnte man fast schon so übernehmen, wäre da nicht die Rückseite.

8x Kernal Modul Pro Hole Grid Board Bottom 800

 

Ich gebe zu, schön ist anders. Aber ich hatte ja eigentlich erst mit der Variante ohne Display angefangen. Dann kam ich auf die Schnappidee, noch ein 7 Segment Display dazu zu packen. Dort wird dann der ausgewählte Kernal als Zahl angezeigt. 

Ich gebe zu, dass dies keiner größeren Funktion dient, sondern ich hatte zufällig die Teile da. Und irgendwie überkam mich die Idee, also warum denn nicht.

Die Grundschaltung ist eigentlich die selber, wie ich sie auch schon in Externes 8fach Kernal Modul für den C64 selbst gebaut gezeigt habe. Das E(E)PROM wird an die A0 bis A12 Adress- und D0 bis D7 Datenleitungen angeschlossen.

Die Auswahl des Kernels geschieht durch die Bank Selektion der höheren Adressleitungen A13 bis A15.

Der Schaltplan dazu ist recht einfach aufgebaut.

Schematic 8x Kernal Cartridge V1.0 800

 

Das reicht aus, für einen einfachen Kernel Adapter am Expansion Port des Commodore C64. Mit den 3 Adressleitungen können 8 Bänke selektiert werden, was dann eben 8 Kernal entspricht, wenn ein 64kByte großes E(E)PROM benutzt wird. Da hit Bitweise geschaltet wird, muss mit dem Binärsystem gerechnet werden. 

Dezimal 1. Bit 2. Bit 3. Bit
0 0 0 0
1 1 0 0
2 0 1 0
3 1 1 0
4 0 0 1
5 1 0 1
6 0 1 1
7 1 1 1

 

Und auf diese Art und Weise lassen sich die acht verschiedenen Kernal einstellen. Es ist einfach und funktional, aber sicherlich nicht komfortabel. Das wurde beim REX 9628 Extern Kernal etwas eleganter gelöst. Dort wurde ein 74LS148 BCD Encoder eingesetzt und ein DIP Schalter für jeden einzelnen Kernal. Und dieser Encoder macht nichts anderes, und setzt die Bits am Ausgang entsprechend dieser Tabelle. So muss man sich nicht im Kopf ausrechnen, welche Stellung für welchen Kernal zuständig ist.

Eine andere Möglichkeit wäre noch, einen sogenannten Drehencoder zu benutzen. Das sind kleine Drehschalter, die es u.a. auch als BCD Variante gibt. Es gibt 8 Stellungen, die die Ziffern 0 bis 7 repräsentieren. Und am Ausgang finden sich wieder die 3 Bit an 3 Ausgangsleitungen wieder.

Leider hatte ich nicht einen solchen Schalter hier, und auch preislich sind diese wesentlich teurer, als eben diesen Encoder und einen 8x DIP Schalter zu benutzen. Aber so ganz habe ich die Idee noch nicht begraben und ich werde mal schauen, was unsere Freunde hinter der großen Mauer zu dem Thema sagen.

Die Leitungen müssen noch invertiert werden, weswegen ein 74LS04 zum Einsatz kommt. Diesen findet man auch auf der REX 9628 Karte wieder. Wie schon erwähnt, nutzt die REX Karte zwei EPROMs, um 8 Kernal nutzbar zu machen. Die dafür nötige Umschaltung wird meiner Meinung nach sehr umständlich durchgeführt. Dies hätte man auch damals schon eleganter lösen können.

So wäre jetzt eigentlich der Nachbau des Neubaus der REX 9628 Karte fertig, mit den selben Features, aber eben nur einem EPROM. Und den Game Stop habe ich weg gelassen, weil ich darin persönlich keinen Sinn gesehen habe. 

Nun, da war dann plötzlich die Idee mit der 7-Segment Anzeige. Natürlich kann man an dem DIP Schalter jederzeit ablesen, welches Kernal eingestellt wird, da ja nun 8 Schalter vorhanden sind, und jeder einen Kernal darstellt. Aber ein netter Gag ist es doch, zumindest empfinde ich dies so.

Und eigentlich ist dies auch sehr simpel zu realisieren, denn es gibt mit dem 74LS247 einen Baustein, an dem man direkt eine entsprechende Anzeige anschließen kann. Der 74LS247 ist ein BCD Decoder, inkl. Treiber für ein 7-Segment Display mit gemeinsamer Anode. Ausser den typischen Vorwiderständen werden keine Treiberstufen benötigt. Dies ist alles schon in dem Chip eingebaut. und durch den Encoder stellt er die Bits als Dezimalzahl da.

So kann man einfach diese Anzeige in die Schaltun integrieren.

Dann noch ein Umschalter für die "großen" und "kleinen" EPROMs und ein genereller Ein-/Ausschalter, damit die Karte im Expansion Port verbleiben kann, auch wenn diese nicht genutzt wird.

Der Umschalter für das EPROM liegt an der Adressleitung A14 an. Mit diesem Schalter kann A14 entweder generell auf HIGH gesetzt, oder durch die DIP Schalter geschaltet werden. Für die 8 und 16kByte großen EPROMs wird A14 generell auf HIGH gesetzt, und für die noch größeren 32 und 64kByte EPROMS wieder A14 ebenfalls zur Selektion der einzelnen Bänke benötigt.

Zusammengefasst ergibt sich so folgende Schaltung.

Schematic 8x Kernal Module Pro V1.0a 800

 

Und aus dieser Schaltung habe ich dann in KiCad folgende Platine entworfen. Hier erst einmal der 3D Entwurf aus der Software heraus.

8x Kernal Modul Pro PCB 3D 800

 

Was auf dieser Grafik nicht zu sehen ist, ist der Schalter für die EPROM Größe. Dieser sitzt unter dem EPROM. Zum einen passte er dort perfekt hin, und zum anderen kann man so nicht aus versehen diesen Schalter verstellen. Ein Reset Schalter hat natürlich auch noch Platz gefunden. Und so entstand die "Pro" Version der Rex 9628 Karte. 

Heute sind nach knapp 3 Wochen auch die Lieferung mit den Prototyp Platinen gekommen. 

8x Kernal Modul Pro PCB 800

 

Hier ist auch der Schalter unterhalb des EPROMs zu erkennen. Bitte nicht über den Namen wundern, aber den hatte ich in der Zwischenzeit schon wieder geändert, weil er mir nich so zusagte. In den aktuellen Gerber Dateien ist dieser Name nicht mehr zu sehen.

Gut sind auch die oben weiter erwähnten Bauteile zu sehen.

Teileliste

Die Stückliste, bis auf die Schiebschalter sieht dabei wie folgt bei Reichelt aus:

Reichelt BoM 800

 

Dazu gibt es auch einen passenden Warenkorb bei Reichelt, bis eben auf die beiden Schiebeschalter. Diese scheint Reichelt leider nicht zu führen. Conrad Electronic führt diese aber unter der Bestellnummer 1564871

In der obigen Liste habe ich stellvertretend ein 27C512 EPROM eingesetzt. Persönlich empfehle ich das schon weiter oben genannte M27C512 EEPROM von Winbond. Für den Preis eines EPROMs bekommt man hier schon fast 10 Stück als elektrisch löschbares EEPROM. Aber das überlasse ich gerne jedem selbst.

Mit knapp 20,- Euro, die Platine noch mit eingerechnet, bekommt man so eine externe Kernal Platine, die 8fach umschaltbar ist und am Expansion Port des Commodore C64 betrieben werden kann. Hat man Zeit, und bestellt die Teile in China, kann man sogar noch ein paar Euro sparen. 

 

Bauanleitung

Liegen alle Bauteile und die Platine vor, geht es an den Zusammenbau.

Wie bei solchen Aufbauten üblich, fängt man von klein nach groß an. Als erstes werden daher die 7x 220 Ohm Widerstände und die 5x 100nF Kondensatoren eingelötet. Da hier keinerlei Polarität zu beachten ist, spielt die Einbaurichtung auch keine Rolle.

8x Kernal Modul Pro PCB equipped 1 800

 

Als nächstes sollten die beiden Schiebeschalter eingelötet werden. Die Einbaurichtung sollte klar sein, kann aber noch einmal auf dem folgenden Bild kontrolliert werden.

8x Kernal Modul Pro PCB equipped 2 800

 

Nun folgt das Widerstandsnetzwerk. Hier ist auf die Polung zu achten. Auf der Beschriftungsseite des Widerstandes befindet sich auf der linken Seite ein deutlich zu erkennender Punkt. Diese Stelle muss dort sitzen, wo der rechteckige Lötpad auf der Platine ist. Ferner befindet sich an dieser Stelle auf der Platine auch der 10k Aufdruck. Auf dem Bild kann man leider den Punkt nicht sehen, aber er würde sich bei dieser Lage nun oben in der Nähe des Schiebeschalters befinden.

8x Kernal Modul Pro PCB equipped 3 800

 

Jetzt kommen die IC Sockel an die Reihe. Am besten steckt man diese erst einmal von oben rein und legt dann ein etwas auf die Platine, damit diese wie eine Pfanne gewendet werden kann. Dann als erstes die beiden diagonal gegenüberliegenden Pins verlöten bei jedem Sockel. So sind diese fixiert und können nicht mehr heraus fallen. Kurz noch den Sitz kontrollieren und die restlichen Pins verlöten.

8x Kernal Modul Pro PCB equipped 4 800

 

Im letzten Schritt werden jetzt der DIP Schalter, der Taster und die 7-Segment Anzeige verlötet. Damit wären die Lötarbeiten soweit auch abgeschlossenen. Jetzt noch die ICs einsetzen, und die Platine ist soweit betriebsbereit.

EPROM brennen

Was nun noch fehlt, ist ein EPROM, bzw. EEPROM mit den entsprechenden Kernals, Der Kernal des Commodore ist 8kByte groß, was 8192 Bytes entspricht. Im Internet finden sich viele Kernal, die 2 Byte größer sind, als insgesamt 8294 Bytes haben.

Das liegt daran, dass diese Dateien die Ladeadresse voran gestellt wurde. Diese benötigte man früher, wenn mit dem Commodore C64 EPROMs gebrannt wurden. Werden die Dateien aber auf einem PC gebrannt, dann würden diese beiden Bytes stören. Die Software für die Commodore EPROM Brenner hat diese beiden Bytes nicht mit auf das EPROM geschrieben. Die heutigen PC Programme würden dies aber tun. Durch die beiden Bytes am Anfang, verschiebt sich so natürlich alles, und das gebrannte EPROM wird nicht funktionieren.

Wer eine passende Datei mit 8192 Bytes hat, kann den nächsten Abschnitt überspringen.

 

Kernal Datei korrigieren

Um nun die beiden Bytes aus der Datei zu entfernen, wird am einfachsten ein HEX Editor benutzt. Ich würden an dieser Stelle die freie Software HxD - Freeware Hex-Editor und Disk-Editor empfehlen. Dort öffnet man die Kernal Datei, löscht einfach die ersten beiden Bytes heraus, und speichert die Datei erneut.

Hier wäre zum Beispiel eine solche Datei. Schaut man sich die Eigenschaften im Explorer an, so sieht man das es nicht die erwarteten 8192 Bytes sind, sondern 8194 Bytes, 

Kernal File Info

 

Nachdem der Hex Editor installiert und geöffnet wurde, kann nun mit einem Klick auf <FILE> und dann <OPEN> die Datei geöffnet werden. 

Hex Editor Kernal 1

 

Nun markiert man mit der Maus die ersten beiden Bytes. 

Hex Editor Kernal 2

 

Und drückt auf die Entfernen <ENTF> Taster und löscht die beiden Bytes. DIe Warnmeldung wird mit <OK> bestötigt.

Hex Editor Kernal 3

 

Und die beiden störenden Bytes sind verschwunden. Nun muss die Datei nur noch gespeichert werden. Dazu wieder auf <FILE>, gefolgt von <Save as...> klicken, einen neuen Dateinamen vergeben und speichern.

Hex Editor Kernal 4

 

Schaut man nun im Explorer wieder unter Eigenschaften, so sieht man nun, dass die Datei die passende Größe hat.

Kernal File Info 2

 

Diese Datei kann nun in ein EPROM oder EEPROM geschrieben werden.

 

Datei mit mehreren Kernal erstellen

Jetzt wird man sicherlich bei einer solchen Karte, nicht nur ein Kernal einsetzen wollen. Je nach Speichergröße können 1, 2, 4 oder 8 Kernal genutzt werden.Wenn von einem 512kBit EEPROM ausgegangen wird, wären dies insgesamt 8 verschiedene Kernal.  

Damit man die Kernal in das EPROM schreiben kann, müssen die einzelnen Dateien zu einer einzigen großen Datei zusammengefasst werden.

Dazu kopiert man die 8 Dateien am einfachsten in ein Verzeichnis. Nun gibt es zwei Wege, diese Dateien zu einer einzigen Datei zusammen zu fassen.

 

EPROM Datei mit HEX Editor erstellen

Wer den oben genannten Hex Editor installiert hat, kann diesen verwenden.

Dazu ruft man unter <EXTRAS>, <File tools> den Punkt <Concatenate> auf.

EPROM File Create 1

 

Mit <Add...> fügt man nun die 8 Dateien hinzu. Für mein Beispiel hatte ich die Dateien einfach durch nummeriert. Das dient jetzt hier nur der Übersichtlichkeit. Dies sollte auch nicht gemacht werden, da man so nicht weiß, welcher Kernal hinter welcher Datei steckt. Mit den grünen Pfeiltasten kann die Reihenfolge noch angepasst werden. Nun noch unter "Output file name:" den Dateinamen zum speichern eingeben und mit <OK> bestätigen. Als Endung würde ich .BIN oder .ROM nehmen.

EPROM File Create 2

 

Schaut man sich anschließend wieder im Explorer die neu erzeugte Datei an, so ist diese nun 65536 Bytes groß. Und exakt diese Größe muss die Datei auch haben. 

Kernal File Info 3

 

 

EPROM Datei mit COPY Befehl erstellen

Die zweite Möglichkeit, eine Datei zum schreiben zu erzeugen, ist der COPY Befehl von Windows. Dazu wird eine Eingabeaufforderung benötigt. 

Mit dem aus DOS Zeiten bekannten Befehl <copy> können auch mehrere Dateien zu einer einzigen zusammen kopiert werden. Dazu werden die einzelnen Dateien mit einem "+" Zeichen zusammen gefügt.

Ganz wichtig ist der Parameter "/b". Dadurch weiß der Copy Befehl, das es sich um Binär Dateien handelt. Vergisst man diesen Parameter zu setzen, so wird die erzeugte Datei nicht funktionieren. 

Der Befehl sähe als so aus:

copy /b KERNAL-1.BIN + KERNAL-2.BIN EPROM.BIN 

Die ersten beiden Dateien werden zusammen gefügt und in der Datei EPROM.BIN gespeichert. Und durch den Parameter /b weiß Copy, dass die Datei als Binärdatei behandelt werden muss. Und dies kann man nicht nur mit zwei Dateien machen, sondern auch mit 8 oder mehr.

CMD Copy

 

Und auch hier muss die erzeugte Datei "eprom.bin" genau 65536 Bytes groß sein. 

 

Anmerkungen zu den Dateigrößen

Wie schon erwähnt, muss der Kernal genau 8192 Bytes groß sein. Viele Tools zeigen oftmals den Wert in kByte an. Das wären 8kByte. Windows rundet hier aber gerne. So werden auch 8190 Bytes oder 8194 Bytes immer noch als 8kByte angezeigt. Auf diese Anzeige kann man sich also auf gar keinen Fall verlassen. Immer die Byte Größe anzeigen lassen, nur so ist sicher gestellt, dass die Datei zumindest von der Größe her schon einmal richtig ist.

Die EPROMs, und EEPROMS sind in 8, 16,32 und 64kByte Größen nutzbar. Folgende Tabelle zeigt dabei die entsprechenden Werte.

EPROM Bezeichnung Größe in kbit Größe in kByte Größe in Bytes
27C64 64 8 8192
27C128 128 16 16384
27C256 256 32 32768
27C512 512 64 65536

 

Dies gilt natürlich auch für EEPROMs.

 

Bedienung

Bevor nun das EPROM eingesetzt wird, muss der Schalter entsprechend der Größe gesetzt werden. Bei den 8 und 16K Typen wird der Schalter in die untere Position, in Richtung des Expansion Port gebracht. Wenn 32 und 64k EPROMs eingesetzt werden, dann nach oben, in Richtung der 7-Segment Anzeige.

8x Kernal Modul Pro EPROM Config 800

 

Jetzt kann das E(E)PROM eingesetzt werden.

 

Oben links an der Karte befindet sich ein weiterer kleiner Schalter. Dieser dient zum Ein-, bzw. Ausschalten der Karte. So kann die Karte im Expansion Port verbleiben, und nach dem Ausschalten der Karte wird dann das internet Kernal des Rechners genutzt.

8x Kernal Modul Pro Switch 800

 

Mit den DIP Schaltern wird der jeweilige Kernal ausgewählt. Durch einfaches setzen eines Schalters in die ON Position, wird dieser Kernel gewählt. Sollten versehentlich zwei Schalter auf ON stehen, so zählt immer der höherwertigerer Schalter. Wenn zum Beispiel Schalter Nr. 3 und Schalter Nr. 6 gesetzt ist, wird der 6. Kernal ausgewählt. 

Auf dem 7-Segment Display wird dabei die jeweilige Nummer angezeigt. Es wird von 0 bis 7 gezählt. Der 1. Kernal hat demzufolge die Ziffer 0 und der 8. Kernal die Ziffer 8.

 

Gravatar
Montgomery
Hi Dirk,
Really love all the cartridges you are developing for the C64. I'm interested in making the 8xKernal Module Pro. I see you have the BoM link to Reichelt on your page, so it is possible for me to order the parts. However, is it also possible to get the Gerber file so that I can get a PCB made, please? I couldn't see a link for that anywhere on your website. It would be really cool to have one. Would it be possible to use this Kernal cart in an Expander alongside another cart (ie an ethernet cart) or do you think there may be compatibility issues?
Thanks very much
Mark

0
Kommentareingabe ausblenden

5000 Buchstaben übrig


Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.