Tastendruck ändern durch Interrupt-Umleitung?

Antworten
markusk
MemMaker-Benutzer
Beiträge: 72
Registriert: Fr 19. Apr 2013, 11:12

Tastendruck ändern durch Interrupt-Umleitung?

Beitrag 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
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3740
Registriert: Mi 24. Mai 2006, 20:29

Re: Tastendruck ändern durch Interrupt-Umleitung?

Beitrag von Dosenware »

mkarcher
MemMaker-Benutzer
Beiträge: 75
Registriert: Fr 5. Jun 2020, 19:38

Re: Tastendruck ändern durch Interrupt-Umleitung?

Beitrag 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...
Benutzeravatar
zatzen
DOS-Kenner
Beiträge: 486
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Tastendruck ändern durch Interrupt-Umleitung?

Beitrag 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.
mov ax, 13h
int 10h
Antworten