Schlagwort-Archive: Commodore C16

FPGA CPU für Commodore 16

Loading

Meine erste Begegnung mit Computern hatte ich in den frühen 80iger Jahren, als meine Kollegen im Gymnasium ihren ersten VC20 und C64 von Commodore bekamen. Das war damals eine völlig neue Welt für mich – ein Computer – ein Gerät mit Tasten, wie bei einer Schreibmaschine, das man am Fernsehgerät anschließt. Und man kann in einer Sprache, die sich „Basic“ diesem Computer Befehle erteilen, die er dann ausführt.  Man konnte sogar ganze Programme schreiben und diese dann mit dem Befehl „RUN“ starten. Und dieser Computer arbeitete diese Programme dann ab. Das war faszinierend und eröffnete uns damals neue Welten. Erst recht als ich Kassetten bekam, die wie Musikkassetten aussahen, jedoch für den Computer gedacht waren. Darauf befand sich, spielte man sie in einem Kassettenspieler ab, ein Gepiepe, das man später von Faxgeräten oder der Einwahlsequenz von Modems kannte.

Stöpselte man den Kassettenplayer jedoch mit einem Klinkenkabel in den Computer und gab dort den Befehl „LOAD“ ein, so wurde aus dem Gepiepe ein Spiel oder ein Musikprogramm, oder was auch immer auf der Kassette gespeichert war. Jedenfalls war das das Tollste was man als Kind besitzen konnte. Und den jugendlichen Adrenalinschub bekam ich, als unter dem Weihnachtsbaum mein eigener Commodore C16 mit zugehöriger Datasette und der Spielekassette BigMac lag. Der Commodore C16 war also mein erster richtiger Computer. Es dauerte nicht lange, da waren die 16kB (KiloByte) Ram, die der C16 hatte zu wenig für die selbst gebastelten Basic Programme. Und was noch schlimmer war, es gab auch tolle Spiele, die mit 16k nicht liefen. Dazu gehörte der Kampfflugsimulator „ACE“ und das Vector-Grafikgame „MERCENARY“. Also musste der Computer aufgerüstet werden. Das war aus heutiger Sicht sehr einfach – es mussten lediglich zwei DRram Bausteine ausgelötet und gegen andere ersetzt werden. Damals jedoch, im Alter von – ich denke 11-12 Jahren, war das mangels geeignetem Lötwerkzeug und Erfahrung eine Herausforderung. Doch irgendwie hat es geklappt und der C16 meldete sich mit folgender Statuszeile:

COMMODORE BASIC V3.5 60671 BYTES FREE

READY

Das war im Vergleich zum originalen Speicher, von dem für den Basic Interpreter gerade einmal 12277 Byte frei verfügbar waren, ein Paradies an neuen Möglichkeiten. Leider war die Lebensdauer des Commodore 16 im Dauerbetrieb nicht sehr lange. Ich denke, es hat nicht mal ein Jahr gedauert, da zeigte der Rechner erste Probleme. Entweder reagierte der Cursor nicht mehr, es kamen wirre Zeichen am Bildschirm, oder er startete erst nach häufigem Aus- und wieder Einschalten. Irgendwann blieb der Bildschirm dann ganz schwarz.  Schuld daran war, zumindest vermute ich das heute, der Hitze Tod der CPU und/oder des TED IC´s. Damals konnte man diese Chips in den einschlägigen Elektronikläden noch für kleines Geld bestellen. Heute sieht das aber anders aus. Eine MOS7501 oder MOS8501 CPU findet man, wenn überhaupt, dann nur bei eBay und co. und das für Preise von 50 Euro und mehr für gebrauchte Chips.

MOS7501 (MOS8501) CPU der Commodore 264er Reihe

In meiner Sammlung besitze ich einige wenige Exemplare der 264er Serie von Commodore, die mehr oder weniger alle in einem originalen, einwandfreien Zustand sind (C16, C116, Plus4). Aber eben nicht alle. So habe ich mir in den Kopf gesetzt, die 8501 CPU in einen FPGA zu implementieren, eine kleine Platine zu entwerfen, die die Größe eines DIL40 IC´s hat und direkt in den CPU-Sockel des C16 bzw. Plus4 passt. Es existieren ja bereits einige erfolgreiche Projekte, die sich mit der Implementierung eines 8Bit CPU Core in einen modernen FPGA befassen.  Hier die Links:

Sellmy Retro: https://www.sellmyretro.com/offer/details/mos–7501~~8501-cpu-replacement-for-c16~~116~~%2B4-30475

