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
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.

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

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.
Die Auswahl 1 im Option-Menu führt in den Monitor, ein B(ack) im Monitor kehrt zum Option-Menu zurück. Dies erspart den Umweg über das Hauptmenu, was vor allem beim Debuggen hilfreich ist.

Option ROM Menu
BinLoad wartet auf erstes Byte
BinLoad, Transfer beendet
Binary Load / Binary Exec
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 (G6010) oder Basic (EXEC &H6010) gestartet, wartet dann auf das erste Byte. Sobald erkannt, werden die Daten ab der fixen Adresse $0A40 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.

Aus dem gleichen Menu, mit G6013 aus dem Monitor oder EXEC &H6013 aus Basic kann mit EXECUTE das geladene Programm 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.

Basic Funktionstasten setzen
EXEC &H6016 im Basic setzt die Funktionstasten auf andere Werte. Dies ist nützlich nach einer Neu-Initialisierung. Die Einträge sind fix, zum Aendern muss neu assembliert werden.
PF1: "(COM0:68N1F)" für LOAD/MERGE/SAVE von/nach COM0
PF2: ? FRE(0)
PF3: ? TAPCNT
PF6: EXEC &H6010 (Binary Load)
PF7: EXEC &H6013 (Binary Exec)
PF8: EXEC &H6016 (Funktionstasten setzen)

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.