Bau eines Rechners - von Grund auf

  • In letzter Zeit habe ich mich recht intensiv mit Mikroprozessoren beschäftigt.

    Ich kenne jetzt die Funktionsweise der klassischen CPUs Z80 und 6502 recht gut.

    Geplant über den kommenden Winter ist der Bau eines Computers, der möglichst langsam und anschaulich arbeitet. Die beiden genannten CPUs lassen sich mit wenigen Hertz betreiben und sollten somit ideal dafür sein.

    Dazu muss ein EEPROM (oder auch ein EPROM mit Sichtfenster) mit Assemblercode gefüttert werden. Als Ausgabeeinheit werde ich ein LC-Display verwenden. Die haben ne standardisierte Schnittstelle.

    Als "Turbotakt" soll der Computer mit 1 MHz betrieben werden können.

    Ähnlich zum Uhrenprojekt werde ich hier immer wieder posten und den aktuellen Stand mitteilen.

    "Du bist und bleibst a Mensch und du kannst eben net deine menschlichkeit überwinden."

    Dennis_50300

  • Cool, das klingt sehr interessant! :)

    Ich habe früher gerne Bücher über die Anfangszeiten der Computertechnik gelesen und daher verfolge ich Dein Projekt gerne. :)

    Könnte dann auch so etwas wie Basic darauf laufen?

  • BASIC?

    Ich denke eher nicht. Mit nem 4x20 Display macht das auch keinen Spaß. Die Programmierung wird rein in Assembler sein, oder, wenn möglich, in C. C ist die einzige Hochsprache, die ich einigermaßen beherrsche.

    Assembler ist viel einfacher, wenn man ne Befehlsliste hat und rein auf elektronischer Ebene denkt. Lade ich z.B. in PORTB die Folge 0x55, so habe ich ein schönes Muster an den Ausgängen (1010101, glaube ich).

    Primäres Ziel ist es, eine Textausgabe auf dem Display zu erzeugen, ein "Hello, world"-Programm sozusagen. Der Rest kommt später.

    Ich habe mir auch diverse Videos im Netz dazu angesehen.

    Ich habe 64 KB SRAM und nen 128 KB EEPROM für die Software. Das sollte genügen. Speichermedien brauche ich nicht. Das kann irgendwann mal in der fernen Zukunft dazukommen.

    Ein minimalistisches Lernsystem ist eher das, was ich mir vorstelle.

    "Du bist und bleibst a Mensch und du kannst eben net deine menschlichkeit überwinden."

    Dennis_50300

  • Nö.

    Ich werde auf meinem normalen Rechner die Software schreiben, übersetzen, aufs EEPROM brennen und dann auf dem kleinen Ding laufen lassen.

    Das heißt, ich kann möglicherweise auf C zurückgreifen, wenn ich einen passenden Compiler dazu finde. Das ist aber nur nebensächlich. Im Grund gehts eher ums verstehen der Rechentechnik.

    "Du bist und bleibst a Mensch und du kannst eben net deine menschlichkeit überwinden."

    Dennis_50300

  • So.

    Ich denke, ich werde den MOS 6502 verwenden. Mein Exemplar ist von 1983, also 37 Jahre alt.

    Als erstes erfolgt ein Probeaufbau aufm Steckbrett um zu sehen, was das Ding macht.

    Teil eins ist ein Taktgenerator, wahrscheinlich mit NE555, der maximal 300 kHz schafft.

    Es soll ein manuelles Weitertakten per Knopfdruck eingefügt werden. Dies erleichtert ein Fehlersuchen erheblich.

    "Du bist und bleibst a Mensch und du kannst eben net deine menschlichkeit überwinden."

    Dennis_50300

    Einmal editiert, zuletzt von CryptonNite (29. September 2020 um 08:18)

  • Cool, der Chip der auch in meinem Commodore 64 steckt. ;)

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

  • Laut Datenblatt soll meine Variante (ein Klon namens SY6502, denn originale sind selten und meist teuer) 2 MHz können. Die wird er aber niemals sehen.

    Das System soll möglichst langsam laufen, damit es einfacher nachvollziehbar bleibt. Erst, wenn z.B. nen Programm vollständig funktioniert, soll das Ding mit 1 MHz laufen.

    Für Spiele usw. wird der Rechner nicht geeignet sein. Es ist nur so ne technische Spielerei. xD

    "Du bist und bleibst a Mensch und du kannst eben net deine menschlichkeit überwinden."

    Dennis_50300

  • So...

    Langsam gehts los.

    Auf dem Steckbrett ist heute eine Schaltung zum Erzeugen des Taktes entstanden. Das ist nichts besonderes, denn es wird hier mehrfach ein NE555 genutzt. Grundlegend hat der NE555 drei Betriebsarten (und ne riesige Menge an Hackereien), die hier alle zum Einsatz kommen.

    Zum Erzeugen der Rechteckspannung wird er hier im astabilen Modus geschalten, hat also keinen stabilen Zustand. Er ändert ständig seinen Pegel zwischen 0 und 1. Die Geschwindigkeit ist mit einem Trimmer im Raum von 4 Hz bis rund 2,5 kHz veränderlich gemacht. Warum so langsam? Um bestimmte Dinge und Vorgänge sehen zu können.

    Als zweites arbeitet ein weiterer NE555 als sogenanntes "Monoflop", es hat also genau einen stabilen Zustand und der ist 0. Drückt man den Taster rechts daneben, so erzeugt das genau einen Impuls, der dazu noch prellfrei ist. Damit kann ich händisch weiterschalten. Macht sich gut zur Fehlersuche.

    Der Taster muss prellfrei sein, damit man auch sicher genau einen Schritt machen kann.

    Zu guter Letzt kommt ein dritter NE555 im bistabilen Modus zum Einsatz. Wie der Name schon sagt, gibt es zwei stabile Zustände: 0 und 1, je nach dem. Damit kann ich den Schalter prellfrei bedienen und das Signal in der nachfolgenden Schaltung verarbeiten.

    Diese Schaltung macht aus den drei Signalen ein steuerbares Taktsignal. Am Schalter kann ich zwischen Normaltakt und manuellem Takten umschalten. Diese Schaltung ist mit 4 NOR-Gattern aufgebaut. An deren Ausgang ist ne Lumi zur Kontrolle angebracht.

    Der 6502 bekommt sein Taktsignal an Pin 37, ein paar weitere Pins müssen beschalten werden. Am Adressbus der CPU sind erstmal ein paar Leuchtdioden angebracht, damit ich überhaupt etwas sehen kann. Ein Reset-Knopf ist auch da.

    Die CPU scheint intakt zu sein, da ein paar Sekunden nach dem Start (je nach Taktfrequenz) sich ein wiederkehrendes Muster einstellt. Die CPU möchte auch etwas RAM und ein paar Befehle haben... RAM und ROM habe ich da. Ich habe auch diese Erweiterung in Form des 6522 da, die dann noch angeschlossen werden soll.

    Experimenteller Aufbau

    Funktioniert, auch mit 4 Hz.

    "Du bist und bleibst a Mensch und du kannst eben net deine menschlichkeit überwinden."

    Dennis_50300

  • Dem Prozessor Arbeit geben

    Beim Aufbau oben ist absichtlich ein kleiner Fehler drin. Die Anschlüsse für den Datenbus sind nicht angeschlossen, sie befinden sich also in der Schwebe (sie "floaten"), sind mal 0, mal 1. Dadurch macht der Prozessor irgendwelchen undefinierten Mist und die Lumis am Adressbus leuchten eher zufällig.

    Damit sein Verhalten vorhersagbar ist und auch eine kleine Funktionsprüfung möglich ist, braucht der Prozessor ein Programm, daß er abarbeiten kann. Der Aufbau hier besitzt weder RAM noch ROM, somit muss das "Programm" hart geklemmt werden. Dazu kann man die Pins 33 bis 26 (DB0 bis DB7) entweder auf HIGH oder auf LOW ziehen. Zur Strombegrenzung mache ich das mit ein paar 1kOhm- Widerständen.

    Das Programm ist ganze 8 Bit groß und dessen Inhalt ist 11101010. Im Prinzip liegt es von rechts nach links direkt am Datenbus an.

    Wandelt man diese Binärzahl um, so ist sie 234 dezimal und EA hexadezimal. Schaut man in die Matrix der moderneren Variante W65C02S von WesternDesignCenter (ein tolles Datenblatt), wo der Schnittpunkt zwischen "E" und "A" ist, dann landet man bei dem OpCode "NOP". "NOP" steht für "No Operation", also "mache nichts".

    Der Prozessor macht also nichts.

    Er fängt nach der Initialisierung, die 7 Takte benötigt, an, auf einer bestimmten Adresse am Adressbus nach den dazugehörigen Daten auf dem Datenbus zu sehen. Da mein Programm nichts macht, zählt der Prozessor den Adressbus hoch und genau das kann ich durch die LEDs am Bus sehen.

    Hätte ich jetzt z.B. ein ROM angeschlossen, könnte ich den Prozessor mit Programmen füttern, die der Prozessor Schritt für Schritt abarbeitet.

    Der Prozessor kann auf dem Datenbus nicht nur lesen, er kann auch darauf schreiben und somit seine Ergebnisse z.B. im RAM speichern, damit sie später wieder benutzt werden können. Dazu komme ich aber später irgendwann.

    Das "Programm" liegt am Datenbus an und man erhält quasi einen Zähler von 0 bis 65535 (16 Bit). Habe nur 8 Bits mit LEDs bestückt.

    Der Datenbus oben ist 8 Bit breit, daher ist es eben ein 8-Bit-Prozessor.

    Wandelt man die Binärzahl am Datenbus in Hexadezimal um, erhält man EA, daß dem NOP-Befehl entspricht.

    "Du bist und bleibst a Mensch und du kannst eben net deine menschlichkeit überwinden."

    Dennis_50300

    2 Mal editiert, zuletzt von CryptonNite (28. Dezember 2020 um 14:45)