Hallo Zusammen,

rein aus Langeweile und Intresse habe ich vor einiger Zeit schon angefangen in einem Simulationsprogramm einen kleinen Mikrocontroller aus Logikbausteinen zusammenzubauen. Vor kurzem habe ich das Ganze wieder rausgekramt, nochmal neu aufgebaut und einen Assembler geschrieben um den kleinen Mikrocontroller einfach programmieren zu können. Hier sieht man wie er in der Simulation gerade das Blink-Beispielprogramm abarbeitet:

(Volle Auflösung: https://dl.dropboxusercontent.com/u/...Simulation.png)
(Die Schaltung ist schon noch ein gutes Stück größer, ist in Form von Submodulen in den "ICs" versteckt)

Dank des Assemblers lässt sich der Controller auch kinderleicht programmieren, so sieht das Blinkprogramm aus:
Code:
define ledport PORTB

label: main
    copy l0 ledport
    copy l1 ledport
    setPC main
Features des uC:
  • 64 Ausgänge
  • 64 Eingänge
  • 128 Byte Ram
  • ROM für 256 Befehle
  • Ein Befehlszyklus dauert immer 5 Taktzyklen. Dabei werden
    • Zwei Werte miteinander verrechnet (entweder einfache Zahlen oder welche aus Registern/Speicherzellen) und im frei wählbaren Zielregister/-speicherzelle gespeichert
    • Wenn man in ein besimmtes Register speichert wird sogar noch im selben Befehlszyklus ein Sprung durchgeführt falls das Ergebnis Null ist (Skip if Zero) (Und das gibts auch als "Skip if not zero" )


Was noch fehlt:
  • Pointer gehen noch nicht
  • Unterprogramme gehen blos mit der Tiefe 1, indem man sich den ProgramCounter selbst in eine RAM-Zelle speichert und ihn beim Rücksprung da auch selbst wieder rausfummelt -> Stack muss noch eingebaut werden
  • Interrupts
  • Mehr Hardware als nur Ein-/Ausgänge wäre noch nett, z.B. Timer



Das Ganze hat jetzt sehr schnell viel Fahrt aufgenommen und es sehr viel Spaß macht mit dem Ganzen zu Arbeiten. Daher veröffentliche ich das Projekt:
Download: https://dl.dropboxusercontent.com/u/...gisim%20v5.zip
Zum selbst Simulieren wird nur Logisim benötigt (java), ein paar ladbare Beispielprogramme liegen auch bei. Wenn man auch selbst Programmieren möchte braucht man noch Python3 (Weil der Assembler ein Python-Skript ist)
Habe auch Doku geschrieben so gut es geht (Zumindest was Register, Programmierung und Simulation angeht. Der Schaltplan (=Simulation) ist auch viel beschriftet)

Vielleicht findet ja der eine oder andere auch Spaß daran. Über ein paar Verbesserungsvorschläge etc. würde ich mich freuen

PS: Es kann sehr gut sein, dass das eine oder ander etwas komisch oder ungewöhnlich gelöst ist (z.B. zeigt der ProgramCounter im Gegensatz zu fast allen anderen CPUs auf den aktuellen Befehl und nicht auf den nächsten). Das kommt daher, dass ich einfach losgebaut habe ohne mir vorher andere Designs anzusehen..