Michael Tischer

D

гл r\

Systemprogrammierung

DATA BECKER к Inhaltsverzeichnis

1. Der PC und die Systemprogrammierung 19 1.1 Was ist Systemprogrammierung? 19 1.2 Das Drei-Schichten-Modell 20 1.3 Grundkonzepte der PC-Hardware 23 1.3.1 Die Entwicklung des PCs 23 1.3.2 Der Bus 24 1.3.3 Die Support-Chips 28 1.3.4 Der Speicheraufbau 32 1.3.5 Was kam nach dem Original-IBM-PC? 34 1.4 Der Prozessor 36 1.4.1 Das Gehirn des PCs 36 1.4.2 Die Prozessor-Register 38 1.4.3 Bildung von Speicheradressen 41 1.5 Kommunikation mit der Hardware 48 1.6 49 1.6.1 Aufbau und Lage der -Vektor-Tabelle 50 1.6.2 Das Standard-Layout der Interrupt-Vektor-Tabelle 51 1.6.3 Hardware-Interrupts 53 1.7 Zusammenspiel zwischen Hardware, BIOS, DOS und den Anwendungsprogrammen 57 1.8 Der Pentium-Prozessor 59 1.8.1 Instruktionsausführung und Branch-Prediction 61 1.8.2 Der Cache 65 1.8.3 Die Fließkommaeinheit 74 1.8.4 Weitere Merkmale 76

2. Systemprogrammierung in der Praxis 77 2.1 Systemprogrammierung mit QuickBasic 77 2.1.1 Die Datentypen von QuickBasic 77 2.1.2 Aufruf von Interrupts 83 2.1.3 Puffer hin, Puffer her 86 2.2 Systemprogrammierung in PASCAL 87 2.2.1 Die Datentypen von Turbo Pascal 88 2.2.2 Aufruf von Interrupts 93 2.2.3 Puffer hin, Puffer her 95 2.2.4 Zugriff auf Ports 97 2.3 Systemprogrammierung in С 98 2.3.1 Die Datentypen von С 99 2.3.2 Aufruf von Interrupts 104 2.3.3 Puffer hin, Puffer her 107 2.3.4 Zugriff auf Ports HO 3. Das BIOS 115 3.1 Der BIOS-Standard 116 3.2 Ab die POST 119 3.3 BIOS-Version und PC-Typ 121 3.4 Die Variablen des BIOS 123

4. Der Interrupt-Controller 137

5. Der DMA-Controller 162

6. Die Tastatur 182 6.1 Grundlagen der Tastaturprogrammierung 182 6.1.1 Der lange Marsch - von der Taste bis zum Programm 182 6.1.2 Die verschiedenen PC-Tastaturen 185 6.2 Zugriff auf die Tastatur mit dem BIOS 188 6.2.1 Die BIOS-Funktionen des Interrupts 16h 189 6.2.2 Tastaturabfrage bei MF-II-Tastaturen 202 6.2.3 Die Variablen des BIOS-Tastatur-Interrupts 208 6.2.4 Die Sache mit den Scan-Codes 214 6.3 Tastatur-Interrupt-Handler 215 6.3.1 Eingriff in den BIOS-Tastatur-Interrupt 16h 215 6.3.2 Abfangen von Tastatur-Hardware-Interrupts 219 6.4 Der Tastatur-Controller und seine Programmierung 221

7. Serielle Schnittstelle 232 7.1 Asynchrone Kommunikation 234 7.2 RS 232 238 7.3 Das Innenleben der seriellen Schnittstelle 242 7.3.1 Die Register des UART 242 7.3.2 Die Nachfolger des 8250 252 7.4 Zugriff auf die serielle Schnittstelle über das BIOS 255 7.5 Beispielprogramme 257