oder ein universal konfigurierbarer CPU – FPGA Ersatz: https://hackaday.io/project/165624-mocka65xx-universal-650285xx-cpu-replacement

Ich habe mich aus Kostengründen und auf Empfehlung entschlossen, mit einem Lattice MACHXO FPGA zu arbeiten. Ein Evaluation Board ist für unter 30 Euro zu bekommen und für die Entwicklungsumgebung bekommt man bei Lattice eine gratis Lizenz. Einziger Nachteil – ich hatte bis dato keine Erfahrung mit Lattice Produkten. In meinen beruflichen Projekten wird hauptsächlich mit XILINX gearbeitet. Aber nach der Installation der Lattice-Software und ein bisschen Übung war schnell klar, damit sollte ich zurechtkommen.

LATTICE MACH XO Evaluationboard

 

Ich habe mir also vorgenommen, diesen Beitrag als dynamischen Beitrag zu gestalten und immer wieder zu erweitern. Da meine letzten FPGA Projekte wieder einige Zeit zurückliegen und ich mich auch wieder in die FPGA-Welt eingewöhnen muss, wird es wohl einige Zeit dauern bis (falls) ein brauchbares Ergebnis zustande kommt. Zu Beginn steht die Analyse des Datenblattes des MOS8501 IC und dessen Pins zur Außenwelt. Der 8501 ist eine abgeänderte Version des 6502 (die CPU aus dem Jahr 1975 die in vielen Rechnern eingesetzt wurde). Dazu zählen unter anderem der VC20, der Atari800, auch der APPLE 1 usw. arbeiteten mit dem 6502 Prozessor. Der 6502 ist auch schon als Verilog und VHDL Modell verfügbar… Diese Cores mit den Anpassungen für den 8501 will ich in den MachXO reinquetschen und mit entsprechender Anpassung der Signallevels direkt statt dem originalen MOS-Chip in das C16 Mainboard stecken…

 

 

 

 

 

 

 

Retrocomputer in neuer Technik: MIST FPGA

Loading

 

Commodore C16 am MIST FPGA

In den Sommermonaten und vor allem mit meinem kleinen Sohn, ist die Zeit, hinter dem Rechner zu sitzen und über die „Projekt’chen“ zu schreiben, doch sehr dünn gesät. Schon etwas länger beschäftige ich mit den Retrocomputern, wie den Commodore C16, C64, Amiga etc. Mittlerweile ist auch schon eine kleine Sammlung an originaler Hardware zusammengetragen. Um die alten Customchips in den „Brotkisten“ zu schonen, ist es interessant auf alternative Hardware auszuweichen. Für jeden modernen Rechner und auch die kleinen Computer der Raspberry-Foundation ist es kein Problem, einen C64 oder Amiga zu emulierten. Dafür gibt es viel Software (Vice, Yape, Mame, ePSXe, Stella, etc.), die auch ausgezeichnet funktioniert. Bei den Emulatoren wird die Funktionalität der alten Maschinen per Software nachgebildet. Programme und Spiele, die früher per Datasette oder Floppydisk geladen wurden, werden beim Emulator einfach als „Imagedatei“ geladen und gestartet. Das klappt zum größten Teil. Es gibt aber auch Spiele, die so trickreich programmiert worden sind, dass sie das Maximum aus der Hardware herausholen und dafür beispielsweise Bereiche im Speicher für Gamecode verwenden, der für ganz andere Dinge vorgehen war… In solchen Fällen kann es dann vorkommen, dass der Emulator hier versagt.

Noch viel exklusiver und weniger umständlich in Betrieb zu nehmen, um schnell mal einen alten „Rambo“ zu spielen, ist ein Retrocomputer in einem FPGA. Den Elektronikern unter den Lesern ist FPGA sicher ein Begriff. FPGA bedeutet Field-Programmable-Gate-Array. Das Wiederum bedeutet, man hat hier einen Chip, dessen Logikgatter per Softwarebeschreibung erstellt werden. Man stelle sich zum Beispiel einen TTL Baustein 7408 vor. Er beinhaltet vier unabhängige UND-Gatter mit je zwei Eingängen und einem Ausgang. Solche einfachen und viel komplexere Bausteine bilden von der Funktionalität her, die Basis jeden Computers. Solche „Bausteine“ lassen sich auch in einem FPGA erstellen. Man „beschreibt“ quasi mit einer Hochsprache die Funktion, synthetisiert diese und erstellt einen Programmingcode, der im FPGA dann die Gates zu den gewünschten Gattern zusammenschaltet.

