Assembler-Bibliothek

Der Monitor des MPF stellt viele nützliche Funktionen zur Verfügung, die von eigenen Programmen benutzt werden können. Allerdings fehlen Routinen zur Unterstützung der Chips auf der IOM Erweiterung (PIO, CTC und UART). Zudem können die Monitor-Routinen nicht mit laufenden Modus-2 Interrupts benutzt werden, bedingt durch Schaltungsfehler auf dem IOM sowie dem Printer (siehe weiter unten). Aus diesem Grund ist eine Bibliothek entstanden, die diese Lücken zu schliessen versucht. Sie muss an Adressen xx00 assembliert werden, sie enthält Sprünge über I/O Addressbereiche, die bei Interruptbetrieb im Modus 2 Abstürze verursachen. Zudem muss die Vektortabelle bei xx00 beginnen.
Die Bibliothek wird im EPROM des IOM, U4, untergebracht, anstelle der dort vorhandenen Demoprogramme.

Interrupt-Betrieb mit dem IOM-MPF und dem PRT-MPF

Die Monitor-Routinen dürfen bei akiven Mode-2 Interrupts generell nicht aufgerufen werden, unregelmässige Abstürze sind die Folge.
Im Manual des IOM wird erwähnt, dass auf dem Printermodul ein Design-Fehler existiert, der verhindert, dass Interrupts zuverlässig funktionieren. Das Signal M1 des Z80 wird bei der Dekodierung der I/O Ports nicht berücksichtigt. Dies führt dazu, dass das Printerboard bei einem Interrupt-Acknowledge Zyklus seine Daten auf den Bus legt und die vom Gerät, das den Interrupt angefordert hat, verfälscht, sofern die ausgeführte Adresse beim Auftreten des Interrupts xxCA oder xxCB (die Portadressen des Printerboards) sind. Die einzige Lösung des Problems ist, entweder die Speisung der Druckerkarte zu unterbrechen oder sämtliche OpCodeadressen, die mit CA oder CB enden, zu überspringen. Das Einfügen von NOPs, wie im IOM-Manual beschrieben, funktioniert nicht zuverlässig.

Aber das ist nur die halbe Wahrheit. Der gleiche Fehler existiert auch beim IOM. Hier betrifft es die 8251 USART und den DIP-Schalter. Die USART ist standardmässig nicht bestückt, darum wurde es vielleicht nicht beachtet.
Auch hier fehlt M1 und für den DIP-Schalter /RD zur Decodierung der I/O Adressen. Für CTC und PIO spielt dies keine Rolle, da diese die Decodierung mit M1 selbst erledigen. Anders beim USART und dem DIP Schalter. Diese legen frisch-fröhlich ihre Daten auf den Bus, sobald ein Interrupt-ACK Zyklus im Adressbereich xx60 - xx6F (der 8251 belegt IO-Adressen 60 und 61, der DIP Schalter 6C) ausgeführt wird. Der USART dürfte dies eigentlich bei inaktivem /RD nicht tun. Das Datenblatt des 8251 gibt keine Auskunft über das Verhalten, wenn /CS akiv und /RD UND /WR inaktiv sind, was ja bei einem INTACK der Fall ist. Möglicherweise ist dies ein verbotener Zustand. Im Anwenderprogramm darf zwischen xx60 und xx6F kein Code sein, der mit Interrupts unterbrochen werden kann. Dies ist auch der Grund, warum die CTC Demo des original IOM EPROMs abstürzt. Nach Verschieben in einen nicht betroffenen Adressbereich oder bei entferntem USART funktionierts.

CTC un PIO sind ausgelegt für den Betrieb im Interruptmodus 2 der Z80. Falls aber nur eine Interruptquelle verwendet wird, lässt sich auch Modus 1 nutzen, hier werden die Daten während des Acknowledge Zyklus ignoriert, es passiert kein Absturz. Die oben erwähnten Sprünge über I/O Adressen sind nicht notwendig. Die Adresse des Interrupthandlers muss in F001/02 stehen. Es muss darauf geachtet werden, dass der Original-Inhalt (0066) beim Beenden des Programms zurückgeschrieben wird, ansonsten springt ein RST7 zum Interrupthandler, der möglicherweise nicht mehr vorhanden ist. Die Bibliothek enthält eine Routine, die dies erledigt.

Dienstprogramme

