Entwicklungs-Umgebung

PsPad Progammier Editor mit Dateiauswahl
PsPad Progammier Editor Favoriten und Scriptmenu
PsPad eignet sich hervorragend zur Entwicklung von Programmen für den MPF. Zusammen mit dem ASL-Assembler und TeraTerm, welches für die Kommunikation zuständig ist, entsteht eine sehr komfortable Entwicklungsumgebung für Assembler- und Basicprogramme, die sogar noch unter Windows-XP funktioniert. PsPad ist so konfiguriert, dass abhängig vom aktiven Dateityp die verfügbaren Funktionen im Extern-Tool Menu erscheinen. Die folgenden Dateitypen werden dabei unterstützt:
.AZ8 (ASL Assembler Source)
Konvertieren der vom ASL erzeugten Objektdatei in Binärformat und senden  zum MPF
.BAS
Konvertieren von und zu Basic-Sourcen für das MPF-TinyBasic und senden oder empfangen. Die Makrosprache von TeraTerm übernimmt dabei die Tokenisierung. Ebenso können Basic Sourcen in DB-Statements für BasicExec (siehe unter TinyBasic) konvertiert werden.

Für senden und empfangen ist auf der MPF-1 Seite das Programm RS erforderlich, siehe weiter unten.

Die in PsPad verfügbaren Scripting Funktionen initialisieren beim Starten das Windows Kontextmenu zum Senden/Empfangen und stellen verschiedene Funktionen, die über das Scriptmenu aufrufbar sind, zur Verfügung.
Assembler-Bibliothek

Library Definitionen
Interrupt-Zähler des Interrupt-Test Programms
Die Bibliothek enthält Treiberprogramme und Interrupthandler für die CTC und PIO sowie einige Hilfsroutinen, die das Programmieren in Assembler ein wenig erleichtern. Die Bibliothek kann entweder im oberen Teil des Monitor-EPROMS ab Adresse 0800 (anstelle des Tiny-Basic beim MPF-1B) oder im freien Steckplatz U7 untergebracht werden. Die Definitionsdatei muss von einem Programm, das die Bibliothek verwendet, INCLUDEd werden.
Die Bibliothek kann in zwei Varianten assembliert werden,  für 4k EPROMS mit allen Routinen, oder für 2k EPROMS mit  nur Chip-bezogenen und Interrupt Routinen.
Zum Testen der Bibliotheks-Interrupt-Funktionen ein kleines Programm, das CTC- und PIO Interrupts verwendet, diese zählt und anzeigt.

Dienstprogramme

Rom Menu, Position RS
ROM Menu Utility im RAM des EPB-MPF
ROM-Menu
Dient dem erleichterten Aufruf von Programmen in ROMs, ohne sich die Startadressen merken zu müssen. Es ist für verschiedene Konfigurationen assemblierbar (MPF-1, MPF1-B oder EPB RAM). Alle Konfigurationen haben vier Menupunkte gemeinsam:
'0' springt nach 2000H, dort ist das ROM-Menu in U7 des MPF, sinnvoll nur aus Menus im EPB-RAM.
'7' schaltet den Tasten-Beep ein oder aus, verbleibt im Menu.
'8' löst einen Reset der PIO aus, im Fall eines Absturzes oder Resets in einer Interrupt-Routine. Beended mit HALT, die Tasten MONI-GO führen zurück ins Menu
'9' falls der EPB-MPF Programmer angeschlossen ist, wird ein 2732 EPROM in dessen ZIF-Sockel ins EPB-RAM an 8000H kopiert. Beendet mit HALT, nach MONI-GO  erfolgt ein Sprung nach 8000H.