8. Parallele Schnittstelle 276 8.1 Zugriff auf den Drucker mit dem BIOS 276 8.1.1 Aufruf der BIOS-Funktionen 280 8.1.2 Umleitung des BIOS-Drucker-Interrupts 281 8.2 Direkte Programmierung der parallelen Schnittstelle 283 8.2.1 Die I/O-Ports der Schnittstelle 283 8.2.2 Die Register der Schnittstelle 285 8.2.3 Struktur der Kommunikation 287 8.2.4 Die Kabel 289 8.2.5 Software zur Datenübertragung 293 9. Bildschirmausgabe und Videokarten 311 9.1 Historie und Leistungsmerkmale 311 9.2 Das Video-BIOS 318 9.3 Ermittlung der installierten Videokarten 336 9.4 Grundlegender Aufbau und Funktionsweise einer Videokarte ... 345 9.4.1 Das Video-RAM 355 9.5 Die IBM-Monochrom-Karte (MDA) 365 9.6 Die Hercules-Grafikkarte (HGC) 373 9.7 Die IBM-Color-Karte (CGA) 383 9.8 Programmierung von EGA-/VGA-Karten 397 9.8.1 Auf den Monitor kommt's an 399 9.8.2 Auswahl und Programmierung von Zeichensätzen 404 9.8.3 Smooth-Scrolling 435 9.8.4 Abschaltung des Bildschirms 450 9.8.5 Das Prinzip der Bit-Planes 452 9.8.6 Die 16-Farben-Grafikmodi der EGA- und VGA-Karte 466 9.8.7 Die VGA-Grafikmodi mit 256 Farben 482 9.8.8 Freie Farbwahl 503 9.8.9 Sprites 518 9.8.10 Die Register der EGA- und VGA-Karte 573 9.9 Super-VGA-Karten 608 9.9.1 Der VESA-Standard 621 10. Disketten und Festplatten 631 10.1 Aufbau von Disketten und Festplatten 632 10.2 Diskettenlaufwerke und -formate 634 10.3 Zugriff auf Disketten mit dem BIOS 639 10.4 Zugriff auf Festplatten mit Hilfe des BIOS 660 10.5 Festplatten und ihre Controller 666 10.5.1 ST506-Controller 667 10.5.2 ESDI-Controller 668 10.5.3 SCSI 670 10.5.4 IDE 671 10.5.5 Vom Controller in den Speicher 673 10.6 Aufzeichnung der Informationen auf einer Festplatte 675 10.6.1 Das FM-Verfahren 675 10.6.2 Das MFM-Verfahren 676 10.6.3 Das RLL-Verfahren 677 10.7 Kleiner, schneller, billiger 679 10.7.1 Der Interleave-Faktor 680 10.7.2 Track Skewing und Cylinder-Skewing 683 10.7.3 Multiple Zone Recording. 684 10.7.4 Fehlerkorrektur 685 10.7.5 Was sonst noch drauf muß 686 10.7.6 Zugriffszeiten und ihre Messung 687 10.8 Festplattenpartitionen 689 10.8.1 Untersuchung der Partitionsstruktur 693 11. Mausprogrammierung 697 11.1 Die Software-Schnittstelle 697 11.2 Programmbeispiele 708 11.3 Wie kommt die Maus in den Rechner? 720

12. Joystick 723

13. Datum, Uhrzeit und die batteriegepufferte Echtzeituhr... 731 13.1 Abfrage von Datum und Uhrzeit mit dem BIOS 731 13.2 Abfrage und Programmierung der Echtzeituhr 735 13.3 Konfigurationsinformationen im batteriegepufferten RAM 740 13.4 Beispielprogramme 742

14. Erweiterungsspeicher — (Dieses Kapitel finden Sie auf der CD) "'——"-• 14.1 nach dem EMS-Standard 14.1.1 Die Geschichte des LIM-Standards 14.1.2 Die EMS-Version 3.2 14.2 Extended Memory 14.2.1 Zugriff auf das Extended Memory mit dem BIOS 14.2.2 Rangeleien um das Extended Memory 14.2.3 Direkter Zugriff auf die HMA aus dem 14.2.4 Der XMS-Standard

