home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C!T ROM 2
/
ctrom_ii_b.zip
/
ctrom_ii_b
/
PROGRAM
/
PASCAL
/
KEYBUF
/
KEYBUF.DOC
next >
Wrap
Text File
|
1990-01-30
|
2KB
|
44 lines
Manipuleren van de keyboard buffer
==================================
Auteur: Albert Siersema
Filosoft/programmers BBS, (031)050-412288, 24 uur, 300/1200/2400
Datum : 29-01-1990
Een gebruiker van mijn BBS stelde een vraag die met dit onderwerp te maken had.
Ik ben eens achter de PC gekropen, wat teksten doorgesnuffeld en heb vervolgens
wat in Pascal in elkaar geknutseld. Hier een uitleg hoe de PC met de
toetsaanslagen omgaat.
Wanneer een IRQ 1 optreedt van het keyboard zal INT 9h deze verwerken en in de
toetsenbordbuffer zetten. Met INT 16h vervolgens de status van de toetsen en de
buffer opgevraagd worden.
Softwarematig gezien zit de buffer op adres 0040:001E (in hex). De buffer is
cyclisch en wordt bestuurd door twee pointers, welke ik GetPnt en PutPnt zal
noemen. GetPnt geeft aan waar het eerstvolgende karakter opgehaald kan worden
en PutPnt geeft aan waar het eerstvolgende karakter geplaatst kan worden. De
buffer is 20h bytes lang, MAAR ieder karakter heeft een twee bytes entry in de
buffer. Het eerst byte geeft volgens mij aan of het karakter een gewoon ASCII
of een Extended ASCII (functietoetsen enz.) is. Het tweede byte is de toets (of
ASCII kode).
PutPnt bevindt zich op 0040:001C en GetPnt op 0040:001A. Dit wetende kun je
teksten in de keyboardbuffer zetten alsof ze ingetypt werden. Helaas is dit
beperkt tot 15 karakters. Gelukkig beschikt het datagebied over nog twee
pointers, nl. een die het begin van de keyboardbuffer en een die het eind van
de keyboardbuffer aangeeft. Deze pointers staan op 0040:0080 respektievelijk
0040:0082. Een stuk vrij geheugen vinden we op 0:0534 wat overeenkomt met
0040:0134.
Met bovenstaande gegevens kunnen we leuke dingen uithalen. Een daarvan is
simpelweg de keyboardbuffer vergroten, zodat we meer dan maar 15 karakter in
het voren kunnen typen. Stel we willen een keyboardbuffer van 40 karakters. De
volgende stappen geven aan hoe dat moet gebeuren:
0040:0080 <- 0134 (zet op adres 0040:0080 het Word (2 bytes) 0134h)
0040:0080 <- 0134 + 40*2+2 (40 karakters)
0040:001A <- 0134 (zet GetPnt en PutPnt op begin buffer, dit wist tevens de)
0040:001C <- 0134 (buffer)
Het een en ander is verzameld in de Pascal source KEYBUF.PAS welke een aantal
routines bevat waarmee met de keyboard buffer gemanipuleerd kan worden.
Enjoy.....