RS232 Verbindungskabel
Die Schaltung im DSUB-Stecker
Der serielle Anschluss an die PIO
Der serielle Anschluss am ZIF-Sockel des Programmers
RS Menu, checksum receive, system 8255
RS Menu, normal receive, Programmer 8255
RS Menu, transmit, PIO
RS(232)
Empfangen und Senden von Speicherbereichen. Da der MPF über keine UART verfügt, übernimmt der Prozessor das Bit-Timing. Die Uebertragung erfolgt entweder über die 8255 des Eprom Programmers, die PIO oder EAR/SPK des MPF. Das Programm sucht beim Start nach dem Anschluss in dieser Reihenfolge. Mit der STEP Taste kann, während das Menu angezeigt ist, eine neue Suche des Interface veranlasst werden. Damit dies möglich ist, muss zwischen TX und RX eine Diode vorhanden sein. Zusätzlich eine Schutzschaltung um negative und zu hohe positive Spannungen zu verhindern. Die Uebertragungsrate ist auf 1200 Baud fixiert, bedingt durch die Verabeitungszeit für Bit-Banging, Verifizierung sowie Adress- und Checksummenprüfung. Das Ueberscheiben des Systembereichs wird verhindert.
Betriebsmodi
- Empfangen mit Checksumme, dabei sendet der PC die Speicheradresse in den ersten zwei Bytes.
- Empfangen ohne Checksumme, die Speicheradresse muss eingegeben werden.
- Senden, Start- und Endadresse müssen eingegben werden. Als letztes Byte folgt die Checksumme.
Die Auswahl erfolgt beim Programmstart mit '1', '2' oder '3' oder durch Auswahl mit '+' oder '-' und GO ausser das Programm wurde an ORG+3 gestartet.
Einsprungadressen
- ORG+0: Manuelle Auswahl der Funktion, Rückkehr ins Menu
- ORG+3: Empfangen mit Checksumme, ohne Anzeige des Menu, Rückkehr zum Monitor
- ORG+6: Aufruf aus einem anderen Programm, Funktion und Adressen werden durch Register bzw. Speicherzellen übergeben. Rückkehr konfigurierbar.

Anzeige des gefundenen Interface, hier PIO
RH, Eingabe der Startadresse
ReceiveHex
Dieses Programm war urprünglich in RS integriert, musste aber aus Platzgründen, verursacht durch die Interface-Erkennung,  weichen. Es empfängt Intel-HEX Dateien mit automatischer Zuordnung der Speicheradresse, wobei auch Gaps unterstützt werden. Wenn eine Ladeadresse ungleich Null eingegeben wird, ist diese massgebend, Gaps sind in diesem Fall nicht unterstützt.
ReceiveHex verwendet wie RS die Interface-Erkennung, mit STEP während der Adresseingabe kann diese erneut ausgelöst werden. In der Anzeige erscheint 'E' für die 8255 auf dem Eprom Programmer, 'P' für die PIO oder 'I' für die System-8255 (EAR/SPK)
Die Baudrate ist hier durch die erhöhte Laufzeit, bedingt durch Konvertierung und Tests, auf 300 bps beschränkt.

Stoppuhr
Stoppuhr
Verwendet CTC Interrupts als Zeitbasis. Tickt den Lausprecher im Sekundentakt (mit '+' Taste abschaltbar), Start/Stop mit 'GO', Rückstellung mit '0' Taste. Es ist eine erweiterte Version des Beispiels in der Bedienungsanleitung des MPF.

Der EPROM Programmer EPB-MPF
EPROM to RAM
Dieses Progrämmchen funktioniert nur mit dem EPB-MPF EPROM Programmer und erlaubt direktes Kopieren von EPROMS ins RAM des MPF ohne Umweg über die Programmer-Software. So können Programme, die im EPROM gespeichert sind, ins RAM kopiert und ausgeführt werden, vorausgesetzt, sie wurden für an die zu ladende Adresse gelinkt. Der Code passt in den freien Bereich am Ende des EPB EPROMS und hat drei Einsprungadressen:

- 97C0: 2732 EPROM wird nach 8000, ins RAM des Epomers, kopiert.
- 97C2: 2716 EPROM wird nach 8000 kopiert, 8800-8FFF bleiben unverändert.
- 97C4: 2716 EPROM wird nach 2000, ins RAM U7 des MPF kopiert.

