Forum: Projekte & Code Busch 2090 Microtronic-Emulator auf Arduino-Basis


von Michael W. (Gast)


Lesenswert?

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

von Michael W. (Gast)


Angehängte Dateien:

Lesenswert?

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

von Michael W. (Gast)



Lesenswert?

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

von Michael W. (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.