Erstes benutzerdefiniertes Programm für EPS-103
Der nächste logische Schritt beim Versuch, den EPS-103 zu modifizieren, besteht darin, ein kurzes Programm zu schreiben, das in der Einheit ausgeführt werden kann. Natürlich beginnen wir nicht damit, die Original-Firmware neu zu schreiben. An dieser Stelle probieren wir den gesamten Programmentwicklungsprozess einfach an etwas Einfachem aus. Programmierlehrbücher beginnen meist mit „Hallo Welt“. Wir bleiben der Tradition treu und schreiben ein Programm, das diese Inschrift beim Einschalten des EPS-103 auf das Display schreibt.
Die Wahl einer Programmiersprache ist im Allgemeinen einfach. Aufgrund der Größe von EPROM und RAM wird es Assembler sein. Vergessen Sie C oder eine höhere Programmiersprache. Selbst mit aktivierten Optimierungen wird ihr Code immer länger sein. Ein weiterer Grund für die Verwendung von Assembler ist die Tatsache, dass die Original-Firmware ihre Daten noch im RAM hat, die wir nicht beschädigen dürfen. Daher ist es notwendig, die volle Kontrolle über das geschriebene Programm zu haben.
Das bedeutet, dass wir den 8085-Assembler kennen müssen, aber nicht, dass wir alle Anweisungen auswendig gelernt haben müssen. Aber eine Dokumentation wäre sicherlich hilfreich. Im Internet findest du noch viel mehr. Leider ist der 8085-Prozessor aus heutiger Sicht sehr veraltet, und es sind nicht viele Informationen darüber erhalten geblieben. Aus diesem Grund habe ich einige grundlegende Dokumente vorbereitet, die Ihnen den Einstieg erleichtern sollen. Sie finden sie in der Gesamtdatei SDK8085.zip. Ein weiterer Helfer kann ein Simulator sein. Zu meiner Überraschung finden wir heute noch einen 8085-Simulator online. Während Sie durch das Programm gehen, werden Sie sehen, wie einzelne Befehle den Inhalt der Register beeinflussen.
Zum Schreiben des Programms reicht ein beliebiger Texteditor aus. Wichtig ist nur, dass der Redakteur dem geschriebenen Text keine eigenen Tags hinzufügt. Ich benutze gerne PSPad. Die Verwendung der integrierten Entwicklungsumgebung verschieben wir auf später.
Und es ist an der Zeit, mit dem Schreiben des Quelltextes zu beginnen. Natürlich habe ich mich von der Original-Firmware inspirieren lassen. Das Wichtigste ist, den Stack auf die richtige Adresse im RAM zu setzen. Dadurch wird sichergestellt, dass Anweisungen, die den Stack verwenden, keinen anderen Teil des Speichers überschreiben. Deshalb fangen wir damit an. Ich gehe weiter davon aus, dass einige von Ihnen diese Experimente mit der angeschlossenen Motoreinheit EPR-203 durchführen werden. Daher ist es im nächsten Schritt erforderlich, die 8255A-Schaltung zu initialisieren und den PC-Ausgang auf 0 zu setzen. Dies bedeutet, die Motoren auszuschalten. Dann können wir das Display initialisieren und ihm eine Inschrift schicken. Wir beenden die Programmausführung mit einer Endlosschleife. Oder HLT-Anweisungen. In Assembler könnte ein solches Programm so aussehen:
; Hello world
jmp Start
.ORG 0040h
.dseg
mystring .text "Hello world"
.cseg
Start: lxi sp, 4700h ; Set Stack Address
mvi a, 82h ; CW
sta 5803h ; 8255A Write Control Word
xra a
sta 5802h ; 0 -> PortC: stop motors
mvi a, 0Ch ; LCD Command: Display on, cursor off
call sub_1B70 ; Command -> LCD
lxi h, mystring ; Address of text
mvi b, 0Bh ; Number of characters
Loc01: mov a, m
call sub_1B77 ; Character -> LCD
inx h ; Address of next characters
dcr b ; Decrement counter
jnz Loc01
Stop: jmp Stop ; Neverending loop
hlt ; For sure
; Write 1 byte command
sub_1B70: call sub_1B7E ; Wait for LCD ready
sta 4802h ; Write command byte
ret
; Write 1 byte data
sub_1B77: call sub_1B7E ; Wait for LCD ready
sta 4803h ; Write data byte
ret
; Wait for LCD ready
sub_1B7E: push psw
loc_1B7F: lda 4800h ; Read LCD status
ani 80h ; Test bit 7: 0 = ready
jnz loc_1B7F ; if not, repeat
pop psw
ret
.END
Wir speichern den Text in einer *.asm-Datei in einem unserer Arbeitsverzeichnisse. Im nächsten Schritt wird der Quelltext in Maschinencode übersetzt. Dies geschieht in der Regel über die Objektdatei *.obj. Der Zielmaschinencode kann auch im *.bin-Format vorliegen. Das Programm, das diese Arbeit für uns erledigt, heißt Compiler / Linker. Ich habe das Programm tasm.exe verwendet. In der Datei tasm32.zip finden Sie zwei Befehlssatztabellen und Dokumentation. Fügen Sie das Programm dem Arbeitsverzeichnis hinzu. Es kann in der Windows-Befehlszeile einschließlich Win10 ausgeführt werden. Die eigentliche Übersetzung erfolgt mit dem Befehl:
TASM.EXE -t85 -b Test01.asm Test01.bin
Die angegebenen Parameter bedeuten:
- -t85: verwendet die Anweisungstabelle des Prozessors 8085 aus der Datei TASM85.TAB
- -b: erstellt eine saubere Maschinencode-Binärdatei
- Test01.asm: der Name der Quelltextdatei
- Test01.bin: der Name der ausgegebenen Maschinencodedatei
Um die Übersetzung zu starten, müssen Sie ein Kommandozeilenfenster öffnen und in unser Arbeitsverzeichnis mit Compiler und Quelltext wechseln. Um meine Arbeit zu vereinfachen, habe ich eine einfache Datei zum Ausführen von Run.cmd geschrieben. Dank dessen muss ich das Befehlszeilenfenster nicht manuell starten. Die Datei liegt im Arbeitsverzeichnis und der Befehl zur Übersetzung steht in der ersten Zeile. In der zweiten Zeile habe ich cmd /k
eingegeben, wodurch sich das Eingabeaufforderungsfenster nicht selbst schließt. Nachdem die Übersetzung fertig ist, kann ich also eventuelle Fehlermeldungen lesen. Also habe ich diese Dateien in meinem Arbeitsverzeichnis:
- Run.cmd
- TASM.EXE
- TASM85.TAB
- Test01.asm
Die resultierende Binärdatei wird vom Programmierer in den gelöschten EPROM-Speicher geladen. Und das ist alles. Wenn Sie Änderungen im Programmteil der Firmware vornehmen möchten, stehen Ihnen bereits die grundlegenden notwendigen Werkzeuge zur Verfügung. Sie können alle hier beschriebenen Dateien in einem SDK8085.zip-Paket herunterladen.