Christiani Drucker

Der MPF-1 mit dem Christiani Drucker an der MPF-PIO
Christiani Drucker
Anschluss am EPROM Sockel des Programmers
Der Drucker an der MPF-1 PIO
Schema der Anschlusskabel für EPB-ZIF und MPF-PIO
Da kein MPF Drucker vorhanden ist, aber ein überzähliger Christiani, wie er seinerzeit mit dem Mikroprozessor-Labor ausgeliefert wurde, entstand ein Treiber für diesen Drucker. Er kann sowohl an der PIO des MPF als auch am ZIF-Sockel des Eprom Programmers angeschlossen werden. Der Treiber sucht bei der Initialisierung nach dem Drucker und verwendet die gefundene Schnittstelle. Er bietet Funktionen zum Suchen des Druckers, drucken einer Zeile oder Z-terminiertem Text sowie Zeilenvorschub. Der Treiber lässt sich einfach auf einen beliebigen Parallel-Drucker (z.B. Epson FX-80) anpassen.

Disassembler Listing
HEX Dump
Disassembler und Hexdump
Der Code für Disassembler und Hexump wurde vom PRT-MPF Eprom übernommen, mit einigen Erweiterungen gegenüber der Originalversion. Diese wurden möglich, weil der Christiani keinen Sofware-Character Generator benötigt, er hat ein ROM dafür.

Schreibmaschine
Schreibmaschine
Druckt Text von der RS Schnittstelle auf dem Christiani Drucker. Auch hier wird wie bei RS die Schnittstelle gesucht. Zusätzlich kommt hier das XON/XOFF Protokoll zum Einsatz, wichtig wenn Dateien gesendet werden. Als Experiment mit Interrupts erfolgt die Startbit-Erkennung im PIO Modus mittels Interrupts. Dadurch wird es auch möglich, in diesem Modus den Füllstand des Buffers anzuzeigen.
Als einzige Editierfunktion steht Backspace zur Verfügung, welche das zuletzt eingegebene Zeichen aus dem Buffer löscht. Falls der Buffer leer ist, wird dies durch 'Lc' (Line Clear) angezeigt. Bei Bufferüberlauf leuchtet die grüne LED und folgende Zeichen werden ignoriert. Die LED verlöscht nach einem Backspace wieder. Der Ausdruck einer Zeile (maximal 24 Zeichen) erfolgt nach CR.

Tiny-Basic

Bugfixes
Mit dem MPF-1B wurde ein sehr rudimentäres Basic (TinyBasic) mitgeliefert. Es war mit dem Monitor im 2532 EPROM in U6 (oder als 2716 EPROM in U7) untergebracht. Leider sind darin einige Fehler vorhanden.

LET <var> = P <port>
Dieser Befehl liest den Inhalt eines Z80 Ports in Variable <var>, sofern nicht vorher ein LET P <port> = <Wert>, also eine Port-Schreiboperation,  augeführt wurde. In diesem Fall erfolgt anstelle einer Lese- eine weitere Schreiboperation auf den Port, welcher der Adresse von <var> entspricht. Der Grund dafür ist, dass ein Schreib-Flag im Basic nicht rückgesetzt wird, dies erfolgt erst nach der ersten Leseoperation. Dieses Verhalten führt zu SYS-SP oder einem Systemabsturz...
Work-Around
Unmittelbar nach der letzten Schreiboperation ein LET A0 = P0 einfügen. Dies schreibt einen Wert in Port 0 (Low-Byte der Adresse von A0). Dieser Port ist Port A des 8255, der als Eingang funktioniert. Ein Schreibzugriff ist wirkungslos, ausser dass das Schreib-Flag rückgesetzt wird. Alternativ kann die Basic-Erweiterung verwendet werden.
Zusätzliche Auswirkungen
Der Port-Schreibbefehl verhindert auch die korrekte Funktion von
LET M <adresse> = <Wert> (keine Aktion)
CALL <var> (Absturz)
Nach obenanntem Work-Around funktionieren diese Befehle wieder.

