Ich habe einen MPF-1P mit IOM-MPF
und PRT-MPF Erweiterungsmodulen. Sehr schönes Teil mit PIO, CTC und 8251 USART. Nur fehlt brauchbare Software dazu. Im ROM des IOM sind Demoprogramme für alle drei Chips, nur nützen die wenig, das CTC Programm stürzt sogar ab...
Im Manual des IOM wird erwähnt, dass auf dem Printermodul ein Design-Fehler existiert, der verhindert, dass Interrupts 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 Programmadressen, die mit CA oder CB enden, mit dem Lowbyte des Interrupt-Vektors zu versehen. Etwas aufwändig, aber funktioniert.
Aber das ist nur die halbe Wahrheit. Den gleichen Fehler haben die Entwickler auch beim IOM gemacht. Hier betrifft es die 8251 USART (standardmässig nicht bestückt, darum wurde es vielleicht nicht beachtet).
Auch hier fehlt M1 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. Der legt frisch-fröhlich seine Registerdaten auf den Bus, sobald ein Interrupt-Ack Zyklus im Adressbereich xx40 - xx60 ausgeführt wird (der 8251 belegt IO-Adressen 60 und 61). Schon wieder ein Crash. Das heisst also, Monitorfunktionen mit laufenden Interrupts sind tabu. Im Anwenderprogramm darf zwischen xx40 und xx60 kein Code sein, der mit Interrupts unterbrochen werden kann. Dies ist übrigens auch der Grund, warum die CTC Demo abstürzt. Nach Verschieben in einen nicht betroffenen Adressbereich funktionierts.
Ich werde nun versuchen, die wichtigsten Funktionen zum Ablegen im EPROM Printer- und USART sicher zu implementieren.
Update folgt...