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 ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij 488h ³ StatusÄBytes ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij 471h ³ Optionen und Timer ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij 469h ³ VIDEO - Bereich ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij 449h ³ Disk ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij 435h ³ Tastatur ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij 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 ³ ³ ³ ³ ³ ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij 3E0h ³ CGA EGA/VGA ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij 3D0h ³ EGA/VGA ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij 3C0h ³ MDA EGA/VGA im Monochrom-Modus ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij 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 ³ ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij ³ ³ Register mit Index 01h ³ ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij ÀÄÄÄÄÄ ³ Register mit Index 02h ³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij ³ ³ ³ ³ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 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 ³ ³ÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄij ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Registergruppe: CRTC Index: 0Ch Start-Adress-Low-Register ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 7 ³ 6 ³ 5 ³ 4 ³ 3 ³ 2 ³ 1 ³ 0 ³ ³ÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄij ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 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 ³ ³ÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄij ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Registergruppe: CRTC Index: 18h Overflow-Register (bit 9) ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ 7 ³ 6 ³ 5 ³ 4 ³ 3 ³ 2 ³ 1 ³ 0 ³ ³ÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄij ³ ³ ³ ³ 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 ³ ³ÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄij ³ ³ 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 ³ ³ÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄÄÅÄÄÄÄij ³ ³ ³ ³ ³ 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 lagen fr die Programmierung einer EGA/VGA-Karte. Hierbei werd