LET P <port> = <var>
Dieser Befehl funktioniert nur einmal, die folgenden schreiben immer den gleichen Wert, auch wenn  sich <var> verändert hat. Bei Verwendung von <Wert> anstelle <var> tritt das Problem nicht auf.
Work-Around
Entweder über ein Maschinenprogramm, welches den Befehl nachbildet (mit LET M = Befehlen einzgeben) oder Verwenden der unten beschriebenen Basic-Erweiterung.

RUN M <adresse>
Erlaubt das Ausführen eines Basicprogramms von beliebiger Adresse. Dies funktioniert aber nicht, wie auch im Basic Operation Manual auf Seite 39 dokumentiert.
Work-Around
Umprogrammieren des Basic (EP)ROMs (ein einziges Bit), sofern ein 2532 EPROM vorhanden ist (sind inzwischen schwer aufzutreiben)

Korrigiertes Basic
Der nachfolgende Link enthält den Sourcecode des TinyBasic, in dem die Fehler behoben sind. Er lässt sich an beliebige Adresse assemblieren. Falls diese nicht im ROM (0800 oder 2000) ist, wird der User-Stack verwendet, damit debuggen möglich wird (kein SYS-SP bei Breakpoints oder Singe-Step). Fertige EPROM Images weiter unten.
Basic Listing
Eingabe der Von-Zeilennummer
Eingabe der Bis-Zeilennummer
Basic-Erweiterung
Beim Starten von Basic mit der Erweiterung erfolgt als erstes ein Basic-Kaltstart. Danach stellt die Erweiterung verschiedene Variablen zur Verfügung und schreibt ein kleines Programm zum Aufruf des Menus und dem Empfangs-Programm über RS232:
- 990: STOP: Stellt sicher, dass ein Benutzerprogramm hier endet
- 997: CALL <adresse>: Wiederherstellen der Erweiterungsvariablen
- 998: CALL <adresse>: Aufruf des RS232 Empfangsprogramms
- 999: CALL <adresse>: Aufruf des Erweiterungs-Menus (Druckerversion)
- 999  CALL <adresse>: Aufruf des RS232 Sendeprogramms (Version ohne Drucker)
Die <adressen> werden vom Assembler je nach ORG automatisch berechnet.

Port schreiben (CALL F)
Ersetzt den Befehl LET P <port> = <var>, der im original-Basic nicht funktioniert. Dazu wird mit Portadresse in F6, den Daten in F7 ein CALL F ausgeführt.

Basic Beep (CALL F0)
Um ein konsistentes Verhalten bei Tasteneingaben mit CALL F4 zu erhalten, kann mit CALL F0 ein Tastenbeep analög dem des Basic augelöst werden.

Leerzeile drucken (CALL F2)
Druckt eine Leerzeile auf dem Christiani Drucker.

Textzeile drucken (CALL F3)
Druckt eine Textzeile auf dem Christiani Drucker. Der zu druckende Text muss zuvor ab der Adresse in F1 abgelegt werden.

Anzeigefunktion (CALL F4)
Basic erlaubt die Datenausgabe nur über den PRINT Befehl, der das laufende Programm anhält, bis CONT gedrückt wird. Die Erweiterung enthält ein Programm, das SCAN1 des Monitors aufruft, ohne auf eine Taste zu warten und dann zu Basic zurückkehrt. Der anzuzeigende Wert wird in F5 gespeichert. Falls eine Taste gedrückt wurde, enthält F6 eine 1 und F7 den Code der gedrückten Taste. CALL F4 muss in einer Schleife verwendet werden, die Anzeige wird dunkler als gewohnt sein, bedingt durch die Geschwindigkeit von Basic.

User Key (CALL F8)
Diese Funktion liefert den Status des USER KEY in F9, wobei eine 1 für Taste gedrückt steht.

