Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Interrupthandler

JamesBomb / 13 Antworten / Flachansicht Nickles

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 :-))

bei Antwort benachrichtigen
Was ist 0 in asm? JamesBomb
T-Rex JamesBomb „Interrupthandler“
Optionen

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.
 GrüßeT-Rex 
bei Antwort benachrichtigen