Ich melde mich auch mal wieder, diesmal gehts wieder um Hardware:
Letztes Jahr hatte ich meine kleine Grundversion Z80 Rechner auf dem Breadboard fertiggestellt, er hatte 32 KB SRAM und eine 32 KB EPROM. Daran wollte ich weiterarbeiten, dann kamen aber andere Interessen und auch Uni dazwischen. Währenddessen habe ich natürlich weiterhin auf Ebay geschaut und mir unzählige Chips geschossen. Vor allem sowjetische Chips, aber auch CPUs die nicht so häufig benutzt wurden. Deswegen habe ich mir quasi hier schon einen Vorrat an CPUs und Peripheriechips aufgebaut zu verschiedensten Architekturen.
Letztes Jahr hatte ich aus Zufall einen Zusatzchip für den MC6800 entdeckt, der DES implementiert. Ich als Kryptostudent war natürlich ziemlich begeistert und hab die direkt geschnappt, anscheinend sind auch garnicht so häufig. Das hat dann auch mein Interesse für den MC6800 und MC6809 geweckt, die anscheinend von anderen 8 Bit CPUs ziemlich überschattet wurden. Deswegen wollte ich damit jetzt auch mal ein System aufbauen. Der Z80 rennt mir ja nicht weg und die Chips dafür habe ich da.
Das ganze ist schon eine kleine Herausforderung, denn der MC6800 ist anspruchsvoller als der Z80. Während der Z80 einfach irgendeine Clock akzeptiert, im Ernstfall per Knopfdruck mit Hand, braucht der 680x eine stetige Clock mit einer Mindestfrequenz. Dadurch lässt sich das Spaß natürlich nichtmehr per Hand debuggen, denn selbst die Mindestfrequenz liegt glaube ich bei 100 kHz. Beim Z80 konnte ich noch mit 1 Hz mir die LEDs anschauen... Das geht jetzt natürlich nichtmehr.
Am Anfang wollte ich den 6800 verwenden, der auch noch eine externe Clockschaltung benötigt. Ich bin dann jedoch auf den 6809 umgestiegen, der diese schon integriert hat, weil ich versuchen will eine MMU anzuschließen (und die benötigt Signale die nur der 6809 bereitstellt).
Dann tat ich mich ein bisschen schwer mit der Auswahl des Quarz, denn das Datenblatt war für mich kurz etwas verwirrend. Mein 6809er läuft mit 1 MHz, aber der Input für die integrierte Schaltung muss 4x die Frequenz sein: also 4 MHz. Zudem durfte ich auch erstmal den Unterschied zwischen Quarz, Resonator und Oszillator verstehen. Nachdem ich das aus dem Weg geschafft hatte, konnte ich loslegen. Habe einfach den Chip aufs Breadboard gesetzt und angeschaltet. Das Problem ist: Wie sehe ich, dass er funktioniert? Das einfachste wäre zu checken, ob die 1 MHz Clock läuft. Leider habe ich kein Oszilloskop, habe dann aber einen Logic Analyzer für 10 Euro auf Amazon geholt. Der kann zwar nicht live die Signale ausgeben, aber aufzeichnen und dann ausgeben. Und tatsächlich funktionierte meine Schaltung.
Jetzt wollte ich dem Prozessor mal einen echten Input geben. Dafür schnell eine EEPROM mit 32KB gekauft und einen Programmierer mit dem Arduino Mega geschrieben. Jetzt stellte sich mir noch die Frag wie ein Testprogramm aussehen sollte, denn ich habe ja keinen direkten Output. Die einzige Möglichkeit für mich wäre, den Prozessor irgendwie anzuhalten und das dann nachzuprüfen. Zum Glück hat der 6809 einen SYNC Opcode, der den Prozessor anhält bis ein Interrupt passiert (die ich natürlich manuell nicht zulasse). Das ist eine recht einfache Lösung, dann muss ich nur die Statuslines prüfen. Ein Faktor kommt jedoch noch dazu: Nach einem Reset zieht sich der Prozessor die Startaddresse, wo er anfangen soll auszuführen, aus den obersten zwei Speicherzellen also 0xFFFE und 0xFFFF. Deswegen musste ich das natürlich auch noch einprogrammieren in die EEPROM und sie so anschließen, dass die höchste Speicherzelle der EEPROM für den Prozessor auch bei 0xFFFF ist. Und das hat tatsächlich nach einiger Frickelei und kurzzeitiger Depression (hatte vergessen manche Pins auf HIGH oder LOW zu ziehen, wie DMA Request oder Memory Request) funktioniert.
Hier der 6809 mit der EEPROM unten. Die Verbindungen sind auf diesem Bild noch nicht vorhanden. Stattdessen ist es der Testaufbau, um zu sehen ob die CPU überhaupt funktioniert. Der Datenbus ist auf ein NOP fixiert.
Spoiler anzeigen
Und hier der Output des Logic Analyzer mit meinem Halteprogramm. Man sieht wie die Clock anfängt, und der Reset verarbeitet wird (BS HIGH, BA LOW). Danach werden NOPS ausgeführt (BS und BA LOW). Dann hält die CPU an und wartet auf einen Interrupt (BS LOW, BA HIGH).
Spoiler anzeigen
Hoffe das war ein bisschen interessant und ich werde demnächst wieder häufiger Updates posten.