HDL nennt man diese „Hochsprache“ (Hardware Description Language). Ein solch ein FPGA enthält nun wirklich sehr, sehr viele GateArrays, die alle zu einer gewünschten Funktion geschaltet werden können. Man baut sich quasi seinen eigenen Chip. Der große Vorteil ist natürlich, dass alle Schaltvorgänge in Echtzeit und je nach Beschattung parallel ausgeführt werden. FPGAs von den Herstellern Altera oder XILINX sind mittlerweile in der Lage im Highspeed Bereich zu operieren mit zig Megagates, IO-Buffers für Singleended- und LVDS Signalen geliefert zu werden.

Mit solchen FPGAs ist es natürlich auch gar kein Problem einen alten 8 oder 16Bit Computer aus den 80igern nachzubilden. Und zwar in Hardware – das bedeutet die Funktion aller Chips die auf einem C64 Board montiert waren (CPU, RAM, PLA, ROM, SID, VIC, CIA ) wird per VHDL beschrieben und  die Gates des FPGA dann so zusammenschaltet, dass er dann sozusagen ein C64 Chip ist, der alles kann was ein echter C64 kann.    

Altera Cyclon III FPGA
Microcontroller Atmel

Ein solches Projekt wurde im Rahmen des MIST (aMIga atariST) realisiert. Die MIST Community hat hier ein Board entwickelt, dessen Kern ein ALTERA Cyclon III ist.  Ein SD-Kartenslot dient als Datenquelle. Über die SD-Karte wird zum einen das FPGA bin-file (also der Core, der den FPGA zum Computer macht) und zum anderen die Daten für den entsprechenden nachgebildeten Computer, wie Spieleimages. Das Management und übernimmt ein kleiner Atmel-Microcontroller. Die Community hat mittlerweile eine ganze Reihe von Rechnerkernen (Cores) gebastelt, die Rechner wie Atari XL, ZX81, ZX Spectrum, C64, Atari VCS, Atari 5200, Apple II, Sega Master System, NES, Odyssey2 und viele mehr nachbilden.

MIST Board Vorderseite

Das Mist-Board bringt eine Reihe von Schnittstellen mit. Eine MicroUSB-Buchse dient als Eingang für die Energieversorgung. Der MIST kann mit einem normalen USB-Handy Steckernetzteil versorgt werden.

MIST Board Rückseite

Zwei 9 polige SUB-D Male-Buchsen ermöglichen das Anschließen der originalen Retro-Joysticks, wie Quickshot etc.  Vier USB-Hostbuchsen, nehmen Datenträger wie USB-Sticks und auch HIDs wie Maus, Keyboard oder auch Game Controller auf. Eine Klinkenbuchse gibt den Ton der Rechner aus und das Bild kommt über eine VGA-Buchse. Hier liegt auch ein kleiner Haken. Denn das Videosignal kommt mit der Frequenz aus der Buchse, mit der auch der originale Rechner gelaufen ist. Wenn ein C64 PAL also mit 50Hz Bildwechselfrequenz arbeitet gibt die Buchse das V-Sync auch mit 50Hz aus. Bei NTSC wären es dann 60 Hz usw. Und das ist schon das Problem. Die meisten neuen LCD Monitore können mit einem 50Hz Signal nicht umgehen. Hier kommt meist eine Meldung wie: „Signal out of range“ Ich habe nur einen alten HP1955 und einen noch älteren IBM Bildschirm zum Laufen gebracht.

MIST – MIDI Buchsen

Wer sich mit Retro Computern und Musik, vor allem mit MIDI beschäftigt, der kann auch mit dem MIST und den Atari ST Sequenzern arbeiten. Das Board hat auch zwei Midi DIN Buchsen.

Wenn man seine SD-Karte nun vorbereitet, also ein Core von GitHub geladen, als core.rbf umbenannt hat, dann gehts auch schon los. Ich habe als Beispiel einen Commodore C16 Core gewählt und als Spiel das Jump an Run Spiel „Big Mac“ als .prg Datei auf die SD-Karte gelegt. Wenn´s auch viele nicht kennen, mein Bruder dürfte sich daran erinnern, falls er sich in den Blog hierher verirrt 🙂 

Commodore C16 BASIC Einschaltbildschirm

Nach dem Startbildschirm des C16, kann mit einem angeschlossenen Keyboard mit F12 per Image Injection das File in den C16-Speicher kopiert werden. Das geht so schnell, dass man nicht merkt, ob zwischen der Enter Taste und dem Ready am Commodore Basic Bildschirm, etwas passiert ist. Mit RUN startet man das Spiel und es kann losgehen 😀

C16/Plus4 Game: BigMac