FlashHx20 von Norbert Kehrer ist eine Konsolen-Anwendung für Windows (auch XP), die zwei TF-20 Floppylaufwerke und den Displaycontroller in Text und Grafik emuliert. Der PC wird an die serielle Schnittstelle (nicht RS-232) angeschlossen, RX/TX/GND reichen aus. Wenn beim Starten von Basic angeschlossen, wird Disk-Basic geladen.

Assembler mit dem HX-20

Anleitung zum Assembler von J.M. Wald
Anleitung zum Debuggerr von J.M. Wald
Assember / Debugger
Es gibt einen komfortablen Assembler mit Debugger von J.M. Wald als Erweiterung zum integrierten Basic. Dieser läuft in enem 27128 EPROM, dazu ist jedoch die Expansion-Unit zum HX-20 erforderlich. Er wurde auch auch als Kassetten- und Diskversion angeboten, diese sind jedoch nicht auffindbar.

Der Assembler wurde für die HX-20 ROM Version 1.0 geschrieben. Er verwendet eine Funktion zum Auslesen von Datum und Zeit, die in Version 1.1 an einer anderen Adresse liegt. Dieses zeigt sich an der Ausgabe des Listing-Headers, der anstelle von Datum und Zeit lauter '20' ausgibt. Ansonsten läuft des Assembler auch mit ROM V1.1 anstandslos.

Aber auch der Debugger hat dadurch seine Macken. Sobald dieser seit Einschalten gstartet wurde, funktioniert der Monitor nicht mehr korrekt. Dies liegt am TRAP Vektor, der von Basic/Assembler und Debugger verändert wird. Der Debugger wurde so gepatcht, dass diese Aenderung nicht mehr passiert. Als Folge muss im Debugger, wenn Breakpoints verwendet werden sollen, eine Routine (G$BFF5) aufgerufen werden, die den Trap Vektor wiederum für DeBug ändert. Vor Verlassen des Debuggers sollte dieser mit G$BFF0 wieder auf den Monitor zurückgesetzt werden. Diese beiden Routinen sind im unbenutzten Bereich am Ende des ROMS untergebracht.

Auswahl ob Listfile generiert werden soll (nur COM0:)
Auswahl der MERGE Quelle für Assembler Source
Wenn T)ape gewählt, Eingabe der Bandposition
Status nach Assembierung, direkt ausführen oder Monitor
Basic Programm zum Assemblieren
Der oben genannte Assembler ist eine Erweiterung zum Basic. Er wird in einem Basic-Programm, das den Assemblercode enthält, aufgerufen. Damit nicht jedes Assemblerprogramm diesen Basic Teil enthalten muss, hier ein Programm, angelehnt an ein Beispiel aus dem Manual, das den Assemblercode mittels MERGE entweder von Mikrokassette oder COM0 nachlädt, MEMSET berechnet und setzt und dann assembliert. Die Ausgabe des Listings (nur COM0:) wird abgefragt, zum Schluss werden Start- und Endadresse sowie Programmlänge ausgegeben und das assemblierte Programm kann direkt ausgeführt werden. Das Programm ist weder grössen- noch laufzeitoptimiert, es geht hauptsächlich um die Lesbarkeit. Zum Einsparen von Codegrösse können alle Kommentarzeilen mit der Zeilennummer 000 versehen werden.
Das Assemblerprogramm ab Zeile 1000 enthält als erstes noch eine Basic Subroutine, in der globale Parameter wie Programmname und Startadresse festgelegt werden. Zur Identifizierung, ob ein Assemblerprogramm geladen ist, muss auf Zeile 9996 ein RETURN stehen, falls nicht, erfolgt die Abfrage zum Laden des Assemblercodes. Zum Laden eines neuen Assemblerprogramms muss DELETE 1000- ausgeführt und das Programm erneut gestartet werden.

Option ROM

Option ROM
Option ROM Menu 1
Option ROM Menu 2
Normalerweise ist der Sockel 11E im HX-20 nicht bestückt. Er bietet sich daher an, eigene Programme darin unterzubringen, die dann immer verfügbar sind. Alle Programme, auch das Menu selbst, können mit PF5 beendet werden, ausser laufende Load/Save Operationen.
Die Load- und Save Programme sowie das Terminal verwenden 4800,N,8,2 als Uebertragungsparameter, Handshake wird nicht verwendet.

Binary Load, Eingabe Startadresse
BinLoad wartet auf erstes Byte
BinLoad, Transfer beendet
Binary Load
Zur Programmierung des HX-20 in Assembler empfiehlt sich ein Cross-Assembler auf dem PC, da Text editieren mit dem LCD doch etwas mühsam ist.
ASL ist ein Freeware Assembler, der viele verschiedene Prozessoren, so auch den Hitachi 6301, unterstützt. Dies bringt den Vorteil, dass nur ein Assembler für verschiedene Systeme notwendig ist.

