dispbios.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. #include "../mmage/mmage.h"
  2. #include "mmvm.h"
  3. #include "wwbios.h"
  4. extern "C" {
  5. #include "../wonx/wonx_include/disp.h"
  6. }
  7. enum {
  8. DISPLAY_CONTROL = 0,
  9. DISPLAY_STATUS,
  10. FONT_SET_MONODATA,
  11. FONT_SET_COLORDATA,
  12. FONT_GET_DATA,
  13. FONT_SET_COLOR,
  14. FONT_GET_COLOR,
  15. SCREEN_SET_CHAR,
  16. SCREEN_GET_CHAR,
  17. SCREEN_FILL_CHAR,
  18. SCREEN_FILL_ATTR,
  19. SPRITE_SET_RANGE,
  20. SPRITE_SET_CHAR,
  21. SPRITE_GET_CHAR,
  22. SPRITE_SET_LOCATION,
  23. SPRITE_GET_LOCATION,
  24. SPRITE_SET_CHAR_LOCATION,
  25. SPRITE_GET_CHAR_LOCATION,
  26. SPRITE_SET_DATA,
  27. SCREEN_SET_SCROLL,
  28. SCREEN_GET_SCROLL,
  29. SCREEN2_SET_WINDOW,
  30. SCREEN2_GET_WINDOW,
  31. SPRITE_SET_WINDOW,
  32. SPRITE_GET_WINDOW,
  33. PALETTE_SET_COLOR,
  34. PALETTE_GET_COLOR,
  35. LCD_SET_COLOR,
  36. LCD_GET_COLOR,
  37. LCD_SET_SEGMENTS,
  38. LCD_GET_SEGMENTS,
  39. LCD_SET_SLEEP,
  40. LCD_GET_SLEEP,
  41. SCREEN_SET_VRAM,
  42. SPRITE_SET_VRAM,
  43. };
  44. void disp_handler(int func_no) {
  45. int tmp;
  46. switch(func_no) {
  47. case DISPLAY_CONTROL:
  48. display_control(wregs[BX]);
  49. break;
  50. case DISPLAY_STATUS:
  51. wregs[AX] = display_status();
  52. break;
  53. case FONT_SET_MONODATA:
  54. font_set_monodata(wregs[BX], wregs[CX], c_ds + wregs[DX]);
  55. break;
  56. case FONT_SET_COLORDATA:
  57. font_set_colordata(wregs[BX], wregs[CX], c_ds + wregs[DX]);
  58. break;
  59. case FONT_GET_DATA:
  60. font_get_data(wregs[BX], wregs[CX], c_ds + wregs[DX]);
  61. break;
  62. case FONT_SET_COLOR:
  63. font_set_color(wregs[BX]);
  64. break;
  65. case FONT_GET_COLOR:
  66. wregs[AX] = font_get_color();
  67. break;
  68. case SCREEN_SET_CHAR:
  69. screen_set_char(*bregs[AL], *bregs[BL], *bregs[BH], *bregs[CL], *bregs[CH],
  70. (unsigned short *)(c_ds + wregs[DX]));
  71. break;
  72. case SCREEN_GET_CHAR:
  73. screen_get_char(*bregs[AL], *bregs[BL], *bregs[BH], *bregs[CL], *bregs[CH],
  74. (unsigned short *)(c_ds + wregs[DX]));
  75. break;
  76. case SCREEN_FILL_CHAR:
  77. screen_fill_char(*bregs[AL], *bregs[BL], *bregs[BH], *bregs[CL], *bregs[CH], wregs[DX]);
  78. break;
  79. case SCREEN_FILL_ATTR:
  80. screen_fill_attr(*bregs[AL], *bregs[BL], *bregs[BH], *bregs[CL], *bregs[CH], wregs[DX], wregs[SI]);
  81. break;
  82. case SPRITE_SET_RANGE:
  83. sprite_set_range(wregs[BX], wregs[CX]);
  84. break;
  85. case SPRITE_SET_CHAR:
  86. sprite_set_char(wregs[BX], wregs[CX]);
  87. break;
  88. case SPRITE_GET_CHAR:
  89. wregs[AX] = sprite_get_char(wregs[BX]);
  90. break;
  91. case SPRITE_SET_LOCATION:
  92. sprite_set_location(wregs[BX], *bregs[DL], *bregs[DH]);
  93. break;
  94. case SPRITE_GET_LOCATION:
  95. wregs[AX] = sprite_get_location(wregs[BX]);
  96. break;
  97. case SPRITE_SET_CHAR_LOCATION:
  98. sprite_set_char_location(wregs[BX], wregs[CX], *bregs[DL], *bregs[DH]);
  99. break;
  100. case SPRITE_GET_CHAR_LOCATION:
  101. tmp = sprite_get_char_location(wregs[BX]);
  102. wregs[DX] = (tmp >> 16) & 0xffff;
  103. wregs[AX] = tmp & 0xffff;
  104. break;
  105. case SPRITE_SET_DATA:
  106. sprite_set_data(wregs[BX], wregs[CX], (unsigned long *)(c_ds + wregs[DX]));
  107. break;
  108. case SCREEN_SET_SCROLL:
  109. screen_set_scroll(*bregs[AL], *bregs[BL], *bregs[BH]);
  110. break;
  111. case SCREEN_GET_SCROLL:
  112. wregs[AX] = screen_get_scroll(*bregs[AL]);
  113. break;
  114. case SCREEN2_SET_WINDOW:
  115. screen2_set_window(*bregs[BL], *bregs[BH], *bregs[CL], *bregs[CH]);
  116. break;
  117. case SCREEN2_GET_WINDOW:
  118. tmp = screen2_get_window();
  119. wregs[DX] = (tmp >> 16) & 0xffff;
  120. wregs[AX] = tmp & 0xffff;
  121. break;
  122. case SPRITE_SET_WINDOW:
  123. sprite_set_window(*bregs[BL], *bregs[BH], *bregs[CL], *bregs[CH]);
  124. break;
  125. case SPRITE_GET_WINDOW:
  126. tmp = sprite_get_window();
  127. wregs[DX] = (tmp >> 16) & 0xffff;
  128. wregs[AX] = tmp & 0xffff;
  129. break;
  130. case PALETTE_SET_COLOR:
  131. palette_set_color(wregs[BX], wregs[CX]);
  132. break;
  133. case PALETTE_GET_COLOR:
  134. wregs[AX] = palette_get_color(wregs[BX]);
  135. break;
  136. case LCD_SET_COLOR:
  137. lcd_set_color(wregs[BX], wregs[CX]);
  138. break;
  139. case LCD_GET_COLOR:
  140. tmp = lcd_get_color();
  141. wregs[DX] = (tmp >> 16) & 0xffff;
  142. wregs[AX] = tmp & 0xffff;
  143. break;
  144. case LCD_SET_SEGMENTS:
  145. // lcd_set_segments(wregs[BX]);
  146. mmvm->lcdseg = wregs[BX];
  147. InvalidateRect(wonw32ctx->hWnd, NULL, FALSE);
  148. UpdateWindow(wonw32ctx->hWnd);
  149. break;
  150. case LCD_GET_SEGMENTS:
  151. // wregs[AX] = lcd_get_segments();
  152. wregs[AX] = mmvm->lcdseg;
  153. break;
  154. case LCD_SET_SLEEP:
  155. lcd_set_sleep(wregs[BX]);
  156. break;
  157. case LCD_GET_SLEEP:
  158. wregs[AX] = lcd_get_sleep();
  159. break;
  160. case SCREEN_SET_VRAM:
  161. screen_set_vram(*bregs[AL], wregs[BX]);
  162. break;
  163. case SPRITE_SET_VRAM:
  164. sprite_set_vram(wregs[BX]);
  165. break;
  166. default:
  167. break;
  168. }
  169. }