Erweiterungsmenu
Das Erweiterungsmenu erlaubt die Bedienung des Christiani-Druckers an PIO oder Eprom-Programmer mit folgenden Funktionen:
- Drucken des ganzen Programms oder eines einzugebenden Zeilenbereichs
- Drucken von 1 oder fünf Leerzeilen
- Aufruf des RS232 Empfangs- und Sendeprogramms
Das Menu ist nur verfügbar, wenn bei der Assemblierung verlangt.
BasicExec
Erlaubt das Ausführen von Basicprogrammen ohne zuvor Basic starten zu müssen. Dies ist allerdings nur möglich, wenn das Programm aussserhalb des Bereichs 1800 - 1E00, z.B. aus einem EPROM, ausgeführt wird, BasicExec kopiert den integrierten Basic-Code in den Basic-Bereich und startet ihn von dort (so wie es RUN M <addresse> tut). Mit Hilfe des Scripts, integriert in der PsPad Umgebug, können DB Statements eines Basic Programms erzeugt werden, die dann von BasicExec INCLUDEd werden.

Monitor mit Hotkeys

Zur Erleichterung der Bedienung des MPF ist ein kleines Programm im unbenutzten Bereich des Monitors untergebracht. Es erlaubt mit Hilfe des USERKEY das Starten von häufig benutzten Programmen. Der geänderte Monitor ist voll kompatibel zum Original.
USERKEY + TAPERD
Startet das RS-232 Empfangsprogramm im Checksummen-Modus (der meistgebrauchte)
USERKEY + TAPEWR
Startet das RS-232 Programm im Menu-Modus
USERKEY + RELA
Startet das Programm an 2000, start von U7, das ROM-Menu
USERKEY + CBR
Schaltet den Tasten-Beep aus und wieder ein
USERKEY + MOVE
Falls der EPROM Programmer EPB-MPF angeschlossen ist, kopiert dieser Hotkey das 2732 EPROM im ZIP-Sockel nach 8000, ins RAM des Programmers. Nach dem Kopieren (HALT Status) kann mit MONI-GO direkt nach 8000 gesprungen werden. Ohne Programmer die Funktion von MOVE.
USERKEY + ADDR
Auch dafür muss der EPB-MPF vorhanden sein. Es erfolgt ein Sprung nach 8000, Start des EPB-RAM. Ohne Programmer Funktion von ADDR.
EPROM Images

MPF-1 Monitor (original)
2516/2716 Monitor EPROM in U6, ohne TinyBasic

MPF-1B Monitor mit Tiny Basic (original)
2532 Monitor EPROM in U6

MPF-1B Monitor mit Tiny Basic
2532 Monitor EPROM in U6, Monitor modifiziert mit Hotkeys, bereinigtes TinyBasic

MPF-1 Tiny Basic (original und bereinigt)
2516/2716 Basic EPROM in U7

EPB-MPF Programmer (original)
2716 EPROM des Programmers

EPB-MPF Programmer mit EPROM to RAM
2716 EPROM des Programmers, modfiziert zum Kopieren von EPROMs ins RAM

MPF-1 Tools, U7
2732 EPROM
- 2000 Menu
- 2100 RS
- 24A0 Basic Extender (Tiny Basic muss in U6 sein)
- 2922 Stoppuhr
- 2A00 Treiber für Christiani-Drucker
- 2BA0 Assembler Bibliothek
2716 EPROM
- 2000 Menu
- 2100 RS
- 24A0 Basic Extender ohne Drucker Support
- 2600 Assembler Bibliothek, reduzierte Version

Disassembler/Hexdump
2732 EPROM, muss mit dem Programmer in dessen RAM kopiert werden.
- 8000 Menu
- 8100 Disassembler
- 8103 Hexdump

Utilities
2732 EPROM, muss mit dem Programmer in dessen RAM kopiert werden.
- 8000 Menu
- 8100 Receive Hex
- 8400 Frequenzzähler
- 8580 Interrupt Test
- 8680 Schreibmaschine
- 8830 Hex-Dec Converter (Basic)