home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
assemblr
/
library
/
screen
/
split
/
split.txt
< prev
next >
Wrap
Text File
|
1990-08-13
|
30KB
|
823 lines
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