RB-ReceiveBin, RH-ReceiveHex, SB-SendBin, BL-BasicLoad
SW-Stopuhr, ED-Editor, BC-BasicKalt, BW-BasicWarm
VM-VC1541 ML, VB-VC1541 Basic
EPROM Menu
Das Menuprogramm erlaubt das Starten von Programmen im IOM und PRT ROM mit nur einem Tastendruck. Zur Verfügung stehen R)cvBin, S)endBin, ReceiveH)ex, V)C-1541, StopW)atch, TextE)ditor und B)asic. Space wechselt zwischen den Menuzeilen. Die Aufrufe von RcvBin und SendBin können mit CTRL-R oder CTRL-S variiert werden, es erfolgt eine Abfrage ob A)ssember oder B)asic Programme empfangen oder gesendet werden sollen.
Standardmässig liegt es im freien EPROM Sockel des PRT-MPF an 7000. Der Aufruf des Menus geschieht mit G 7000 (oder CTRL-B mit gepatchtem Monitor, siehe unten). Basic/Forth Kalt- und Warmstart sind ebenfalls im Menu enthalten, für den Fall, dass der gepatchte Monitor verwendet wird und dadurch CTRL-B dieses nicht mehr startet. Die angezeigten Programme variieren, je nachdem, ob das IOM Board vorhanden ist oder nicht.

Text Zeileneditor
Die Suchfunktion
Eingabe Zeilenbereich für Drucken
Das Load/Save Menu
Ausdruck auf dem MPF-Printer
Text Editor
Ein einfacher Editor für Texte mit blinkendem Cursor. Unterstützt verschiedene Funktionen wie Copy/Paste (zeilenweise), Einfügen/Ueberschreiben (aktiver Modus duch Form des Cursors erkennbar), Cursorbewegung links/rechts, Sprung an Zeilen/Text Anfang oder Ende oder an definierbare Zeilennummer, Textsuche, backup/restore einer Zeile, einfügen/löschen von Zeilen, drucken eines Zeilenbereichs und natürlich Laden und Speichern von bzw. auf Band, USART oder VC-1541, falls ein IOM vorhanden ist. Als Textspeicher wird automatisch das RAM des IOM, sofern vorhanden, verwendet, ansonsten jenes des MPF.
Laufschrift
Dieses Progrämmchen wurde in den 80ern für eine Ausstellung erstellt. Es zeigt Texte als Laufschrift an. Die überarbeitete Version ist mit den Textdateien des Editors kompatibel und verfügt über eigene Lade-Funktionen von Kassette, USART oder VC-1541. Scroll-Geschwindigkeit und Anzeigezeit lassen sich mit den Pfeiltasten verändern, mit SPACE kann der Ablauf angehalten werden.

Die Stopp-Uhr
Stoppuhr
mit Anzeige von Hundetstel-Sekunden (nur im Stop-Modus). Verwendet CTC Interrupts als Zeitbasis. Das Programm muss an Adressen xx00 assembliert und geladen werden, andernfalls erfolgen Abstürze. Es enthält Sprünge über I/O Adressen, die im Interruptbetrieb Probleme verursachen (siehe oben).

Receive-BIN, Eingabe der Startadresse
Receive-BIN, Uebertragung beendet
Receive-BIN, Verhindern des Ueberscheiben des System-RAM
ReceiveBin
Empfangen von Binärdateien. Dies erlaubt das Erstellen von Programmen für den MPF mit externen Tools. Die Baudrate ist auf 4800 fixiert, damit ein Betrieb ohne Handshake möglich ist. Das Programm erfragt beim Start die Ladeadresse, ohne Eingabe wird F000 verwendet. Danach warten auf das erste Datenbyte. Sobald erkannt,  wird ein Timeout aktiv. Läuft dieser ab, beendet das Empfangen und Start/Endadressen werden ausgegeben. Während des Empfangens werden die Daten verifiziert und ein Ueberschreiben des Systembereichs geprüft. Tritt ein Fehler auf, erfolgt eine entsprechende Fehlermeldung mit Adresse.
Zusätzlich existieren weitere Einsprungadressen, die es ermöglichen, auch Texte des MPF-Editors und Basicprogramme zu laden. Dabei werden die Parameter des Editors bzw. Basic ebenfalls übertragen, vorausgesetzt, die empfangene Datei wurde mit SendBin erstellt. Als Ladeadresse wird jene im Parameterblock verwendet, es erfolgt keine Abfrage. Nach erfolgreicher Uebertragung erfolgt ein Sprung zum Editor- bzw. Basic Warmstart.
Eine weitere Einsprungadresse ist gedacht für die Verwendung von ReceiveBin aus Userprogrammen. Dieses muss die Startadresse vor Aufruf an eine bestimmte Adresse schreiben, eine Abfrage entfällt. Details dazu in den UsageNotes.