15. Tonerzeugung über den Timer 746

16. Konfiguration und Prozessortyp 753 16.1 Feststellen der Konfiguration mit Hilfe des BIOS 753 16.1.1 Abfrage der Hardware-Ausstattung 753 16.1.2 Feststellen der Größe des RAM-Speichers mit Hilfe des BIOS 755 16.1.3 Programmbeispiele 755 16.2 Ermittlung von Prozessor und Co-Prozessor 758 16.2.1 Ermittlung des Prozessortyps 759 16.2.2 Co-Prozessor-Test 766 16.2.3 Beispielprogramme 767

17. Die Entwicklungsgeschichte des DOS 775

18. Der interne Aufbau des DOS 785 18.1 Die verschiedenen DOS-Komponenten 785 18.2 Booten des DOS 787 19. COM- und EXE-Programme 789 19.1 Unterschiede zwischen COM- und EXE-Programmen 789 19.2 Programmierung von COM-Programmen 791 19.3 EXE-Programme 796 19.4 Der PSP 800

20. Zeicheneingabe und -ausgäbe 803 20.1 Handle-Funktionen 803 20.2 Traditionelle Funktionen 809 20.3 Umschaltung vom Raw- in den Cooked-Modus 813 20.4 DOS-Filter 815 20.5 Ein Filter-Beispiel 818

21. Dateiverwaltung 822 21.1 Die zwei Gesichter des DOS 822 21.2 Handle-Funktionen 823 21.3 FCB-Funktionen 826 21.4 Handies kontra FCB 833

22. Zugriff auf Verzeichnisse und Laufwerke 834 22.1 Verwaltung von Verzeichnissen 834 22.2 Suche nach Dateien 837 22.2.1 Dateisuche über FCB-Funktionen 839 22.2.2 Dateisuche über Handle-Funktionen 845

23. Datum und Uhrzeit 857

24. RAM-Speicherverwaltung 860 24.1 RAM-Speicherverwaltung des DOS 860 24.2 Wo der Speicher herkommt - TPA und UMBs 863 24.3 Die Allokation von Speicher sichtbar gemacht 868 24.4 Hinter den Kulissen der Speicherverwaltung 876

25. Die EXEC-Funktion 891 25.1 EXEC zum Laden und Starten von Programmen 891 25.2 Die EXEC-Funktion zum Laden von Overlays 897 25.3 Neuerungen ab der Version 5.0 899 25.4 Programmbeispiel 900

26. Ctrl-Break- und Critical-Error-Interrupt 903

27. Gerätetreiber 909 27.1 Gerätetreiber unter DOS 909 27.1.1 Zeichentreiber 913 27.1.2 Blocktreiber 914 27.1.3 Zugriff auf Gerätetreiber 915 27.2 Die Struktur eines Gerätetreibers 915 27.3 Die Funktionen eines Gerätetreibers 919 27.4 Uhrtreiber 935 27.5 Aufruf eines Gerätetreibers durch DOS 936 27.6 Direkter Zugriff auf Gerätetreiber: IOCTL 938 27.7 Tips zur Entwicklung eines Gerätetreibers 940 27.8 Treiberbeispiele 941 27.9 EXE-Programme als Gerätetreiber 952 27.10 CD-ROM - ein ganz besonderer Gerätetreiber 954

28. Das Dateisystem von MS-DOS 957 28.1 Die Grundstruktur des Dateisystems 957 28.2 Der Boot-Sektor 958 28.3 Die File-Allocation-Table (FAT) 960 28.4 Das Hauptverzeichnis 966 28.5 Der Datenbereich 970 28.6 Diskettenformate 972

29. Der Multiplexer 974 29.1 Funktionsweise des Multiplexers 974 29.2 Nutzung des Multiplexers durch DOS-Programme 977

30. Netzwerkprogrammierung 981 30.1 Die Grundlagen 981 30.2 Netzwerkprogrammierung unter DOS 984

31. DOS und Windows 1000 31.1 Windows entdecken 1000

