P8000/UDOS/WEGA/koppeldoc

352 lines
11 KiB
Plaintext

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