Die vom Assembler generierten Objektdateien müssen aber irgendwie in den HX-20 gelangen. Dieser bietet zwar die Möglichkeit, mit LOADM Binädateien zu laden, nicht aber von der RS-232 Schnittstelle.
Hier hilft das Utility BINARY LOAD. Es wird entweder aus dem Menu, dem Monitor (G6013) oder Basic (EXEC &H6013) gestartet. Danach kann die Ladeadresse eingegeben werden (keine Eingabe=0A40). Jetzt wartet BinLoad auf das erste Zeichen von Sender. Sobald erkannt, werden die Daten ab der eingegebenen Adresse gespeichert. Durch einen Timeout wird das Ende der Uebertragung erkannt. Das Programm gibt die zuletzt beschriebene Adresse aus, damit die tiefste von Basic verwendbare Adresse mit MEMSET konfiguriert werden kann.

Binary Save, Eingabe von Start- und Endadresse
Binary Save
Auch SAVEM oder S aus dem Monitor unterstützen die serielle Schnittstelle nicht. Hier springt BinSave in die Bresche. Nach Eingabe von Start- und Endadresse werden die Daten über COM0: gesendet. Bei installierter Extension-Unit darf der Bereich $0030 bis $0032 nicht gewählt werden, bei Zugriff auf diese Adressen wird die ROM Bank zwischen HX und Extension Unit umgeschaltet, dies führt zu einem 'Hänger', weil das Programm im HX ROM Bereich läuft. BinSave kann auch aus Basic mit EXEC &H6016 oder aus dem Monitor mit G6016 gestartet werden.

Binary Exec, Eingabe der Startadresse
Binary Exec
Aus dem gleichen Menu, mit G6019 aus dem Monitor oder EXEC &H6019 aus Basic kann mit BinaryExec ein Maschinenprogramm nach Eingabe der Startadresse direkt ausgeführt werden. Damit dies funktioniert, muss in den ersten zwei Bytes die Kennung $0101 stehen (zwei NOPs). Dies verhindert Abstürze, wenn kein Programm geladen oder dieses von Basic überschrieben wurde. In diesem Fall erfolgt ein BEEP und nichts weiter passiert.
Vor der Rückkehr zum Aufrufer wird mit Hilfe des Stackpointers entschieden, ob es Basic, der Monitor oder das Option Menu war. Je nachdem wird in den Interpretermodus geschaltet oder im Maschinensprache-Modus verblieben.

Terminal Help1
Terminal Help2
Terminal
Dieses Progrämmchen ist ein Terminal mit optionaler Ausgabe der gesendeten und/oder empfngenen Daten auf dem eingebauten Drucker des HX-20. Einsprungadresse ist $601C.

Uhr und Stoppuhr
Clock
Und noch eine kleine Spielerei. Das Uhrenprogramm aus der Anleitung des J.M. Wald Assemblers, erweitert mit einer Stoppuhr. Diese kann mit SPACE gestartet und gestoppt, mit 0 rückgesetzt werden. Die Uhr verwendet den Clock-Interrupt des HX-20. Einsprungadresse ist $601F.

Assembler Hilfsroutinen
Im Option Rom sind ein paar Hifsroutinen vorhanden, die für eigene Assemblerprogramme verwendet werden können. Im Download des Option-ROM ist das Listfile enthalten, darin sind Addressen und Funktion der Routinen dokumentiert.

Basic Utilities

Tape-Directory
Tape Directory
Die Idee stammt aus dem Web, leicht abgeändert.
Ausdruck des Mikrokassetten Inhalts. Nach Eingabe des Kassettennamens und der Seite (A oder B) wird das Band zurückgespult und dann nach Dateien gesucht. Sobald gefunden, erfolgt der Ausdruck wie im Bild gezeigt. Wenn eine Objektdatei (Maschinenprogramm) gefunden wird, erfolgt eine Abfrage von Start- und Endadresse, die dann ebenfalls gedruckt wird. Dies soll das Setzen von MEMSET erleichtern, ist dieser nämlich zu niedrig, erscheint nach LOADM ein BD Error und MEMSET muss korrigiert werden.
Damit das Programm nicht bis zum Kassettenende durchläuft, ist ein Test auf die Datei TAPEEND eingebaut. Wird diese gefunden, erfolgt der Ausdruck der Bandposition und das Programm stoppt. So ist auch ersichtlich, ab welcher Position ein neues Programm gespeichert werden kann.
TAPEEND kann einfach mittels OPEN "O",1,"TAPEEND" dann CLOSE #1 angelegt werden.

ROM Images

Die Textverarbeitung SkiWriter wurde bei späteren Modellen des HX-20 mitgeliefert. Sie unterstützt allerdings nur das LCD Display, nicht den externen Monitor. Das 2764 EPROM passt in den leeren Sockel  11E. Leider ist keine Dokumentation dazu auffindbar.