******************************************************************************* ******************************************************************************* P8000 - Softwaredokumentation (C) ZFT/KEAW Abt. Basissoftware - 1989 Koppelsoftware (8-Bit-Teil) Bearbeiter: U. Oefler / P. Hoge / R. Kuehle Datum: 31.1.89 Version: 3.1 ******************************************************************************* ******************************************************************************* 1. Grundlagen ============= 1.1. Hardware ------------- Zur Kopplung der beiden Rechnerkarten des P8000 dienen zwei 16-Bit-Ports. Auf der 16-Bit-Seite werden diese durch zwei PIO's realisiert. Auf der 8-Bit-Seite dienen dazu ein PIO (PIO-0) und zwei Ausgabeports (jeweils 8-Bit breit, P16A und P16B). Die Verbindung zwischen beiden Teilen ist im Band: "Einfuehrung in die Software des P8000" (Bild A.1) ausfuehrlich dargestellt. Zum Verstaendnis der nachfolgend beschriebenen Programmteile der Koppel- software (8-Bit-Teil) ist die Belegung auf der 8-Bit-Seite wichtig. PIO0 Port-A 8-Bit Dateneingabe vom 16-Bit-Teil Daten: 0CH Control: 0DH Port-B Bit 7 Reset-U8000 (1=steht, 0=laeuft) Daten: 0EH Bit 6 Enable-Output (1=frei, 0=gesperrt) Control: 0FH Bit 5 Daten-Da (1=ja, 0=nein) Bit 4-1 Status (4 Bit) vom 16-Bit-Teil Bit 0 Interrupt-Bit Ausgabeport-A 8-Bit Daten an 16-Bit-Teil (P16A, Adr.: 10H) Ausgabeport-B Bit 7 STB fuer PIO auf 16-Bit-Seite (P16B, Adr.: 14H) (Flanke 0->1 fuer Datenuebernahme!) Bit 6-1 Status (6 Bit) an 16-Bit-Teil Bit 0 INT-16 (Flanke 0->1 erzeugt Int. auf 16-Bit-Seite) 1.2. Arbeitsweise ----------------- Die Koppelsoftware hat die Aufgabe die Peripherieschaltkreise des 8-Bit- Teils (2 x SIO und 1 x PIO) dem 16-Bit-Teil zur Verfuegung zu stellen, d.h. Ein- und Ausgaben vom 16-Bit-Teil aus zu ermoeglichen. Weiterhin beiinhaltet die Koppelsoftware Programmteile zur Ausfuehrung von Requests, die vom 16-Bit-Teil angefordert werden (z.B.: Lesen und Schreiben von UDOS-Dateien und Diskettensektoren, Formatieren von Disketten). Auf der 16-Bit-Seite arbeiten sowohl der U8000-Softwaremonitor als der WEGA-Kern mit der Koppelsoftware zusammen. Ueber die zwei SIO's des 8-Bit-Teils sind 4 V.24-Kanaele des P8000 durch die Koppelsoftware mit dem 16-Bit-Teil verbunden. Organisation der Ankopplung: Fuer jeden SIO-Kanal (4 Stueck) wird auf der 8-Bit-Seite ein Ringpuffer organisiert, der die einlaufenden Daten aufnimmt, ein Flag-Byte, in dem das Auftreten von T_INT's, E_INT's oder S_INT's gemerkt wird, sowie 2 Byte fuer das Retten der Werte der Leseregister 0 und 1. Diese Ringpuffer haben die symbolischen Bezeichnungen RB_S0A (tty-0) RB_S0B (Console) RB_S1A (tty-2) RB_S1B (tty-3) Die Interrupt-Service-Routine realisieren folgende Funktionen R_INT (Receive-Int.) SIO-Empfangspuffer leer lesen Ablegen im Ringpuffer T_INT (Transmit-Int.) Reset T_INT, RR0 einlesen E_INT (Ext.-Status-Int.) RR0 einlesen, Reset E_INT S_INT (Special-Rec.- RR1 einlesen, Reset S_INT Condition) Innerhalb der Koppelsoftware testet das Programm UEB16 staendig, ob Interrupts eingelaufen sind, wenn ja erfolgt Uebergabe an den 16-Bit- Teil. Dabei erfolgt ueber die 6-Bit Status die Kennzeichnung der Art des Interrupts und der Adresse der Quelle. Ausgaben an die Peripherieschaltkreise werden von der ISR-Koppelpio direkt an die entsprechende Adresse durchgereicht. Das Interruptsystem fuer den PIO1 (Anschluss des EPROM-Programmers) ist ab der Version 3.1. in der Koppelsoftware integriert. 1.3. Statusfestlegungen ----------------------- Der 8-Bit-Teil uebergibt Informationen an den 16-Bit-Teil, indem er den 16-Bit-Teil ueber INT-16 unterbricht. Dabei sind in den 6-Bit Status folgende Kennzeichnungen verschluesselt: 00H Ende-Status 02H SIO-0 Kanal-A R_INT 22H T_INT 42H E_INT 62H S_INT 04H SIO-0 Kanal-B R_INT 24H (console) T_INT 44H E_INT 64H S_INT 06H SIO-1 Kanal-A R_INT 26H T_INT 46H E_INT 66H S_INT 08H SIO-1 Kanal-B R_INT 28H T_INT 48H E_INT 68H S_INT 0AH PIO1-Port A INTERRUPT 2AH PIO1-Port B INTERRUPT 10H Daten (UDOS-Dateien) Der 16-Bit-Teil uebergibt Informationen an den 8-Bit-Teil, indem er den 8-Bit-Teil ueber INT-8 (Bit0 PIO0-PortB) unterbricht. Dabei sind in den 4 Bit Status sind folgende Anforderungen verschluesselt: (a) Hardware-E/A: 00H Ende-Status 02H READ von Peripherie 04H WRITE an Peripherie Erlaeuterung: am Datenport liegt die Peripherieadresse an, bei WRITE folgen am Datenport die auszugebenden Datenbytes (beim letzten Datenbyte Status 0H) (b) Request: 10H Request-Status Erlaeuterung: beim ersten Interrupt mit Status 10H entscheidet das am Datenport anliegende Zeichen ueber die Art des Requests 'L' (LOAD: Empfangen UDOS-Datei) 'S' (SEND: Senden UDOS-Datei) 'P' (PROM: EPROM-Programmierung) 'R' (READ: Lesen Block-Floppy) 'W' (WRITE: Schreiben Block-Floppy) 'F' (FORMAT: Formatieren Block-Floppy (physisch)) 'V' (VERIFY: Ueberpruefen Disk) 'C' (COPYDISK: Kopieren von Disketten) weitere Requests sind z.Z. nicht implementiert die nachfolgenden Datenbytes mit Status 10H werden bis zum Abschluss der Requestaktivitaet in den 16-Bit-Empfangsringpuffer (RECBUF) uebernommen (c) U8000-Monitorende: 16H Quit-Status Erlaeuterung: Uebergang vom 16-Bit-Monitor in 8-Bit-Monitor oder UDOS (entsprechend Start) das am Datenport anliegende Zeichen entscheidet ob mit oder ohne Reset-U8000 'R' Reset-U8000 'Q' ohne Reset-U8000 Hardware E/A-Aktivitaeten werden in der ISR-Koppelpio sofort ausgefuehrt. Bei Requestanforderungen wird in der ISR-Koppelpio entsprechend des Requests ein Bit gesetzt. 1.Status-Byte: Bit 0 Monitor-QUIT (ohne Reset U8000) 1 LOAD (Empfangen UDOS-Datei) 2 SEND (Senden UDOS-Datei) 3 PROM (EPROM-Programmierung) 7 Monitor-QUIT (mit Reset U8000) 2.Status-Byte: Bit 0 READ (Block-Floppy) 1 WRITE (Block-Floppy) 2 FORMAT (Block-Floppy) 3 VERIFY (Block-Floppy) 4 COPYDISK (Block-Floppy) Innerhalb der Grundwarteschleife der Koppelsoftware (Marke WAIT) wird neben dem Test auf eingelaufene Interrupts (CALL UEB16) auch staendig in den zwei Status-Bytes nachgesehen, ob zu einem Requestprogrammteil verzweigt werden muss. 2. Module der Koppelsoftware ============================ 2.1. Startprogramm WEGA ----------------------- Die Koppelsoftware besteht aus sechs Modulen: K.NEU.S Grundprogramm zur Koppelschnittstelle (Initialisierung, Eigentest, Interruptsystem, Grundwarteschleife) K.BLK.S Programme zur Arbeit mit Floppy-Disk (Read, Write und Format Block-Floppy-Formate) K.ACT.S Programme zum Ein-/Auslagern von UDOS-Dateien (Load/Send entsprechend Remote-Telegramm) K.PROM.S PLZ/SYS-Programmodul zur EPROM-Programmierung (Basismodul mit Anpassung an Koppelschnittstelle) K.P8000.S Assemblerprogramm zur EPROM-Programmierung (P8000-Programmer, und Schnittstelle /dev/ud) K.BUF.S Puffervereinbarung Nach dem Compilieren von K.PROM.S (mit PLZ/SYS Vers. 3.0) und dem Assemblieren der restlichen Module wird durch folgende Linkanweisung PLINK $=4000 K.NEU K.BLK K.ACT K.PROM K.P8000 PLZ.MATH K.BUF (N=WEGA) das Startprogramm WEGA erzeugt. Der Aufruf dieses Programms unter UDOS bewirkt die Initialisierung und Aktivierung der Koppelschnitt- stelle fuer WEGA und den Uebergang in den 16-Bit-Monitor. 2.2. Koppelsoftwareteile fuer U880-Monitor ------------------------------------------ Die in den U880-Softwaremonitor zu integrierenden Teile der Koppelsoftware fuer die Ausfuehrung des Kommandos 'X' sind im Modul K.MON.S zusammengefasst. Da bei dieser Arbeitsweise keine Floppy-Disk-Arbeit moeglich ist, wird in diesem Fall im Anschluss an den Eigentest das Datenmuster 01H mit Status 00H an den 16-Bit-Softwaremonitor uebergeben (beim Programm WEGA wird das Datenmuster 02H uebergeben). Dadurch wird erreicht, dass sowohl der U8000-Monitor als auch der WEGA-Kern beim Start ueber das Kommando 'X' die Floppyarbeit sperrt und damit sich das System nicht verklemmen kann. 2.3. Beschreibung der Prozeduren -------------------------------- Modul K.NEU.S: bis Zeile 218 Koppelschnittstelle Grundprogramm (Initialisierung, Hardwaretest - in Zusammenarbeit mit 16-Bit-Monitor, Fehlerausgaben, Grundwarteschleife Programmteile zum QUIT-Status) UEB16 Tests ob Interrupts eingelaufen sind, wenn ja Uebergabe der entsprechenden Daten an 16-Bit-Teil LODNET Eingabe 1 Zeichen aus 16-Bit-Empfangsringpuffer SNDNET Ausgabe 1 Zeichen an 16-Bit-Teil mit Status 10H ueber Interrupt SNDACK Ausgabe ACK (06H) an 16-Bit-Teil mit Status 10H ueber Interrupt SNDDAT Ausgabe 1 Zeichen an 16-Bit-Teil mit Status 10H ueber Polling LODDAT Eingabe 1 Zeichen vom 16-Bit-Teil ueber Polling OUTP16 Ausgabe 1 Zeichen an 16-Bit-Teil ohne Interrupt mit Zeitueberwachung WAITACK Warten auf 1 Zeichen vom 16-Bit-Teil und Test ob ACK (06H) mit Zeitueberwachung ISRPIO Interrupt-Service-Routine Koppelpio: Auswertung des Status und Realisierung der entsprechenden Aktivitaet. E/A-Aktionen werden direkt ausgefuehrt. Requestanforderungen bewirken das Setzen des entsprechenden Statusbits. Daten mit Status 10H (UD-Daten) werden im Ringpuffer abgelegt. Bei Block- Floppy-Read bzw. -Write erfolgt auch die Uebernahme der notwendigen Kopfinformationen ueber Polling (Marken RBLOCK und WBLOCK (bei Write auch Uebernahme des zu schreibenden Blocks)) SxxR Eintrittspunkte fuer SIO-Kanaele Receive-Interrupts SxxT ... Transmit-Interrupts SxxE ... External-Status-Interrupts SxxS ... Special-Receive-Cond.-Interrupts Modul K.BLK.S: DISK zeitgeteilter Floppy-Zugriff RBLOCK Uebernahme Kopfinformationen (von ISR-Koppelpio aus) BLKRD Eintrittspunkt fuer Block-Read WBLOCK Uebernahme Kopfinformationen und Blockdaten (von ISR-Koppelpio aus) BLKWT Eintrittspunkt fuer Block-Write KOPF Uebernahme Kopfinformationen (durch Polling) BLOCK Umwandlung Blocknummer in Spur- und Sektornummer (entsprechend angefordetem Diskettenformat) und eintragen in Requestvektor fuer Floppyzugriff BLKFO Eintrittspunkt fuer Format, Verify und Copydisk Modul K.ACT.S: Die Programmteile dieses Moduls stellen eine Anpassung des Remote- Softwarepakets an die Koppelschnittstelle des P8000 dar. Das Ein-/Auslagern von UDOS-Dateien unter WEGA (Programme getud und putud) erfolgt entsprechend dem Remote-Telegramm. Der Floppyzugriff wurde auf zeitgeteilten Verkehr umgestellt. Modul K.PROM.S: Dieser PLZ/SYS-Programmodul enthaelt die zur EPROM-Programmierung notwendigen Teile (Basismodul mit Anpassung an Koppelschnittstelle). Modul K.P8000.S: Dieses Assemblerprogramm umfasst die speziellen Teile zur EPROM-Programmierung mit der Anpassung an den P8000-Programmer und die Schnittstelle /dev/ud. Modul K.BUF.S: Dieser Modul enthaelt nur die Vereinbarung des globalen Puffers mit dem Namen BUF. 3. Listings der Module ====================== Im Anschluss an diese Beschreibung folgen die kommentierten Programmlistings aller sechs Module der Koppelsoftware (K.NEU, K.BLK, K.ACT, K.P8000, K.PROM und K.BUF).