Hi!
Wo im Speicher liegt die Interrupt-Vektor-Tabelle? Wie kann ich eine Interruptbehandlungsroutine reinschreiben?
Geht dies auch mit einer Hochsprache?
(Darunter fällt auch noch C :-))
Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge
Moin,
folgendes Buch:
TuneUp für TurboPascal/TurboVision, Dr. Trutz Eyke Podschun
Sybex-Verlag, ISBN 3-8155-0027-3, (damals ) 89DM
Wegen Tastatur-Puffer:
Für das Auslesen des Tastaturpuffers gibt es den BIOS-Int 16hex. Dieser bietet bei allen Computern mindestens drei Funktionen:
- Funktion 00hex liest ein Zeichen aus dem Tastaturpuffer, der im BIOS-Datensegment liegt und von einem weiteren BIOS-Int (Nummer 09hex) gefüllt wird, wenn eine Taste oder Tastenkombination gedrückt wird.
- Funktion 01hex stellt fest, ob ein Zeichen im besagten Tastaturpuffer liegt
- Funktion 02hex gibt über den Zustand der sogenannten Statustasten wie STR, ALT, SHIFT Auskunft.
Dies reichte für die alten Tastaturen (zehn Funktionstasten, kein NumPad etc) völlig aus. Irgendwann kamen andere Tastaturen und zwecks Abwärtskompatibilität wurde Int 16hex erweitert:- Zu jeder Funktion einfach 10hex addieren, dann kann man auch die anderen Tasten auf heutigen Tastaturen lesen (Funktionen 10hex bis 12hex des Int 16hex).
Jetzt kann man schon recht viel damit machen. Noch ein paar Deklarationen:- kbS1 : byte absolute $0040:0017;
- kbS2 : byte absolute $0040:0018;
- kbS3 : byte absolute $0040:0096;
- kbBufHead : word absolute $0040:$001A
- kbBufTail : word absolute $0040:$001C
- kbBuffer : array [$0F..$1E] of word absolute $0040:$001E;
kbBuffer ist der Tastaturpuffer, kbBufHead gibt die Position des nächsten auszulesenden Zeichens an, kbBufTail gib an, wo Int 09hex das nächste Zeichen reinschreiben muß.
Sind beide Werte gleich, ist der Puffer leer.
Liegt kbBufTail ein Zeichen "vor" kbBufHead, ist der Puffer voll.
kbBuffer ist ein Ringpuffer, d.h. wenn ein Zeichen an die (physikalisch) letzte Adresse 3Chex geschrieben worden ist, erfolgt der nächste Eintrag wieder an der (physikalisch) ersten Adresse 1Ehex.
Jetzt noch was zu kbS1, kbS2, kbS3: Das sind die Statustasten.
kbS1 - Zustände der Schalter Insert, Caps, Scroll, Num, Alt, Strg, links und rechts Shift:
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
Ins | Caps | Num | Scroll | Alt | Strg | Shift li | Shift re |
kbS2 - Informationen zu Insert, Caps, Scroll, Num, SysReq, links Alt, links Strg, sowie Schalter Pause:
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
Ins | Caps | Num | Scroll | Pause | SysReq | Alt li | Strg li |
kbS3 - rechts Alt und rechts Strg, sowie Flags, die das BIOS benötigt:
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
n/a | n/a | n/a | n/a | Alt re | Strg re | n/a | n/a |
So, das sollte als erstes an Infos reichen.