Keyboard Controlled Kernal Switch

  • In den letzten Tagen habe ich mich mit einem Kernal Switch beschäftigt, der nur vom Keyboard des C64 gesteuert wird. Das Design habe ich an den Arduino Uno angeleht.

    Der Prozessor ist ein ATmega328p, das Board wird auf den Keyboardstecker des C64 Mainboards aufgesetzt. Die Kontakte dringen von unten durch Löcher in den Steckverbinder ein (Pass Through oder Bottom Entry heißt das im Datenblatt). Auf die Stiftleiste daneben wird der Keyboardsteckverbinder gesteckt. Das Teil lauscht den Scan Aktivitäten des Keyboards und der RESTORE-Taste. Wenn nun die RESTORE-Taste gedrückt wird sowie eine Ziffer zwischen 1 und 8 (Long Board) oder 1 und 7 (Short Board), dann wird der Kernal ausgewählt, d.h. die Adressen A13 bis A15 an den Kernal Adapter (oben im Bild) angelegt und der C64 bekommt ein Reset. Wenn man die RESTORE-Taste für ein paar Sekunden gedrückt hält, dann gibt es nur einen reset.



    So seiht das Ding auf dem Long Board (ASSY25045 mit Dioden) im C64C-Gehäuse aus. Eng, aber passt. Ich habe die Maße auf ASSY 250407, 250425 und 250469 angepasst. Die Abschirmpappen oder Bleche habe ich allerdings nicht berücksichtigt. Die sind bei mir alle im Müll gelandet.


    Grundsätzlich gibt es zwei verschiene Kernal Adapter. Für das Long Board gehen 8 Kernal in ein 27C512, beim Short Board war es etwas trickreicher, denn dort ist ja noch das Basic mit drauf. Es gibt dafür einen speziellen Kernal-Adapter mit UND-Gattern unter dem EPROM und es passen nur 7 Kernal in ein 27C512.



    Wegen der unterschiedlichen Platzierung der Bauteile zueinande, muss das Kabel (4 Adern: A13-A15 und /RESET) etwas länger sein. Die Reset-Leitung habe ich in der Nähe des Userports "eingeklinkt". Dort habe ich einen Stiftleisten-Pin angelötet, der mit einem Dupont-Kontakt verbunden wird. Wenn der Kernal gesockelt ist, ist das die einzige Lötarbeit am guten Stück.


    Nachdem der Arduino-Bootloader in den Prozessor gebrannt wurde, kann man das Arduino-Script über ein serielles Kabel einspielen. Ich habe auch ein *.elf Programmierfile hergestellt (einfach den Prozessor ausgelesen, nachdem die Software fertig war).


    Bei der Programmierung hat es zwei Kleinigkeiten gegeben: Der C64 scannt die Tastaur nicht stur Spalte für Spalte und ließt die Reigen zurück, nein... er legt erst einmal alle Spalten aug LOW und erkennt daran, ob überhaput eine Taste gedrückt ist. Wenn ja, dann geht er durch die Spalten. Den Fall musste ich ausblenden. Als nächtes kann es passieren, dass man nicht alle Kernal programmiert hat, also der C64 beim Umschalten ins Leere läuft. Dann konnte man nicht zurückschalten, denn wenn kein Kernal läuft, wird die Tastatur nicht gescannt. Blöd, aber es gibt einen Aufweg. Nach dem Umschalten habe ich ein Timeout gemacht. Wenn innerhalt dieser Zeit keine Scannaktivitäten an den Spalten erkannbar sind, wird einfach auf Kernal #1 umgeschaltet. Der ist wohl immer drauf. Funktioniert auch gut.


    In Kürze ist das Teil auf Github. Dazwischen steht noch eine ausgiebige Dokumentation. Vielleicht hat ja jemand Lust, das Teil nachzubauen, Bausätze zusammenzustellen oder sonst etwas, dass ihn reich macht.

  • Ist jetzt auf Github. Die Doku ist noch als vorläufig zu betrachten. Ich bin hier unter 37 Seiten geblieben.
    Auf Github, datt.

    Geniale Anleitung. Auch wenn man sich gar nicht so für das Projekt selber interessiert, ist die lesenswert. Da wird viel erklärt, wie man Atmels in-circuit programmieren kann. :thumbup:

    Wobei ich das Projekt natürlich auch interessant finde.