textbios.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "wwbios.h"
  2. extern "C" {
  3. #include "../wonx/wonx_include/text.h"
  4. }
  5. enum {
  6. TEXT_SCREEN_INIT = 0,
  7. TEXT_WINDOW_INIT,
  8. TEXT_SET_MODE,
  9. TEXT_GET_MODE,
  10. TEXT_PUT_CHAR,
  11. TEXT_PUT_STRING,
  12. TEXT_PUT_SUBSTRING,
  13. TEXT_PUT_NUMERIC,
  14. TEXT_FILL_CHAR,
  15. TEXT_SET_PALETTE,
  16. TEXT_GET_PALETTE,
  17. TEXT_SET_ANK_FONT,
  18. TEXT_SET_SJIS_FONT,
  19. TEXT_GET_FONTDATA,
  20. TEXT_SET_SCREEN,
  21. TEXT_GET_SCREEN,
  22. CURSOR_DISPLAY,
  23. CURSOR_STATUS,
  24. CURSOR_SET_LOCATION,
  25. CURSOR_GET_LOCATION,
  26. CURSOR_SET_TYPE,
  27. CURSOR_GET_TYPE,
  28. };
  29. void text_handler(int func_no) {
  30. int tmp;
  31. switch(func_no) {
  32. case TEXT_SCREEN_INIT:
  33. text_screen_init();
  34. break;
  35. case TEXT_WINDOW_INIT:
  36. text_window_init(*bregs[BL], *bregs[BH], *bregs[CL], *bregs[CH], wregs[DX]);
  37. break;
  38. case TEXT_SET_MODE:
  39. text_set_mode(wregs[BX]);
  40. break;
  41. case TEXT_GET_MODE:
  42. wregs[AX] = text_get_mode();
  43. break;
  44. case TEXT_PUT_CHAR:
  45. text_put_char(*bregs[BL], *bregs[BH], wregs[CX]);
  46. break;
  47. case TEXT_PUT_STRING:
  48. wregs[AX] = text_put_string(*bregs[BL], *bregs[BH], (char *)(c_ds + wregs[DX]));
  49. break;
  50. case TEXT_PUT_SUBSTRING:
  51. text_put_substring(*bregs[BL], *bregs[BH], (char *)(c_ds + wregs[DX]), wregs[CX]);
  52. break;
  53. case TEXT_PUT_NUMERIC:
  54. if((*bregs[CH]) & NUM_STORE) {
  55. text_store_numeric((char *)(c_ds + wregs[SI]), *bregs[CL], *bregs[CH], wregs[DX]);
  56. } else {
  57. text_put_numeric(*bregs[BL], *bregs[BH], *bregs[CL], *bregs[CH], wregs[DX]);
  58. }
  59. break;
  60. case TEXT_FILL_CHAR:
  61. text_fill_char(*bregs[BL], *bregs[BH], wregs[CX], wregs[DX]);
  62. break;
  63. case TEXT_SET_PALETTE:
  64. text_set_palette(wregs[BX]);
  65. break;
  66. case TEXT_GET_PALETTE:
  67. wregs[AX] = text_get_palette();
  68. break;
  69. case TEXT_SET_ANK_FONT:
  70. text_set_ank_font(*bregs[BL], *bregs[BH], wregs[CX], c_ds + wregs[DX]);
  71. break;
  72. case TEXT_SET_SJIS_FONT:
  73. text_set_sjis_font((void *)(wregs[BX] << 4 | wregs[DX]));
  74. break;
  75. case TEXT_GET_FONTDATA:
  76. wregs[AX] = text_get_fontdata(wregs[CX], c_ds + wregs[DX]);
  77. break;
  78. case TEXT_SET_SCREEN:
  79. // text_set_screen(wregs[BX]); // マニュアル第 1 版は間違い
  80. text_set_screen(*bregs[AL]);
  81. break;
  82. case TEXT_GET_SCREEN:
  83. wregs[AX] = text_get_screen();
  84. break;
  85. case CURSOR_DISPLAY:
  86. cursor_display(*bregs[AL]);
  87. break;
  88. case CURSOR_STATUS:
  89. wregs[AX] = cursor_status();
  90. break;
  91. case CURSOR_SET_LOCATION:
  92. cursor_set_location(*bregs[BL], *bregs[BH], *bregs[CL], *bregs[CH]);
  93. break;
  94. case CURSOR_GET_LOCATION:
  95. tmp = cursor_get_location();
  96. wregs[DX] = (tmp >> 16) & 0xffff;
  97. wregs[AX] = tmp & 0xffff;
  98. break;
  99. case CURSOR_SET_TYPE:
  100. cursor_set_type(*bregs[BL], *bregs[CL]);
  101. break;
  102. case CURSOR_GET_TYPE:
  103. tmp = cursor_get_type();
  104. wregs[DX] = (tmp >> 16) & 0xffff;
  105. wregs[AX] = tmp & 0xffff;
  106. break;
  107. default:
  108. break;
  109. }
  110. }