Send-BIN, Eingabe von Start- und Endadresse
Send-BIN, Uebertragung beendet
SendBin
Erlaubt das Senden eines beliebigen Speicherbereichs über die serielle Schnittstelle auf dem IOM Board. Die Baudrate ist 4800 bps. Verwendet RTS/CTS Handshake. Wie Receive-Bin verfügt SendBin über verschiedene Einsprungadressen, die es erlauben, Editor- oder Basic-Texte zu senden. Dabei werden die Systemdaten non Editor bzw. Basic ebenfalls gesendet, die Eingabe von Start- und Endadresse entfällt.
Eine weitere Einsprungadresse ist gedacht für die Verwendung von SendBin aus Userprogrammen. Dieses muss Start- und Endadresse vor Aufruf an bestimmte Adressen schreiben, eine Abfrage entfällt. Details dazu in den UsageNotes.

Receive-HEX wartet auf erstes Byte
Receive-HEX, Uebertragung beendet
Receive-HEX, Zeilen-Checksummenfehler
ReceiveHex
Dieses Programm empängt Intel-HEX Dateien. Die Daten werden an die Adressen, die in der HEX Datei definiert sind, geladen, Gaps sind unterstützt. Die Zeilen-Checksummen werden geprüft, ebenso wie Ueberscheiben des Systembereichs und Verifizierung. Durch den höheren Software Aufwand und die daruch längeren Laufzeiten ist die Baudrate auf 1200 fixiert, um einen Betrieb ohne Handshake zu ermöglichen. Nach Erkennen eines Ende-Records werden Start- und Endadressen angezeigt, bei einem Fehler eine entsprechende Meldung mit Adresse.

Anzeige der Interrupt-Zähler in HEX und Dezimal
Zeileneditor mit Text, HEX und Dezimaleingabe
Die Verdrahtung zur Visualisierung der Interrupts
Library Test
Testprogramm zum Debuggen der Library-Routinen. Bei freigegebenen Interrupts (SW-8 ON) laufen vier Interrupts simultan (3x Timer, 1x PIO). Über Timer-Callbackfunktionen werden PA0-PA3 des PIO im Interrupt-Kontext geschaltet, PA4-PA5 im Mainloop durch Abfrage der Interrupt-Zähler. Der PIO Pin PA7 ist als Eingang konfiguriert und löst einen Interrupt bei positiver Flanke aus. Dieser wird über PA6 im Interrupt-Kontext signalisiert.
Aus dem Menu können Delay-Kalibrierung, Anzeige der Interrupt-Zähler, der Zeileneditor für Text, Hex- und Dezimaleingabe sowie UART-Loopback augerufen werden, um das Verhalten mit verschiedenen Interruptlasten zu testen.
Das Programm muss an Adressen xx00 assembliert und geladen werden, andernfalls erfolgen Abstürze. Es enthält Sprünge über I/O Adressen, die im Interruptbetrieb Probleme verursachen (siehe oben).

Commodore VC-1541 Floppy am MPF-1P

Die Commodore VC-1541 Floppy
Das IEC Interface im IOM-MPF
Das Schema des IEC Interface
Erforderliche Hardware
Die VC-1541 ist ein kompletter Computer mit eigener 6502 CPU, eine 'intelligente' Floppy. Die Kommunikation mit dem Host (VIC-20 oder C-64) erfolgt über eine Commodore-eigene IEC Schnittstelle mit nur vier Leitungen, ATN, CLK, DATA und GND, wovon CLK und DATA bidirektional betrieben werden. Dazu ist ein Open-Drain Treiber notwendig, wie im Schema gezeigt. Zusätzlich ist eine Reset-Leitung vorhanden, die Floppy wird bei jedem Programmstart RESETed. Dies kann jederzeit auch mit dem Taster ausgelöst werden.

