Hallo zusammen, für mein erstes größeres Arduino-Projekt habe ich einen Emulator des Busch 2090 Microtronic Experimentiercomputers realisiert. Vielleicht kann sich ja ja der ein oder andere noch an den 1981 von Busch veröffentlichten Computer erinnern, und es gibt noch mehr Fans dieses knuffigen 4-Bit-Rechners hier? Details zum Projekt gibt es hier, über Ideen, Feedback und vielleicht sogar Contributers zum Github-Projekt würde ich mich sehr freuen: https://www.michael-wessel.info/microtronic-emulator.html https://github.com/lambdamikel/Busch-2090 Viele Grüße Michael
Kleines Update - inzwischen bin ich auch mal dazu gekommen, meinen Emic 2 Sprachsynthesizer an den Microtronic (Emulator) anzubinden - das funktioniert sowohl mit meinem Emulator, als auch mit dem Original. Busch hatte 1981 schon im Anleitungsbuch einen Sprachsynthesizer für den Microtronic angekündigt - allerdings wurde dieser dann niemals veröffentlicht (wundert mich auch nicht). Nun, 35 Jahre später gibt es sowas nun also ;-) Mehr als 58 Zeichen passen jedoch nicht in den Microtronic-Speicher. Sprachsynthesizer für Original-Microtronic: https://www.youtube.com/watch?v=IkjEVPdRH-s Sprachsynthesizer für Microtronic-Emulator: https://www.youtube.com/watch?v=UR0WBpXFcEU Ich hatte hier ja nachgefragt, wie man am Besten eine "Baud-Konvertierung" von einigen wenigen Baud (Mikrotronik) auf 9600 Baud Seriell (Emic 2) hinkriegt. Das Problem soll hiermit nun etwas konkreter vorgestellt werden. Ich habe einfach einen Arduino Uno für diesen Zweck verwendet, da dies die einfachste Lösung zu sein scheint. Der Mikrotronik sendet den zu sprechenden String für den Emic 2 mittels seiner 4 digitalen Ausgänge an die analogen Eingänge des Arduinos. Ein ASCII-Zeichen wird als 2 Nibbles übertragen, wobei Nibble 1 die Hundert- und Zehnerstelle vom Dezimalcode des ASCII-Zeichens ist, und Nibble 2 die Einerstelle vom Dezimalcode des ASCII-Zeichens ist. Warum Dezimal? Nun, der Datenstrom ist "selbst-taktend" - ich wollte die Null dafür verwenden. So wird also eine Null nach jedem Nibble gesendet, und um daher Nullen im Datenstrom zu vermeiden, addiere ich jeweils +1 zu den beiden Daten-Nibbles. Das gibt dann also 1 bis 10 (Hex A) für Nibble 2, und 1 bis 13 (Hex D) für Nibble 1 im Datenstrom. Das geht zwar nicht für den vollen 8-Bit-ASCII-Umfang, aber für alle relevanten ASCII-Zeichen von 13 bis 127. Ein 'A' = 65 wird dann also als 7 0 6 0 gesendet, und ein 'z' = 122 als D 0 3 0. Der Arduino baut daraus dann wieder einen normalen ASCII-String zusammen, und sendet ihn an den Emic 2 mittels 9600 Baud seriell (nachdem CR empfangen wurde). Die digitalen Eingänge vom Arduino waren für diesen Zweck übrigens komplett unbrauchbar. Ich musste die analogen nehmen, und dann Thresholds für eine händische Analog-Digital-Konvertierung einstellen. Ebenfalls kritisch waren das Timing etc. Insgesamt also eine ziemliche Friemelei. Ich hätte gedacht, dass es dafür eine einfachere Lösung gibt? Ich hatte hier ja schon mal gefragt. Falls jemand eine Idee hat, wie man sowas besser, schneller, eleganter, stabiler -> professioneller hinkriegt, wäre ich sehr interessiert! Das ganze Projekt ist natürlich ein reines Spaß- und Lernprojekt (für mich!). Viele Grüße Michael
Habe fertig :-) Inzwischen sind auch die Step- und Breakpoint-Funktionalität im Emulator vollständig implementiert. Zudem gefiel mir der Emic 2 so gut, dass ich mir einen zweiten zugelegt habe, und ihn fest in den Emulator eingebaut habe. Dieser ist nun nicht über die digitalen Ausgänge des Microtronic-Emulators anzusteuern, sondern über eine "Befehlserweiterung". Zu diesem Zweck habe ich die MOV xx Befehle des Microtronics mit einer "Extra-Semantik" versehen: MOV xx sendet Nibble x an den Emic 2 (als Zusatz-Effekt zum "Kopiere Inhalt von Register x in Register x", was natürlich relativ redundant ist). Somit kann ich ein dezimal kodiertes ASCII-Zeichen xxy als MOV zz, MOV yy (Op-Codes 0zz, 0yy) an den Emic 2 senden, wobei z hexadezimal für xx ist, und damit dann beliebige Texte per Microtronic-Maschinenprogramm sprechen lassen. Der Microtronic-Programmspeicher reicht damit für 126 Zeichen (Emic 2 benötigt Start 'S' und CR-Endezeichen). Zwei Videos gibt's hier: https://www.youtube.com/watch?v=VYxKCnP_3c4 https://www.youtube.com/watch?v=qqeEIFG1vII Natürlich geht das nur mit dem Emulator, nicht mit dem Original. Gruß, Michael
Hallo zusammen, der "Urvater" der Microtronic Emulator-Familie hat einmal ein Update und Bugfixes über die Weihnachtsferien bekommen - das 1. Update nach fast genau 6 Jahren! Glaube zwar nicht, dass das mal jemand nachgebaut hat, aber man weiß ja nie (und inzwischen haben wir ja auch die Nachfolger-Modelle mit echten PCBs: 2nd Generation mit Nokia-Display, Next Generation mit OLED-Display, und Retro-Authentic Edition mit authentischem Taschenrechner-Bubble LED-Display): https://github.com/lambdamikel/Busch-2090/tree/master/busch2090-mega-v4 In erster Linie sind es: - PGM-Programme werden nicht mehr im EEPROM gespeichert, sondern im PROGMEM - Bessere und mehr PGM-Programme - Sprachausgabe abschaltbar - Sprachausgabe-Tinnef wie "Magic 8 Ball" und "HAL9000 Quotes" sind rausgeflogen - Clock 1 Hz ist nun ISR/Timer-basiert (wie auch schon in den anderen Varianten), daher genauer und stabiler - CPU-Throttle Bugfixes (musste doch tatsächlich auch noch mal zum Löteisen greifen und eine GND-Leitung nachlöten... aber alles in allem läuft die fliegende Verdrahtung noch wie am 1. Tag) - CPU-Emulator-Bugfixes von Lilly eingepflegt (Shift Right Carry Bug) - Code-Pflege und kleinere Geschwindigkeitsoptimierungen Ich war doch sehr erstaunt, dass dieser 6 Jahre alte Arduino-Code noch ohne Probleme kompiliert, und sogar "gepflegt" werden konnte. Happy New Year, Michael
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.