ps2base.c
上传用户:qddsws
上传日期:2022-06-22
资源大小:723k
文件大小:1k
源码类别:

操作系统开发

开发平台:

C/C++

  1. #include <devices/ps2base.h>
  2. void kbdWrite(word port, byte data) {
  3. dword timeout;
  4. byte stat;
  5. for (timeout = 500000L; timeout != 0; timeout--){
  6. stat = inportb(KEYB_CTRL);
  7. if ((stat & 0x02) == 0) break;
  8. }
  9. if (timeout != 0) outportb(port, data);
  10. }
  11. byte kbdRead() {
  12. unsigned long Timeout;
  13. byte Stat, Data;
  14. for (Timeout = 50000L; Timeout != 0; Timeout--) {
  15. Stat = inportb(KEYB_CTRL);
  16. /* loop until 8042 output buffer full */
  17. if ((Stat & 0x01) != 0) {
  18. Data = inportb(KEYB_PORT);
  19. /* loop if parity error or receive timeout */
  20. if((Stat & 0xC0) == 0) return Data;
  21. }
  22. }
  23. return -1;
  24. }
  25. byte kbdWriteRead(word port, byte data, const char* expect) {
  26. int RetVal;
  27. kbdWrite(port, data);
  28. for (; *expect; expect++) {
  29. RetVal = kbdRead();
  30. if ((byte) *expect != RetVal) {
  31.   return RetVal;
  32. }
  33. }
  34. return 0;
  35. }