MC Emuf-Sonderheft 04/84
Beschreibung des seriellen Commodore IEC Protokolls
Menu: LD-Load, VY-Verify, SA-Save, DI-Directory
Menu: LA-LoadAddress, ER-Fehlerkanal, CM-Kommando
Fehlerkanal nach Reset
Eintrag im Directory
Directory Ausdruck
Das 2716 EPROM in U3 anstelle des 6116 RAMs
Die Software
Im MC Emuf-Sonderheft 04/84 wurde ein Programm beschrieben, mit dem die 1541 an einem Z-80 System zu betreiben ist. Hier ist die angepasste und erweiterte Version für den Mikroprofessor mit IOM-MPF. Das Programm wird in einem 2716 EPROM anstelle des RAM an D800 auf dem MPF-IOM untergebracht. Das 2716 passt ohne Hardwareänderung in den 6116 RAM Sockel. Nach Start mit G D800 (oder V aus dem ROM-Menu) erfolgt ein Reset des Laufwerks mit Prüfung auf Vorhandensein, falls nicht 'VC-1541 NOT PRESENT'. Nach Ausfürung der Kommandi wird, falls ein Fehler aufgetreten ist, der Fehlerkanal gelesen und angezeigt. CONTRL und SHIFT beendet das Programm, sofern im Menu, andernfalls die Eingabefunktion. Eine laufende Aktion (Load/Verify/Save) kann nicht abgebrochen werden. Das Menu verfügt über die folgenden Funktionen:
L-LO
Laden einer Datei von Diskette. Nach Eingabe des Dateinamens werden Dateityp un Ladeadresse von Diskette gelesen und als <adresse> LOAD  type angezeigt. Bei Typ bI)när kann die Adresse mit CTRL-A geändert werden.  Die Typen A)ssember und E)ditor verwenden die in den Systemdaten gespeicherten Adressen. Während dem Laden wird geprüft, ob das Schreiben ins RAM erfolgreich war (<adresse> COMPARE ERROR) und am Ende erfolgt ein Prüfsummentest (<adresse> CHECKSUM ERROR).
V-VY
Vergleichen einer Datei mit Speicherbereich. Bein Binärdateien wird die in der Datei gespeicherte Anfangsadresse verwendet, bei den anderen Typen die Ladeadresse aus den aktuellen Systemdaten. Bei Ungleichheit Fehlermeldung <adresse> VERIFY ERROR.
S-SA
Nach Abfrage des Dateinamens Eingabe des gewünschen Dateityps (I-BIN A-ASM B-BAS), bei bI)när zusätzlich noch Start- und Endadresse. Die Typen A)ssembler und B)asic verwenden die im Systembereich vorhandenen Adressen und der Systemereich selbst wird mitgespeichert. Die Checksumme ist das letzte Byte.
D-DI
Listet das Inhaltsverzeichnis der Diskette zeilenweise. Nach jeder Datei muss eine Taste gedrückt werden. Ist dies ein CTRL-P, wird die angezeigte und alle folgenden Einträge auf dem PRT-MPF (sofern verfügbar) ausgedruckt.
F-FI
Auslesen und Anzeige der in einer Datei gespeicherten Ladeadresse sowie des Dateityps.
E-ER
Auslesen und Anzeige des VC-1541 Fehlerkanals. Nur die ersten 20 Zeichen werden angzeigt.
C-CM
Eingabe und Senden eines beliebigen Kommandos an die Floppy. Dies kann z.B. 'N:NAME,ID zum Formatieren, R:neu=alt zum Umbenennen von Dateien, V für VALIDATE oder jedes andere Kommando sein. Die Länge ist jedoch auf 16 Zeichen beschränkt.
Verwendung mit Editor/Assembler
Texte des eingebauten Editors verwenden den Dateityp A (für Assembler). Bei der Typabfrage nach S-SA A-ASM wählen. Dateityp, Editor- und Assembler-Systemdaten und der Text selbst werden dann auf Diskette geschrieben. Beim Laden einer Editor-Datei erfolgt keine Adressabfrage und nach erfolgreichem Laden wird nach Beenden des Programms ein Editor-Warmstart ausgelöst.
Verwendung mit Basic
Zum Speichern von Basic-Programmen muss nach Auswahl von S-SA aus dem Menu Dateityp B-Basic gewählt werden. Der von Basic belegte Speicherbereich (FED9H Startadresse, FEDBH Endadresse) wird nach dem Dateityp und den Systemdaten auf Diskette geschrieben. Beim Laden einer Basic-Datei erfolgt keine Adressabfrage und nach erfolgreichem Laden wird nach Beenden des Programms ein Basic-Warmstart ausgelöst. Dabei ist es notwendig, dass Basic seit Systemstart bereits einmal gestartet wurde.
Wenn das Programm direkt aus Basic (mit CALL 55296) ausgeführt wird, erfolgt beim Speichern keine Typabfrage und nach Beenden in jedem Fall ein Basic-Warmstart.
Verwendung aus Userprogrammen
Der Treiber ist so aufgebaut, dass Funktionen (Load, Save, Directory ...) einzeln augerufen werden können, ohne Umweg über das Menu. Dies wurde z.B. im Text-Editor und der Laufschrift (siehe oben) so implementiert. Details zu den einzelnen Funktionen sind in den Usage-Notes dokumentiert.

