systembios.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #include "../mmage/preference.h"
  2. #include "wwbios.h"
  3. extern "C" {
  4. #include "../wonx/wonx_include/system.h"
  5. }
  6. enum {
  7. SYS_INTERRUPT_SET_HOOK = 0,
  8. SYS_INTERRUPT_RESET_HOOK,
  9. SYS_WAIT,
  10. SYS_GET_TICK_COUNT,
  11. SYS_SLEEP,
  12. SYS_SET_SLEEP_TIME,
  13. SYS_GET_SLEEP_TIME,
  14. SYS_SET_AWAKE_KEY,
  15. SYS_GET_AWAKE_KEY,
  16. SYS_SET_KEEPALIVE_INT,
  17. SYS_GET_OWNERINFO,
  18. SYS_SUSPEND,
  19. SYS_RESUME,
  20. SYS_SET_REMOTE,
  21. SYS_GET_REMOTE,
  22. SYS_ALLOC_IRAM,
  23. SYS_FREE_IRAM,
  24. SYS_GET_MY_IRAM,
  25. SYS_GET_VERSION,
  26. SYS_SWAP,
  27. SYS_SET_RESUME,
  28. SYS_GET_RESUME,
  29. };
  30. void system_handler(int func_no) {
  31. int tmp;
  32. switch(func_no) {
  33. case SYS_INTERRUPT_SET_HOOK:
  34. /*
  35. sys_interrupt_set_hook(*bregs[AL], (intvector_t *)(c_ds + wregs[BX]), (intvector_t *)(c_ds + wregs[DX]));
  36. */
  37. break;
  38. case SYS_INTERRUPT_RESET_HOOK:
  39. /*
  40. sys_interrupt_reset_hook(*bregs[AL], (intvector_t *)(c_ds + wregs[BX]));
  41. */
  42. break;
  43. case SYS_WAIT:
  44. sys_wait(wregs[CX]);
  45. break;
  46. case SYS_GET_TICK_COUNT:
  47. tmp = sys_get_tick_count();
  48. wregs[DX] = (tmp >> 16) & 0xffff;
  49. wregs[AX] = tmp & 0xffff;
  50. break;
  51. case SYS_SLEEP:
  52. sys_sleep();
  53. break;
  54. case SYS_SET_SLEEP_TIME:
  55. sys_set_sleep_time(*bregs[BL]);
  56. break;
  57. case SYS_GET_SLEEP_TIME:
  58. wregs[AX] = sys_get_sleep_time();
  59. break;
  60. case SYS_SET_AWAKE_KEY:
  61. sys_set_awake_key(wregs[BX]);
  62. break;
  63. case SYS_GET_AWAKE_KEY:
  64. wregs[AX] = sys_get_awake_key();
  65. break;
  66. case SYS_SET_KEEPALIVE_INT:
  67. sys_set_keepalive_int(*bregs[BL]);
  68. break;
  69. case SYS_GET_OWNERINFO:
  70. memcpy((void *)(c_ds + wregs[DX]), (void *)&mmconfig->ownerinfo,
  71. (wregs[CX] > sizeof(mmconfig->ownerinfo)) ? sizeof(mmconfig->ownerinfo) : wregs[CX]);
  72. // sys_get_ownerinfo(wregs[CX], (char *)(c_ds + wregs[DX]));
  73. break;
  74. case SYS_SUSPEND:
  75. wregs[AX] = sys_suspend(*bregs[AL]);
  76. break;
  77. case SYS_RESUME:
  78. sys_resume(*bregs[AL]);
  79. break;
  80. case SYS_SET_REMOTE:
  81. sys_set_remote(*bregs[AL]);
  82. break;
  83. case SYS_GET_REMOTE:
  84. wregs[AX] = sys_get_remote();
  85. break;
  86. case SYS_ALLOC_IRAM:
  87. wregs[AX] = (unsigned short)sys_alloc_iram((void *)wregs[BX], wregs[CX]);
  88. break;
  89. case SYS_FREE_IRAM:
  90. sys_free_iram((void *)wregs[BX]);
  91. break;
  92. case SYS_GET_MY_IRAM:
  93. wregs[AX] = (unsigned short)sys_get_my_iram();
  94. break;
  95. case SYS_GET_VERSION:
  96. wregs[AX] = sys_get_version();
  97. break;
  98. case SYS_SWAP:
  99. wregs[AX] = sys_swap(*bregs[AL]);
  100. break;
  101. case SYS_SET_RESUME:
  102. sys_set_resume(wregs[BX]);
  103. break;
  104. case SYS_GET_RESUME:
  105. wregs[AX] = sys_get_resume();
  106. break;
  107. default:
  108. break;
  109. }
  110. }