home *** CD-ROM | disk | FTP | other *** search
- FH Nürnberg Seite 1 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
-
- ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
- ▌ ▐
- ▌ Screen Splitting ▐
- ▌ ▐
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- von
- Norbert Raum-Deinzer
- Hersbruck 1990
-
-
- Diese Kurzbeschreibung entstand aus einer Studiumsarbeit im
- Wahlpflichtfach "Systemnahes Programmieren" an der Fachhoch-
- schule Nürnberg.
-
-
-
- Inhaltsverzeichnis:
-
-
-
- Zusammenfassung der schriftlichen Kurzfassung................2
-
- 1. Was bedeutet Screen Splitting............................3
-
- 2. Grundlagen für die Programmierung der EGA/VGA-Karte......3
-
- 2.1 Der Bildschirmspeicher der Video-Karte...................3
-
- 2.2 Interne Speicherung von Alphanumerischen Zeichen im Text-
- Modus....................................................4
-
- 2.3 Das EGA/VGA BIOS.........................................4
-
- 2.4 Lesen des Zustandes der EGA/VGA Karte....................5
-
- 2.5 Adressieren der EGA/VGA-Register.........................6
-
- 3. Funktionsprinzip Screen Splitting........................7
-
- 4. Benötigte Register.......................................9
-
- 5. Synchronisation.........................................10
-
- 6. Kurze Programmbeschreibung..............................11
-
- 7. Implementierungsdetails.................................11
-
- 7.1 Installationsprozedur Install...........................12
-
- 7.2 Tastatur-Interruptprozedur INT09h.......................12
-
- 7.3 Zeitgeber-Interruptprozedur INT1Ch......................13
-
- 8. Einsatz- und Erweiterungsmöglichkeiten..................13
-
- 9. Literaturverzeichnis....................................14
-
- Anhang: Struktogramme
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 2 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
- Zusammenfassung der schriftlichen Kurzfassung
-
-
- Die Kurzfassung erläutert die Grundlagen für die Programmierung
- einer EGA/VGA-Karte. Hierbei werden Punkte angesprochen, wie
- Adressierung des Bildschirmspeichers, Abspeicherung
- Alphanumerischer-Zeichen, Nutzung des EGA/VGA-BIOS, Lesen des
- Zustandes der Grafikkarte und Adressierung der VGA-Register.
- Danach wird erklärt, wie Screen Splitting funktioniert und
- welche Register benötigt werden. Nächster Punkt ist die
- Synchronisation der Schreibvorgänge mit der Bewegung des
- Elektronenstrahls. Nach einer kurzen Programmbeschreibung
- folgen dann die Implementierungsdetails, welche anhand von
- Struktogrammen unterstützt werden. Am Ende steht das
- Literaturverzeichnis.
- Das beschriebene Programm stammt von Ingo Eickmann und ist aus
- dem Januar Heft 1990 der Zeitschrift mc entnommen.
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 3 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
- 1. Was bedeutet Screen Splitting
-
-
- Auf einem Bildschirm sollen zwei Bildschirmseiten gleichzeitig
- dargestellt werden. Dabei werden beide Seiten natürlich nicht
- ganz, sondern nur ausschnittsweise dargestellt.
-
-
-
- 2. Grundlagen für die Programmierung der EGA/VGA-Karte
-
-
- "Screen Splitting" kann nur auf einer EGA oder VGA-Karte
- realisiert werden, da hierfür besondere Register notwendig
- sind. Im folgenden wird nur auf den Textmodus 03h eingegangen,
- außer es wird ausdrücklich auf einen anderen Modus hingewiesen.
-
- Textmodus 03h: 80 Spalten und 25 Zeilen
- 640 x 350 (EGA)
- 640 x 400 (VGA)
-
-
-
- 2.1 Der Bildschirmspeicher der Video-Karte
-
-
- Der Bildschirmspeicher beginnt, wie in Bild 1.0 zu erkennen an
- Adresse A0000h und endet an Adresse BFFFFh im Systemspeicher.
- Um Daten in das Video-RAM zu übertragen, ist also nur ein
- einfacher MOV-Befehl erforderlich. Der Speicherbereich für die
- Video-Karte unterteilt sich noch in drei weitere Teilbereiche:
-
- - EGA/VGA (Grafikmodus)
- - Monochrome Adapter (Hercules)
- - CGA (farbiger Textmodus EGA/VGA)
-
- Wegen der Kompatibilität zu den ältere Bildschirmadaptern,
- beginnt der farbige Textmodus erst ab Adresse B8000h.
-
- 00000h ───┬────────────────────────────────────────────┐
- │ │
- │ System Speicher │
- │ │
- A0000h ───┼────────────────────────────────────────────┤
- │ EGA/VGA Grafik Bildschirmspeicher │
- B0000h ───┼────────────────────────────────────────────┤
- │ Monochromer Bildschirmspeicher │
- B8000h ───┼────────────────────────────────────────────┤
- │ CGA + Text (farbig) Bildschirmspeicher │
- C0000h ───┼────────────────────────────────────────────┤
- │ │
- │ I/O ROM │
- │ │
- F0000h ───┼────────────────────────────────────────────┤
- │ │
- │ BIOS │
- │ │
- 100000h ───┼────────────────────────────────────────────┤
-
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 4 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
- 2.2 Interne Speicherung von Alphanumerischen Zeichen im
- Text-Modus
-
-
- Im Textmodus 03h benötigt ein Buchstabe einen Speicherplatz von
- 2 Byte. Diese beiden Bytes bestehen aus:
-
- - erweiterter ASCII-Code (8 bit)
- - Attributwert (8 bit)
-
- Der Attributwert gibt zum Beispiel an, ob das Zeichen invers,
- unterstrichen, oder in welcher Farbe das Zeichen dargestellt
- wird.
-
- Die interne Abspeicherung eines Zeichens erfolgt in sogenannten
- "Planes". Dabei wird in Plane 1 der ASCII-Code und in Plane 2
- der Attributwert abgespeichert.
-
-
- ASCII-Code Attributwert
- ┌───────────────┐ ┌───────────────┐
- │ │ │ │
- └───────────────┘ └───────────────┘
- │ │
- │ │
- │ ┌──────────────────────────────┐
- │ │ Plane 1 │
- │ │ │
- ┌──────────────────────────────┐ │
- │ Plane 0 │ │
- │ │ │
- │ │ │
-
-
- Um diese Einteilung braucht sich der Programmierer nicht zu
- kümmern. Er schreibt einfach an einer geraden Adresse den
- ASCII-Code und an der ungeraden den dazugehörigen Attributwert
- ins Video-RAM. Die Einteilung in "Planes" erledigt die Video-
- Karte selbständig.
-
-
-
-
- 2.3 Das EGA/VGA BIOS
-
-
- Das EGA/VGA Basic Input Output System beginnt im Systemspeicher
- ab Adresse C0000h und endet bei der Adresse C3FFFh. Die vom
- BIOS zur Verfügung gestellten Routinen werden über den
- Interrupt 10h aufgerufen.
-
- Beispiel: Einstellen der Grafikkarte in den Textmodus 3
-
- MOV AH,00h ;00h in AH bedeutet: Bildschirmmodus
- wird geändert
- MOV AL,03h ;Ins AL Register wird nun der
- entsprechende Modus geschrieben
- INT 10h ;Aufruf der entsprechenden Routine
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 5 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
- 2.4 Lesen des Zustandes der EGA/VGA Karte
-
-
- Um den Zustand der Karte zu bestimmen, gibt es zwei
- Möglichkeiten, wobei eine davon nur der VGA-Karte zur Verfügung
- steht.
-
-
- a) Bestimmung des Zustandes über den BIOS-Datenbereich
-
- Ab Adresse 449h im System-RAM bis Adresse 469h stehen die
- Zustandsdaten der EGA/VGA-Karte (siehe Bild).
-
-
- BIOS - Datenbereich
-
- ┌─────────────────────────────────────────────────┐ 4FFh
- │ Reserviert │
- │─────────────────────────────────────────────────│ 488h
- │ Status─Bytes │
- │─────────────────────────────────────────────────│ 471h
- │ Optionen und Timer │
- │─────────────────────────────────────────────────│ 469h
- │ VIDEO - Bereich │
- │─────────────────────────────────────────────────│ 449h
- │ Disk │
- │─────────────────────────────────────────────────│ 435h
- │ Tastatur │
- │─────────────────────────────────────────────────│ 417h
- │ Hardware │
- └─────────────────────────────────────────────────┘ 400h
-
- Im Video-BIOS Datenbereich steht zum Beispiel:
-
- Adresse in Hex Funktion
-
- 0000:0449 Aktiver Bildschirmmodus
- 0000:044A Anzahl Zeichen pro Spalte
- 0000:0436 Port-Adresse der CRTC-Register
-
-
- b) Lesen des Zustandes über einen BIOS-Aufrufs
-
- Die VGA-Karte bietet noch die Möglichkeit über den BIOS-Aufruf
- AH=1Bh den Zustand direkt in einem vom Benutzer bestimmten
- Datenbereich zu schreiben.
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 6 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
- 2.5 Adressieren der EGA/VGA-Register
-
-
- Die Adressierung erfolgt hier nicht wie beim
- Bildschirmspeicher über den Systemspeicher, sondern über den
- Ein/Ausgabe-Kanal.
-
-
- IN/OUT - Adressen
-
- ┌─────────────────────────────────────────────────┐ 3F0h
- │ │
- │ │
- │ │
- │─────────────────────────────────────────────────│ 3E0h
- │ CGA EGA/VGA │
- │─────────────────────────────────────────────────│ 3D0h
- │ EGA/VGA │
- │─────────────────────────────────────────────────│ 3C0h
- │ MDA EGA/VGA im Monochrom-Modus │
- │─────────────────────────────────────────────────│ 3B0h
- │ │
- │ │
- │ │
-
-
- Aus dem Bild kann man ablesen, daß die EGA/VGA-Karte im
- Grafikmodus höchstens 16 Register haben darf, da nicht mehr
- Adressen vorhanden sind. In Wirklichkeit besitzt die EGA/VGA-
- Karte aber über 50 Register. Um alle Register ansprechen zu
- können, wurde die indirekte Adressierung eingeführt.
-
-
- Funktionsprinzip der indirekten Adressierung:
-
- Die EGA/VGA-Karte besitzt ein INDEX und ein DATEN-Register. Um
- nun ein bestimmtes Register zu adressieren, schreibt man dessen
- Index ins INDEX-Register. Danach werden die Daten, die für das
- Register bestimmt sind, ins Datenregister geschrieben.
-
-
- Beispiel zur Indexadressierung:
-
- INDEX-Register DATEN-Register
- ┌────────────────────┐ ┌────────────────────┐
- │ 02h │──┐ │ 1Ah │
- └────────────────────┘ │ └────────────────────┘
- Adresse: 3D4h │ Adresse: 3D5h
- │
- │ ┌───────────────────────────┐
- │ │ Register mit Index 00h │
- │ │───────────────────────────│
- │ │ Register mit Index 01h │
- │ │───────────────────────────│
- └───── │ Register mit Index 02h │
- │───────────────────────────│
- │ │
- │ │
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 7 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
-
-
- Ins Register mit dem Index 00h wird der Wert 1Ah geschrieben.
-
- Das vorherige Beispiel schaut als Programm folgendermaßen aus:
-
- MOV dx,3D4h ;Adresse des Index-Registers laden
- MOV ax,02h ;Register-Index laden
- OUT dx,ax ;Index ins Indexregister schreiben
- INC dx ;Adresse des DATEN-Registers laden
- MOV ax,1Ah ;Daten für Register laden
- OUT dx,ax ;Daten ins DATEN-Register schreiben
-
-
- Registergruppen:
-
- Mehrere Register sind zu sogenannten Registergruppen
- zusammengefaßt. Bis auf wenige Ausnahmen existiert für eine
- Registergruppe ein Index und ein DATEN-Register.
-
- Register-Gruppen │ I/O Port Adressen in Hex │ Direkt
- │ │ adress.
- ──────────────────────┼────────────────────────────┼───────────
- General oder External │ 3BA oder 3DA, 3CA, 3C2, │ JA
- │ 3CC │
- │ │
- Sequencer │ 3C4, 3C5 │ NEIN
- │ │
- CRTC │ 3B4, 3B5 oder 3D4, 3D5 │ NEIN
- │ │
- Graphics │ 3CE, 3CF │ NEIN
- │ │
- Attribute │ 3C0, 3C1 │ 1 Register
- │ │
-
-
-
-
- 3. Funktionsprinzip Screen Splitting
-
-
- Die Bildschirmdarstellung beginnt ab der Adresse, welche im
- Start-Adress-Register steht. Ab dieser Adresse beginnt auch
- der Zeilenzähler zu zählen. Ins Line-Compare-Register muß die
- Zeilenzahl geladen werden, ab der der Bildschirm geteilt werden
- soll. Erreicht nämlich der Zeilenzähler den Wert, der im Line-
- Compare-Register steht, so wird die Bildschirmadresse auf 0000h
- zurückgesetzt. Das heißt, ab jetzt wird das auf dem Bildschirm
- dargestellt, was ab Adresse 0000h im Bildschirmspeicher steht.
- Die jetzige Bildschirmseite wird solange dargestellt bis der
- Zeilenzähler die maximale Zeilenzahl erreicht.
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 8 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
- Adresse, die im
- Start-Address-Register ╔══════════════════════════════════════╗
- steht ─────────────────╫─┬──────────────────────────────────┐ ║
- ║ │ │ ║
- Zeilenzähler gleich ║ │ Bildschirmseite 2 │ ║
- Line-Compare-Register ─╫─┼▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄│ ║
- ┌─╫─┼─ │ ║
- Adresse 00h ─────────┘ ║ │ │ ║
- ║ │ Bildschirmseite 1 │ ║
- ║ │ │ ║
- Maximale Zeile ────────╫─┴──────────────────────────────────┘ ║
- ╚══════════════════════════════════════╝
-
-
- Im Start-Adress-Register steht eigentlich der Offset der
- Adresse. Die Segmentadresse ist nämlich durch den
- Bildschirmmodus bereits vorgegeben. Alle EGA/VGA-Grafikmoden
- beginnen mit der Segmentadresse A0000h und alle farbigen
- Textmoden mit der Segmentadresse B8000h.
-
-
- Beispiel zu Screen Splitting:
-
- Der Bildschirm soll im Modus 03h (VGA) genau in der Hälfte des
- Bildschirms geteilt werden. Es sollen dabei zwei völlig
- voneinander unabhängige Seiten dargestellt werden.
-
- a) Sicherstellung, daß sich die darzustellenden Seiten
- nicht überlappen.
- Ein Zeichen benötigt zwei Byte Speicherplatz.
- Im Modus 03h werden 80 Zeichen pro Zeile und 25 Zeilen
- dargestellt.
- Insgesamt werden also 2000 Zeichen am Bildschirm darge-
- stellt.
- Daraus ergibt sich ein benötigter Speicherplatz von
- FA0h.
- Für den Beginn der zweiten Seite muß also ein Wert
- größer oder gleich FA0h gewählt werden. Zum Beispiel
- Beginn der zweiten Seite ab 1000h.
-
- b) Laden des Start-Address-Registers
- Das Start-Address-Register wird mit 1000h geladen.
-
- c) Laden des Line-Compare-Registers
- Da der Bildschirminhalt genau ab der Hälfte gesplittet
- werden soll, muß der Wert C8h (200 Dez.) geladen
- werden.
-
-
- ACHTUNG: Die aktuelle Bildschirmseite ist in unseren Fall immer
- die Seite 1, da diese ab Offset 00h beginnt.
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 9 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
- 4. Benötigte Register
-
-
- Start-Address-Register
-
- Da für eine Adresse 16 bit erforderlich sind, gibt es zwei
- Start-Address-Register.
-
-
- Start-Adress-High-Register
-
- ┌───────────────────────────────────────────────┐
- │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
- │─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────│
- │ │ │ │ │ │ │ │ │
- └───────────────────────────────────────────────┘
- Registergruppe: CRTC Index: 0Ch
-
-
- Start-Adress-Low-Register
-
- ┌───────────────────────────────────────────────┐
- │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
- │─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────│
- │ │ │ │ │ │ │ │ │
- └───────────────────────────────────────────────┘
- Registergruppe: CRTC Index: 0Dh
-
-
- Line-Compare-Register
-
- Da die Anzahl der Zeilen größer ist als 256 (maximaler Wert
- eines 8 bit Registers), mußte bei EGA noch ein 9.bit und bei
- VGA sogar noch ein 10.bit hinzugefügt werden.
-
-
- Line-Compare-Register (bit 1 bis bit 8)
-
- ┌───────────────────────────────────────────────┐
- │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
- │─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────│
- │ │ │ │ │ │ │ │ │
- └───────────────────────────────────────────────┘
- Registergruppe: CRTC Index: 18h
-
-
- Overflow-Register (bit 9)
-
- ┌───────────────────────────────────────────────┐
- │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
- │─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────│
- │ │ │ │ X │ │ │ │ │
- └───────────────────────────────────────────────┘
- X entspricht dem 9.bit des Line-Compare-Registers
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 10 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
- Maximum-Scan-Line-Register (bit 10)
-
- ┌───────────────────────────────────────────────┐
- │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
- │─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────│
- │ │ X │ │ │ │ │ │ │
- └───────────────────────────────────────────────┘
- X entspricht dem 10.bit des Line-Compare-Registers
-
-
- Um das "Splitten" zu beenden, muß der maximale Wert ins Line-
- Compare-Register (9. und 10.bit in anderen Registern)
- geschrieben werden. Bei VGA (10 bit) ist dies der Wert 3FFh.
- Bei EGA (9 bit) ist dies der Wert (1FFh). Der Wert, der ins
- Line-Compare-Register geschrieben wird, sollte zwischen Null
- und der maximalen Zeilenzahl (entsprechend dem Modus) liegen.
- Außer beim Aufheben des Splitten, sollte dieser Wert niemals
- größer sein als die maximale Zeilenzahl.
-
-
- Input-Status#1 Register
-
-
- Dieses Register wird im nächsten Kapitel bei der
- Synchronisation verwendet.
-
- ┌───────────────────────────────────────────────┐
- │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
- │─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────│
- │ │ │ │ │ X │ │ │ │
- └───────────────────────────────────────────────┘
- Registergruppe: External Register Monochrome: 3BAh
- Color Display: 3DAh
- Bit 3: 0 : Display Mode
- 1 : Vertical Retrace
-
-
- 5. Synchronisation
-
-
- Das Schreiben in das Start-Address-Register und in das Line-
- Compare-Register kann nur zu bestimmten Zeitpunkten erfolgen.
-
-
- Vertical Retrace:
-
- Ist die Rückführungsphase des Elektronenstrahls, in welcher er
- vom rechten unteren Bildschirmeck zum linken oberen
- Bildschirmeck bewegt wird.
-
- Start-Address-Register:
-
- Der Registerinhalt wird während des Vertical-Retrace in den
- internen Adresszähler übertragen. Ins Register sollte also nur
- geschrieben werden, wenn der Bildschirm aufgebaut wird (Display
- Mode).
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 11 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
- Line-Compare-Register:
-
- Der Registerinhalt wird während des Bildschirmaufbaus nach
- jeder Rasterzeile zum Vergleich gelesen. Ins Register kann also
- nur während des Vertical-Retrace geschrieben werden.
-
- Durch Lesen des Input-Status#1 Register (siehe voriges Kapitel)
- können die Schreibvorgänge synchronisiert werden. Dabei wird
- auf die fallende, bzw. steigende Flanke von bit 3 gewartet.
-
-
-
-
- 6. Kurze Programmbeschreibung
-
-
- Das Programm mit den Namen SPLIT.COM ist resident und erlaubt
- das Abspeichern einer Bildschirmseite im Textmodus 03h. Ist der
- Bildschirminhalt abgespeichert worden, so kann durch
- herabscrollen der aktuellen Bildschirmseite 1 die
- Bildschirmseite 2 wieder hervorgeholt werden. Ist diese
- heruntergescrollt, kann sie jederzeit per Tastendruck
- heraufgescrollt werden. Durch mehrmaligen Tastendruck wird
- dabei das Scrollen beschleunigt.
-
- Tastendefinitionen:
-
- ALT-S Bildschirminhalt speichern
- ALT-D Aktuellen Bildschirm nach unten
- scrollen
- ALT-U Aktuellen Bildschirm nach oben scrollen
-
- Das Programm ist für eine VGA-Karte geschrieben, kann aber
- jederzeit durch Ändern (steht im Programmlisting) der
- entsprechenden Befehle an eine EGA-Karte angepaßt werden.
-
- Das Programm ist in zwei Dateien aufgeteilt:
-
- - SPLIT.ASM
- - SPLIT.MAC
-
- Wie man aus diesen Dateien ein lauffähiges Programm erstellt,
- wird in der Datei READ.ME erklärt.
-
-
-
-
- 7. Implementierungsdetails
-
-
- In dieser Kurzfassung sind die wichtigsten Punkte, die für die
- sinnvolle Programmierung einer EGA/VGA-Karte erforderlich sind,
- erläutert worden. Auf die Programmteile für die residente Pro-
- grammierung wird dagegen nicht näher eingegangen.
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 12 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
- Das Programm gliedert sich in drei Teile:
-
- - Installationsprozedur
- Installiert das Programm resident im
- Hauptspeicher.
- Prozedurname (Marke) im Assemblerlisting: Install
-
- - Tastatur-Interruptprozedur
- Wird bei jeden Tastendruck aufgerufen und über-
- prüft, ob die entsprechende Taste gedrückt wurde.
- Prozedurname: INT09h
-
- - Zeitgeber-Interruptprozedur
- Wird regelmäßig durch den Timer-Interrupt
- aufgerufen und sorgt dafür, daß die entsprechenden
- Tastenfunktionen richtig ausgeführt werden.
- Prozedurname: INT1Ch
-
-
-
- In der Datei SPLIT.MAC befinden sich die Makros für das
- Assemblerprogramm. Zu erwähnen ist hier, daß sich das Makro zum
- PUSH'en und POP'en der Register (Originalprogramm) unter dem
- Turbo-Assembler nicht assemblieren lies. Das Makro wurde dann
- durch eine geringfügige Modifikation lauffähig gemacht.
-
-
-
-
- 7.1 Installationsprozedur Install
-
-
- Die Installationsprozedur installiert die Prozeduren für
- Zeitgeber und Tastaturinterrupt, indem sie die alten
- Interruptvektoren sichert und die neuen Interruptvektoren
- installiert. Danach wird eine Copyright-Meldung ausgegeben. Da
- das Programm keinerlei Sprünge und keinerlei
- Unterprogrammaufrufe enthält, wurde von der Erstellung eines
- Struktogramms abgesehen.
-
-
-
-
- 7.2 Tastatur-Interruptprozedur INT09h
-
-
- In dieser Prozedur wird überprüft, ob eine der Tasten ALT-S,
- ALT-U oder ALT-D gedrückt wurde. Zum Programm-Listing wurde ein
- Struktogramm erstellt, welches im Anhang auf Seite 1 und 2 zu
- finden ist.
- Die Überprüfung, ob der richtige Grafikmodus eingestellt ist,
- erfolgt durch das Auslesen der entsprechenden Daten aus dem
- BIOS-Datenbereich (siehe Kapitel 2.4).
- Die Speicherstelle mit dem Namen Add_word, auch als Variable
- Add_word bezeichnet, hat die Aufgabe die Zeilenverschiebung (+1
- oder -1) für die Zeitgeber-Interruptprozedur zwischenzusichern.
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 13 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
- 7.3 Zeitgeber-Interruptprozedur INT1Ch
-
-
- Die Zeitgeber-Interruptprozedur hat die Aufgaben:
-
- - zu überprüfen, ob eine Verschiebung notwendig ist
- - die Verschiebung durchzuführen
-
- Überprüft wird dabei mit der Variable Add_word. Zu Erinnerung
- sei nochmals daraufhingewiesen, daß das Bildschirm-Splitten mit
- dem maximalen Wert für das Line-Compare Register aufgehoben
- wird. Aufheben des Splitten heißt, daß der Wert fürs Line-
- Compare Register -1 ist. Auch hier wurde zum Programm-Listing
- ein Struktogramm erstellt, welches im Anhang auf Seite 3 zu
- finden ist. Split_Screen steht im Programm als Makro und ist in
- der Datei SPLIT.MAC abgespeichert. Im Struktogramm wurde das
- ganze Makro nur als "Bildschirm splitten" erwähnt, weil der
- Programmablauf aus dem Programm-Listing eindeutig erkennbar
- ist. Im Makro wird die Adresse des CRTC-Registers aus dem BIOS-
- Datenbereich herausgelesen (siehe Kapitel 2.4).
-
-
-
-
- 8. Einsatz- und Erweiterungsmöglichkeiten
-
-
- Ein Einsatz ist nur dann möglich, wenn eine EGA oder VGA-Karte
- installiert ist. Die Verwendung des Splitting für die
- Darstellung von zwei Fenstern bietet sich geradeweg an. Wobei
- man aber beachten muß, daß jedes Fenster immer die selbe
- Fensterbreite, nämlich die Breite des Bildschirms besitzt.
- Solch eine Fenster-Darstellung ist zum Beispiel unter WordStar
- 5.0 realisiert. WordStar teilt den Bildschirm aber nicht mit
- der hier vorgestellten Methode.
- Im Moment funktioniert das Programm nur im Textmodus. Eine
- sinnvolle Erweiterung wäre, das Teilen des Bilschirms auch im
- Grafikmodus zu realisieren. Hier ist aber zu beachten, daß dies
- nur funktioniert, wenn ein Bildschirmmodus gewählt wird, der
- nicht mehr als die Hälfte des zur Verfügung stehenden
- Grafikkartenspeichers benötigt. Zum Beispiel ist das Splitten
- zu zwei unabhängigen Bildschirmfenstern im VGA-Grafikmodus
- 640x480 in 16 Farben nicht mehr möglich.
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90
-
-
-
-
-
- FH Nürnberg Seite 14 Screen Splitting
- ───────────────────────────────────────────────────────────────
-
- 9. Literaturverzeichnis
-
-
- Screen Splitting
- Ingo Eickmann
- mc Heft Januar 1990
-
- Programmer's Guide to the EGA and VGA Cards
- Richard F. Ferraro
- Addison-Wesley Publishing Company
-
- ───────────────────────────────────────────────────────────────
- FB N-F Kurzfassung 05/90