Monitor Patch

Der Drucker druckt bei jedem Einschalten des Systems die Zeile *** MPF-I-PLUS ***. Dies ist reine Papierverschwendung. Dieser Ausdruck wurde entfernt, ebenso der Tasten-Beep.
Normalerweise startet CTRL-B das Programm im ROM an 2000, Basic oder FORTH. Dies wurde durch einen Sprung nach 7000, das ROM-Menu auf dem PRT-MPF, ersetzt. Ist das ROM nicht vorhanden, wird CTRL-B ignoriert. CTRL-C, Basic Warmstart, ist nicht mehr verfügbar.

ROM Images

Image für das 2732 EPROM im freien Steckplatz U6 auf dem PRT-MPF mit dem Menuprogramm, dem Text-Editor und den Libraryroutinen, damit diese Programme auch ohne die Library auf dem IOM lauffähig sind.

Image für das 2732 EPROM in U4 auf dem IOM-MPF mit ReceiveBin, SendBin, ReceiveHex, Stoppuhr und den Library-Routinen Die Original-Demoprogramme sind nicht mehr enthalten.

Image für das 2716 EPROM in U3 auf dem IOM-MPF (anstelle des 6116 RAMs) mit dem VC-1541 Floppy Programm.

Original 2764 EPROM Image des MPF-1P Monitors und Assemblers

Original 2764 EPROM Image des MPF-1P Basic. Es existieren zwei Versionen, die ältere hat ein Problem mit der Druckerausgabe, zudem funktionieren die SON/SOFF Befehle nicht.
Die neuere Version hat diese Probleme nicht mehr, der READY Prompt ist aber, vermutlich aus Platzgründen, nicht mehr vorhanden

Original 2732 EPROM Image der IOM-MPF Erweiterung mit Demoprogrammen für PIO, CTC und USART. Die CTC Demos funktionieren nicht mit bestücktem USART, bedingt durch Hardwarefehler auf dem IOM Board.

2764 EPROM Image des MPF-1P Forth

2732 EPROM Image des PRT-MPF Druckers, enthält nebst den Druckroutinen den Disassembler und den Memory-Dump.

Entwicklungstools

PsPad Progammier Editor mit Dateiauswahl
PsPad Progammier Editor mit Tools
Ausagbe des ASL-Assemblers in PsPad
Fehleranzeige des ASL Assemblers, mit direktem Strung zu Zeile und Spalte
Die Library und Dienstprogramme wurden anfänglich mit CP/Ms M80/LINKZ/RELHEX auf einem Kaypro II entwickelt. Spätere Versionen dann unter Windows XP mit dem ASL Assembler. Als Editor/IDE dient  PsPad, ASL und TeraTerm lassen sich elegant einbinden. Die Kommunikation mit dem  MPF-1P geschieht aus PsPad mit TeraTerm und der dazugehörigen Makrosprache.
Der Teraterm Script wird von PsPad anhand der aktiven Dateierweiterung entweder im Sende- oder Empfagsmodus augerufen:
.AZ8 (nur senden)
Konvertieren der vom ASL erzeugten Objektatei in HEX oder Binärformat und senden an RcvHex bzw. RcvBin
.ASM
Konvertieren von und zu Assembler-Sourcen für den MPF-Editor oder ED Texteditor und an RcvBin senden oder von SendBin empfangen.
.BAS
Konvertieren von und zu Basic-Sourcen für das MPF-Basic und an RcvBin senden oder von SendBin empfangen. Erlaubt das Bearbeiten von auf dem MPF binär gespeicherten Basic Programmen auf dem PC.
.ED
Konvertieren von und zu Texten für den ED Texteditor und an RcvBin senden oder von SendBin empfangen. 
.beliebig
Senden und empfangen beliebiger Dateiformate ohne Konvertierung.