home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / PASCAL / KEYBUF / KEYBUF.DOC next >
Text File  |  1990-01-30  |  2KB  |  44 lines

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