32. Wie wahre ich Kompatibilität? 1005 32.1 Kompatibilitätsprobleme bei der DOS-Programmierung 1005

33. Geheime DOS-Strukturen 1008 33.1 Geheim und nicht geheim 1008 33.2 Der DOS-Info-Block 1009

34. DOS 6 1014 34.1 DoubleSpace 1014 34.1.1 Datenkompression 1014 34.1.2 CVF-Dateien 1018 34.1.3 Aufbau einer CVF-Datei 1020 34.1.4 Die Datenstrukturen im einzelnen 1023 34.1.5 DoubleSpace und der Bootvorgang 1028 34.1.6 Die Software-Schnittstelle von DoubleSpace 1030 34.2 Die Kompressionsschnittstelle MRCI 1034 35. TSR-Programmierung 1047 35.1 Aktivierung von TSR-Programmen 1048 35.2 TSR-Programme in Pascal und С 1056 35.2.1 Die Funktionen der Assembler-Schnittstelle 1056 35.2.2 Die Interrupt-Handler 1060 35.2.3 Die Hochsprachen-Programme 1066 35.2.4 Noch ein paar Tips zum Schluß 1086

36. , DOS-Extender, DPMI/VCPI 1088 36.1 Der Protected Mode 1088 36.1.1 Merkmale von Multitasking-Betriebssystemen 1089 36.1.2 Der Protected Mode des 80286 1091 36.1.3 Der Protected Mode des 80386 und des i486 1113 36.1.4 Der Virtual-86-Mode beim 80386 und beim i486 1127 36.2 Protected Mode-Utilities 1129 36.2.1 EMS-Simulatoren und Speicherverwaltungsprogramme 1129 36.2.2 Multitasker 1131 36.3 DOS-Extender 1135 36.3.1 Die Anforderungen des Protected Mode 1137 36.3.2 DOS-Extender für den 80286 1142 36.3.3 DOS-Extender für den 80386 1145 36.4 DPMI und VCPI 1149 36.4.1 VCPI 1150 36.4.2 DPMI 1159

37. Die CD-ROM-Technologie 1174 37.1 CD-Formate 1174 37.1.1 Das physikalische Format 1174 37.1.2 High Sierra - das logische Format 1186 37.2 Einbindung von CD-ROM-Laufwerken in eine DOS/Windows- Umgebung 1192 37.3 Software-Zugriff über das MSCDEX-API 1195 37.4 Software-Zugriff über den CD-ROM-Treiber 1206 37.5 Programmbeispiele 1231

38. Sound-Blaster & Sound-Karten 1255 38.1 Die Familie der Sound-Blaster-Karten 1255 38.2 FM-Synthese 1257 38.2.1 Die physikalische Natur von Tönen und die Frequenzmodulation. 1257 38.2.2 Tonerzeugung mittels Generatorzellen und Kanälen 1261 38.2.3 Einstellung der Generatorzellen 1268 38.2.4 Einstellung der Kanäle l 38 2.5 FM-Proerammierung in der Praxis 1291 38.3 Sampling 38.3.1 DSP-Grundlagen f~~ 38.3.2 Zugriff auf den DSP f*» 38.3.3 DSP-Kommandos l^f 38.3.4 Harddisk-Recording in der Praxis 1344 38.4 Der Mixer 38.5 Sprachausgabe

Teil 6 - Anhang

(Diesen Teil finden Sie auf der CD) Anhang A Die BIOS-Funktionen jfiÄ- Anhang В Die Funktionen des EGA- und VGA-BIOS AnhangC Die Funktionen des VESA-Standards Anhang D Das DOS-Application-Program-Interface (DOS-API) AnhangE Der Multiplexer-Interrupt 27h Anhang F Die Funktionen des EMM AnhangG Die Funktionen des XMS Anhang H Die Funktionen des Maustreibers Anhang I Die Hardware-Interrupts AnhangJ Einführung in die Zahlensysteme Stichwortverzeichnis 1385