keybios.cpp 973 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include "../mmage/mmage.h"
  2. #include "wwbios.h"
  3. extern "C" {
  4. #include "../wonx/wonx_include/key.h"
  5. }
  6. enum {
  7. KEY_PRESS_CHECK = 0,
  8. KEY_HIT_CHECK,
  9. KEY_WAIT,
  10. KEY_SET_REPEAT,
  11. KEY_GET_REPEAT,
  12. KEY_HIT_CHECK_WITH_REPEAT,
  13. };
  14. void key_handler(int func_no) {
  15. WORD ret;
  16. switch(func_no) {
  17. case KEY_PRESS_CHECK:
  18. wregs[AX] = key_press_check();
  19. break;
  20. case KEY_HIT_CHECK:
  21. wregs[AX] = key_hit_check();
  22. break;
  23. case KEY_WAIT:
  24. // return 値が 0 のときは ip を -2 して見かけ上 wait してるようにみせかける
  25. ret = key_wait();
  26. if(ret) {
  27. wregs[AX] = ret;
  28. } else {
  29. WaitForSingleObject(wonw32ctx->syncevent, INFINITE);
  30. ip = ip - 2;
  31. }
  32. break;
  33. case KEY_SET_REPEAT:
  34. key_set_repeat(*bregs[BL], *bregs[BH]);
  35. break;
  36. case KEY_GET_REPEAT:
  37. wregs[AX] = key_get_repeat();
  38. break;
  39. case KEY_HIT_CHECK_WITH_REPEAT:
  40. wregs[AX] = key_hit_check_with_repeat();
  41. break;
  42. default:
  43. break;
  44. }
  45. }