Seite 1 von 1

Tastendruck ändern durch Interrupt-Umleitung?

Verfasst: Mi 15. Sep 2021, 18:41
von markusk
Hallo,

ich experimentier gerade ein wenig mit einfachen TSR-Programmen in Turbo Pascal und nun will ich ein kleines Programm schreiben welches Tastatureingaben ändern kann, daß z.B. ein y erscheint wenn man ein z eingibt bzw. umgekehrt.

Wie kann ich das realisieren? Mein erster Ansatz war der den int 09h umzuleiten, den port $60 auszulesen, auf den Scancode für y oder z zu testen und dann den entsprechend geänderten Wert an den Port $60 zurück zu senden damit der alte Handler den geänderten Wert ausliest.

Aber ich hab mittlerweile gelesen daß das nicht geht weil man den Port $60 nicht beschreiben kann.

Wie könnte ich das also alternativ umsetzen? Eventuell durch Umleitung des int16h?

lg, Markus

Re: Tastendruck ändern durch Interrupt-Umleitung?

Verfasst: Do 16. Sep 2021, 19:22
von Dosenware

Re: Tastendruck ändern durch Interrupt-Umleitung?

Verfasst: Do 16. Sep 2021, 23:18
von mkarcher
Der Vorschlag von Dosenware war auch meine erste Idee. Wenn der nicht in Frage kommt (zum Beispiel, weil es auf einem PC/XT-BIOS klappen muss, das die Keyboard-Intercept-Funktion noch nicht hat), könnte man auch INT 09 hooken, und statt Port 60 umzuschreiben (was nicht ohne ganze fiese Tricks geht, möglicherweise könnte man da aber was dengeln, weil man den KBC dazu überreden kann, auch anderen Kram als Tastendrücke über Port 60 zur Verfügung zu stellen), kann man auch nach der Ausführung des Original-INT09 (den man dann per PUSHF/CALL aufrufen muss, nicht per JMP) in den BIOS-Tastaturpuffer schauen, und dort die Daten umschreiben, auf die INT 16 zugreifen wird. Dabei sollte man prüfen, ob das Ende der Queue "echt" ist, nicht dass man beim Drücken von "Z" das Ergebnis "Z" durch "Y" ersetzt, und beim Loslassen von "Z" (erneut ein INT 09) das "Y" im Tastaturpuffer für ein Ergebnis des aktuellen INT 09 hält, und es durch "Z" zurückersetzt...

Re: Tastendruck ändern durch Interrupt-Umleitung?

Verfasst: Mo 20. Sep 2021, 19:21
von zatzen
Ich verweise hier mal auf meinen Thread "Programm durch TSR oder "übergeordnetes" Programm mit Interrupt-Routinen beenden" - da stellt sich auch ein ähnliches Problem.