P8000/firmware/MON16/mon16.kp.doc

400 lines
9.9 KiB
Plaintext

.ll 79
.pl 66
.lt 79
.de NP
'sp 2
.tl ''- % -''
'bp
'sp 2
.tl 'Dokumentation'WEGA'Koppelsoftware in MON16'
'sp 3
..
.wh -4 NP
.nf
.sp 6
*******************************************************************************
*******************************************************************************
W E G A - Dokumentation (C) ZFT/KEAW Abt. Basissoftware - 1986
Koppelsoftware in U8000-Softwaremonitor (MON16)
Bearbeiter: J. Zabel
Datum: 12.05.1987
Version: 2.0
*******************************************************************************
*******************************************************************************
1. Uebersicht
=============
.fi
Die Koppelschnittstelle wird auf dem 16-Bit-Teil durch 2 PIO's
(PIO0, PIO1) realisiert (siehe Bild "P8000-Koppelschnittstelle").
Folgende Funktionen werden ueber die Koppelschnittstelle realisiert:
.br
.nf
- Initialisierung und Test der Koppelschnittstelle
- Terminalein-/-ausgabe ueber SIO0_B des 8-Bit-Teils
- Laden und Auslagern von UDOS-Dateien vom/zum 8-Bit-Teil
- Lesen, Schreiben und Formatieren von blockorientierten Disketten
im WEGA-Format
- Rueckkehr in 8-Bit-Teil
.fi
In den folgenden Prozeduren des U8000-Softwaremonitors (MON16) sind
Komponenten der Software fuer die 8-Bit/16-Bit-Koppelschnittstelle
enthalten.
.nf
Prozedur Modul
-------- -----
ENTRY_ p_init
KOPPEL_INT p_term
TYWR p_term
TYRD_UDOS_INT p_term
TYRD_UDOS_POL p_term
TYWR_UDOS_INT p_term
TYWR_UDOS_POL p_term
TYWR_KOPPEL_INT p_term
TYWR_KOPPEL_POL p_term
KP_OUTB p_term
KP_INB p_term
FLOPPY_FORMAT p_comm
FLOPPY_READ p_comm
FLOPPY_WRITE p_comm
FLOPPY_BLOCK p_comm
GET p_gesa
SAVE p_gesa
QUIT8 p_gesa
QUIT8_RESET p_gesa
FLOPPY p_gesa
FLP_BOOT p_boot
UDOS_BOOT p_boot
2. Beschreibung der einzelnen Prozeduren
========================================
.fi
Im Folgenden werden die einzelnen Prozeduren beschrieben, die mit der
Koppelschnittstelle arbeiten.
.nf
2.1. ENTRY_
-----------
.fi
In der Prozedur ENTRY_ wird getestet, ob die Koppelschnittstelle aktiv ist
und ob sie fehlerfrei arbeitet.
Ist das der Fall, wird PTYPORT=2 bzw. =1 gesetzt, je nachdem, ob auf dem
8-Bit-Teil Floppyarbeit moeglich ist (Start des U8000-Softwaremonitors
erfolgte mit WEGA-Systemdiskette) oder nicht (Start des U8000-Softwaremonitors
erfolgte vom U880-Softwaremonitor aus). Als Terminalkanal wird bei aktiver
Koppelschnittstelle der SIO0_B des 8-Bit-Teils genutzt.
Ist die Koppelschnittstelle nicht aktiv, wird PTYPORT=0 gesetzt und als
Terminalkanal der SIO0_B des 16-Bit-Teils genutzt. In diesem Fall sind
alle Funktionen, die die
Koppelschnittstelle benutzen, nicht ausfuehrbar.
.nf
2.2. KOPPEL_INT
---------------
.fi
KOPPEL_INT ist die Interruptroutine zum interruptgesteuerten Datenempfang
vom 8-Bit-Teil. Der Interrupt wird durch Bit 0 des PIO1_B ausgeloest.
Der uebermittelte Status (PIO1_B, Bit 1-6) und das uebermittelte Datenbyte
(PIO1_A) werden gelesen.
.br
Ist der Status gleich #STAT16_SIO0_B_R, so kommt das Datenbyte (Zeichen)
vom Terminalkanal SIO0_B des 8-Bit-Teils und wird im Terminaleingabepuffer
PTYBFF abgespeichert.
.br
Ist der Status gleich #STAT16_UDOS, so ist das Datenbyte fuer den
UDOS-Dateitransfer bzw. Blocktransfer mit blockorientierten Disketten
im WEGA-Format bestimmt. Das Datenbyte wird dann im UDOS-Eingabepuffer
UDOSBFF abgespeichert.
.nf
2.3. TYWR
---------
.fi
Ausgabe eines Zeichens an den Terminalkanal (SIO0_B des 8-Bit-Teils,
wenn die Koppelschnittstelle aktiv ist bzw. SIO0_B des 16-Bit-Teils,
wenn die Koppelschnittstelle inaktiv ist) im Pollingbetrieb.
Zuerst wird ueber die Prozedur KP_INB gewartet, bis der Sendepuffer des
SIO0_B des 8-Bit-Teils leer ist, indem das Leseregister 0 des SIO's
gelesen wird.
.br
Dann wird das auszugebende Zeichen ueber die Prozedur KP_OUTB an den
SIO0_B des 8-Bit-Teils ausgegeben.
.nf
2.4. TYRD_UDOS_INT
------------------
.fi
Einlesen eines Zeichens fuer den UDOS-Dateitransfer bzw. Floppy-Blocktransfer
aus dem UDOS-Eingabepuffer UDOSBFF.
Dieses Zeichen wurde mittels Interrupt an den 16-Bit-Teil gesendet
(siehe auch Prozedur KOPPEL_INT (2.2.)).
.nf
2.5. TYRD_UDOS_POL
------------------
.fi
Einlesen eines Zeichens fuer den UDOS-Dateitransfer bzw. Floppy-Blocktransfer
im Pollingbetrieb.
Dazu wird gewartet, bis an PIO1_B (Bit1-6) der Status #STAT16_UDOS anliegt.
Dann wird das zugehoerige Datenbyte (PIO1_A) eingelesen.
.nf
2.6. TYWR_UDOS_INT
------------------
.fi
Ausgabe eines Zeichens fuer den UDOS-Dateitransfer bzw. Blocktransfer
ueber die Koppelschnittstelle.
.br
Die Ausgabe erfolgt so, dass auf dem 8-Bit-Teil ein Interrupt ausgeleost
wird (PIO0_B, Bit 0=1).
Dazu wird an PIO0_A das Datenbyte ausgegeben und an PIO0_B, Bit 1-4 der
Status #STAT8_UDOS angelegt und das Interruptbit (PIO0_B, Bit 0) gesetzt.
.nf
2.7. TYWR_UDOS_POL
------------------
.fi
Analog TYWR_UDOS_INT, ausser, dass auf dem 8-Bit-Teil kein Interrupt
ausgeloest wird (PIO0_B, Bit 0=0).
.nf
2.8. TYWR_KOPPEL_INT
--------------------
.fi
Hilfsprogramm zur Ausgabe eines Zeichens/Status ueber die Koppelschnittstelle
mit Interruptausloesung auf dem 8-Bit-Teil (PIO0_B, Bit 0=1).
.nf
2.9. TYWR_KOPPEL_POL
--------------------
.fi
Hilfsprogramm zur Ausgabe eines Zeichens/Status ueber die Koppelschnittstelle
ohne Interrruptausloesung auf dem 8-Bit-Teil (PIO0_B, Bit 0=0).
.nf
2.10. KP_OUTB
-------------
.fi
Ausgabe eines Datenbytes an einen I/O-Port des 8-Bit-Teils.
Dazu wird zuerst die Portadresse des I/O-Ports und der Status #STAT8_WRITE
ueber die Koppelschnittstelle ausgegeben (PIO0_A bzw. PIO0_B, Bit 1-4),
wobei auf dem 8-Bit-Teil eine Interruptausloesung erfolgt (PIO0_B, Bit 0 = 1).
.br
Dann wird das Datenbyte und der Status #STAT8_ENDE ueber die
Koppelschnittstelle ausgegeben.
.nf
2.11. KP_INB
------------
.fi
Eingabe eines Datenbytes von einem I/O-Port des 8-Bit-Teils.
Dazu wird zuerst die Portadresse des I/O-Ports und der Status #STAT8_READ
ueber die Koppelschnittstelle ausgegeben (PIO0_A bzw. PIO0_B, Bit 1-4),
wobei auf dem 8-Bit-Teil eine Interruptausloesung erfolgt (PIO0_B, Bit 0 = 1).
.br
Dann wird gewartet, bis der Status #STAT16_ENDE (PIO1_B, Bit 1-6) anliegt
und daraufhin wird das
dazugehoerige Datenbyte (PIO1_A) eingelesen. Dieses Datenbyte ist das
vom I/O-Port eingelesene Datenbyte.
.nf
2.12. FLOPPY_FORMAT
-------------------
.fi
Monitorkommando FF
.br
Formatieren einer blockorientierten Diskette im WEGA-Format.
Benutzt den Treiber FLOPPY (s. 2.20).
.nf
2.13. FLOPPY_READ
-----------------
.fi
Monitorkommando FR
.br
Lesen eines Blockes einer blockorientierten Diskette im WEGA-Format.
Benutzt den Treiber FLOPPY (s. 2.20).
.nf
2.14. FLOPPY_WRITE
------------------
.fi
Monitorkommando FW
.br
Schreiben eines Blockes einer blockorientierten Diskette im WEGA-Format.
Benutzt den Treiber FLOPPY (s. 2.20).
.nf
2.15. FLOPPY_BLOCK
------------------
.fi
Allgemeiner Teil von FLOPPY_FORMAT, FLOPPY_READ bzw. FLOPPY_WRITE.
.nf
2.16. GET
---------
.fi
Monitorkommando GE
.br
Laden einer UDOS-Procedure-Datei ueber die Koppelschnittstelle in den
RAM des 16-Bit-Teils.
Zur Datenuebertragung ueber die Koppelschnittstelle werden die Prozeduren
TYRD_UDOS_INT (s. 2.4.) und TYWR_UDOS_INT (s. 2.6.) benutzt.
.br
Das Kommando wird nur ausgefuehrt, wenn PTYPORT=2 ist (s. 2.1.).
Zuerst wird eine Kennung, welche Operation ausgefuehrt werden
soll (Datenbyte "S") und der Dateiname gesendet.
.br
Dann werden der Dateidescriptor und die Bloecke mit den Daten der
Datei empfangen.
.nf
2.17. SAVE
----------
.fi
Monitorkommando S
.br
Auslagern eines Speicherinhaltes des 16-Bit-Teils ueber die Koppelschnittstelle
als UDOS-Procedure-Datei.
Zur Datenuebertragung ueber die Koppelschnittstelle werden die Prozeduren
TYRD_UDOS_INT (s. 2.4.) und TYWR_UDOS_INT (s. 2.6.) benutzt.
.br
Das Kommando wird nur ausgefuehrt, wenn PTYPORT=2 ist (s. 2.1.).
Zuerst wird eine Kennung, welche Operation ausgefuehrt werden
soll (Datenbyte "L") und der Dateiname gesendet.
.br
Dann werden der Dateidescriptor und die Bloecke mit den Daten der
Datei gesendet.
.nf
2.18. QUIT8
-----------
.fi
Monitorkommando Q
.br
Rueckkehr in den 8-Bit-Teil (kein RESET des 16-Bit-Teils).
Dazu wird an PIO0_A das Datenbyte "Q" ausgegeben, an PIO0_B (Bit 1-4)
der Status #STAT8_QUIT angelegt und das Interruptbit (PIO0_B, Bit 0) gesetzt.
.nf
2.19. QUIT8_RESET
-----------------
.fi
Monitorkommando QRES
.br
Rueckkehr in den 8-Bit-Teil (RESET des 16-Bit-Teils).
Dazu wird an PIO0_A das Datenbyte "R" ausgegeben, an PIO0_B (Bit 1-4)
der Status #STAT8_QUIT angelegt und das Interruptbit (PIO0_B, Bit 0) gesetzt.
.nf
2.20. FLOPPY
------------
.fi
Treiber zur Arbeit mit blockorientierten Disketten im WEGA-Format
ueber die Koppelschnittstelle (Formatieren, Lesen, Schreiben).
Zur Datenuebertragung ueber die Koppelschnittstelle werden die Prozeduren
TYWR_UDOS_INT (s. 2.6.), TYWR_UDOS_POL (s. 2.7.), TYRD_UDOS_INT (s. 2.4.)
und TYRD_UDOS_POL (s. 2.5.) benutzt.
.br
Die Operationen werden nur ausgefuehrt, wenn PTYPORT=2 ist (s. 2.1.).
Formatieren:
.br
Es wird eine Kennung, welche Operation ausgefuehrt werden soll (Datenbyte "F")
und der Floppytyp/Devicenummer gesendet.
Lesen:
.br
Es wird eine Kennung, welche Operation ausgefuehrt werden soll (Datenbyte "R"),
der Floppytyp/Devicenummer, die Blocknummer und die Datenlaenge gesendet.
.br
Dann werden die Datenbytes des Blockes eingelesen.
Schreiben:
.br
Es wird eine Kennung, welche Operation ausgefuehrt werden soll (Datenbyte "W"),
der Floppytyp/Devicenummer, die Blocknummer und die Datenlaenge gesendet.
.br
Dann werden die Datenbytes des Blockes gesendet.
.nf
2.21. FLP_BOOT
--------------
.fi
Programm zum Laden und Starten von "boot0" von einer blockorientierten
Diskette im WEGA-Format (Block 0).
Das Programm wird nur ausgefuehrt, wenn PTYPORT=2 ist (s. 2.1.).
Es erfolgt ein Aufruf des Treibers FLOPPY (s. 2.20) zum Lesen des
Blockes 0 / Drive 0.
.nf
2.22. UDOS_BOOT
---------------
.fi
Programm zum Laden und Starten der UDOS-Datei "boot0.ud" von einer
UDOS-Diskette.
Das Programm wird nur ausgefuehrt, wenn PTYPORT=2 ist (s. 2.1.).
Ablauf analog der Prozedur GET (s. 2.12.).