Arm2D_common.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. #ifndef __ARM_2D__COMMON_H
  2. #define __ARM_2D__COMMON_H
  3. #include "arm_2d_helper.h"
  4. #include <stdbool.h>
  5. #include "Arm2D_Box.h"
  6. #include "BaseObj.h"
  7. #include "dataStrs.h"
  8. #include "pikaScript.h"
  9. #include "arm_2d_cfg.h"
  10. #ifndef ARM2DQEMUBOOTER_APP_ARM2D_H_
  11. #define APPLICATIONS_APP_ARM2D_H_
  12. typedef struct __pika_arm2d_element_info_t {
  13. int x, x_last;
  14. int y, y_last;
  15. int alpha, alpha_last;
  16. } pika_arm2d_element_info_t;
  17. typedef struct __pika_arm2d_box_info_t {
  18. pika_arm2d_element_info_t elem_info;
  19. arm_2d_region_t arg2d_regin;
  20. int wight, wight_last;
  21. int hight, hight_last;
  22. uint16_t color_code, color_code_last;
  23. } pika_arm2d_box_info_t;
  24. typedef struct __pika_arm2d_globals_t {
  25. arm_2d_tile_t* pfb_tile_now;
  26. bool pfb_is_new_frame;
  27. arm_2d_region_list_item_t* dirty_region_list;
  28. PikaObj* pika_windows_object;
  29. PikaObj* pika_background_object;
  30. PikaObj* pika_elems_object;
  31. } pika_arm2d_globals_t;
  32. extern pika_arm2d_globals_t pika_arm2d_globals;
  33. /* GLCD RGB color definitions */
  34. #define GLCD_COLOR_BLACK 0x0000 /* 0, 0, 0 */
  35. #define GLCD_COLOR_NAVY 0x000F /* 0, 0, 128 */
  36. #define GLCD_COLOR_DARK_GREEN 0x03E0 /* 0, 128, 0 */
  37. #define GLCD_COLOR_DARK_CYAN 0x03EF /* 0, 128, 128 */
  38. #define GLCD_COLOR_MAROON 0x7800 /* 128, 0, 0 */
  39. #define GLCD_COLOR_PURPLE 0x780F /* 128, 0, 128 */
  40. #define GLCD_COLOR_OLIVE 0x7BE0 /* 128, 128, 0 */
  41. #define GLCD_COLOR_LIGHT_GREY 0xC618 /* 192, 192, 192 */
  42. #define GLCD_COLOR_DARK_GREY 0x7BEF /* 128, 128, 128 */
  43. #define GLCD_COLOR_BLUE 0x001F /* 0, 0, 255 */
  44. #define GLCD_COLOR_GREEN 0x07E0 /* 0, 255, 0 */
  45. #define GLCD_COLOR_CYAN 0x07FF /* 0, 255, 255 */
  46. #define GLCD_COLOR_RED 0xF800 /* 255, 0, 0 */
  47. #define GLCD_COLOR_MAGENTA 0xF81F /* 255, 0, 255 */
  48. #define GLCD_COLOR_YELLOW 0xFFE0 /* 255, 255, 0 */
  49. #define GLCD_COLOR_WHITE 0xFFFF /* 255, 255, 255 */
  50. void pika_arm2d_init(void);
  51. void pika_arm2d_update();
  52. #endif /* ARM2DQEMUBOOTER_APP_ARM2D_H_ */
  53. uint16_t getColorCode(char* colorName);
  54. typedef struct {
  55. arm_2d_op_rotate_t tOP;
  56. const arm_2d_tile_t* ptTile;
  57. float fAngle;
  58. float fAngleSpeed;
  59. arm_2d_location_t tCentre;
  60. arm_2d_region_t tRegion;
  61. } rotate_tile_t;
  62. #define __implement_tile(__NAME, __WIDTH, __HEIGHT, __TYPE, ...) \
  63. static __TYPE \
  64. __NAME##Buffer[(__WIDTH) * (__HEIGHT)]; \
  65. const arm_2d_tile_t __NAME = { \
  66. .tRegion = { \
  67. .tSize = {(__WIDTH), (__HEIGHT)}, \
  68. }, \
  69. .tInfo.bIsRoot = true, \
  70. .pchBuffer = (uint8_t *)__NAME##Buffer, \
  71. __VA_ARGS__ \
  72. };
  73. #define implement_tile(__NAME, __WIDTH, __HEIGHT, __TYPE, ...) \
  74. __implement_tile(__NAME, __WIDTH, __HEIGHT, __TYPE, ##__VA_ARGS__)
  75. #endif
  76. #ifndef __GLCD_CFG_COLOUR_DEPTH__
  77. #define __GLCD_CFG_COLOUR_DEPTH__ 16
  78. #endif
  79. #if __GLCD_CFG_COLOUR_DEPTH__ == 8
  80. # define __arm_2d_color_t arm_2d_color_gray8_t
  81. # define COLOUR_INT uint8_t
  82. # define ARM_2D_COLOUR ARM_2D_COLOUR_GRAY8
  83. # define arm_2d_draw_pattern arm_2d_c8bit_draw_pattern
  84. # define arm_2dp_fill_colour_with_opacity \
  85. arm_2dp_gray8_fill_colour_with_opacity
  86. # define arm_2d_fill_colour_with_mask \
  87. arm_2d_gray8_fill_colour_with_mask
  88. # define arm_2d_fill_colour_with_mask_and_opacity \
  89. arm_2d_gray8_fill_colour_with_mask_and_opacity
  90. # define arm_2d_alpha_blending_with_colour_keying \
  91. arm_2d_gray8_alpha_blending_with_colour_keying
  92. # define arm_2d_tile_copy_with_masks \
  93. arm_2d_gray8_tile_copy_with_masks
  94. # define arm_2d_tile_fill_with_x_mirror \
  95. arm_2d_c8bit_tile_fill_with_x_mirror
  96. # define arm_2d_tile_fill_with_y_mirror \
  97. arm_2d_c8bit_tile_fill_with_y_mirror
  98. # define arm_2d_tile_fill_with_xy_mirror \
  99. arm_2d_c8bit_tile_fill_with_xy_mirror
  100. # define arm_2d_tile_fill_only \
  101. arm_2d_c8bit_tile_fill_only
  102. # define arm_2d_tile_copy_with_x_mirror \
  103. arm_2d_c8bit_tile_copy_with_x_mirror
  104. # define arm_2d_tile_copy_with_y_mirror \
  105. arm_2d_c8bit_tile_copy_with_y_mirror
  106. # define arm_2d_tile_copy_with_xy_mirror \
  107. arm_2d_c8bit_tile_copy_with_xy_mirror
  108. # define arm_2d_tile_copy_only \
  109. arm_2d_c8bit_tile_copy_only
  110. # define arm_2d_tile_copy \
  111. arm_2d_c8bit_tile_copy
  112. # define arm_2d_fill_colour \
  113. arm_2d_c8bit_fill_colour
  114. # define arm_2d_tile_copy_with_colour_keying \
  115. arm_2d_c8bit_tile_copy_with_colour_keying
  116. # define arm_2d_fill_colour_with_opacity \
  117. arm_2d_gray8_fill_colour_with_opacity
  118. # define arm_2d_alpha_blending \
  119. arm_2d_gray8_alpha_blending
  120. # define arm_2d_tile_copy_with_des_mask \
  121. arm_2d_gray8_tile_copy_with_des_mask
  122. # define arm_2d_tile_copy_with_src_mask \
  123. arm_2d_gray8_tile_copy_with_src_mask
  124. # define arm_2dp_tile_transform_with_opacity \
  125. arm_2dp_gray8_tile_transform_with_opacity
  126. # define arm_2dp_tile_transform_with_src_mask_and_opacity \
  127. arm_2dp_gray8_tile_transform_with_src_mask_and_opacity
  128. # define arm_2dp_tile_rotation arm_2dp_gray8_tile_rotation
  129. # define arm_2dp_tile_rotation_with_alpha \
  130. arm_2dp_gray8_tile_rotation_with_alpha
  131. # define arm_2dp_tile_rotation_with_src_mask_and_opacity \
  132. arm_2dp_gray8_tile_rotation_with_src_mask_and_opacity
  133. # define arm_2dp_tile_rotation_with_src_mask \
  134. arm_2dp_gray8_tile_rotation_with_src_mask
  135. # define arm_2d_tile_rotation \
  136. arm_2d_gray8_tile_rotation
  137. #elif __GLCD_CFG_COLOUR_DEPTH__ == 16
  138. # define __arm_2d_color_t arm_2d_color_rgb565_t
  139. # define COLOUR_INT uint16_t
  140. # define ARM_2D_COLOUR ARM_2D_COLOUR_RGB565
  141. # define arm_2d_draw_pattern arm_2d_rgb16_draw_pattern
  142. # define arm_2dp_fill_colour_with_opacity \
  143. arm_2dp_rgb565_fill_colour_with_opacity
  144. # define arm_2d_fill_colour_with_mask \
  145. arm_2d_rgb565_fill_colour_with_mask
  146. # define arm_2d_fill_colour_with_mask_and_opacity \
  147. arm_2d_rgb565_fill_colour_with_mask_and_opacity
  148. # define arm_2d_alpha_blending_with_colour_keying \
  149. arm_2d_rgb565_alpha_blending_with_colour_keying
  150. # define arm_2d_tile_copy_with_masks \
  151. arm_2d_rgb565_tile_copy_with_masks
  152. # define arm_2d_tile_fill_with_x_mirror \
  153. arm_2d_rgb16_tile_fill_with_x_mirror
  154. # define arm_2d_tile_fill_with_y_mirror \
  155. arm_2d_rgb16_tile_fill_with_y_mirror
  156. # define arm_2d_tile_fill_with_xy_mirror \
  157. arm_2d_rgb16_tile_fill_with_xy_mirror
  158. # define arm_2d_tile_fill_only \
  159. arm_2d_rgb16_tile_fill_only
  160. # define arm_2d_tile_copy_with_x_mirror \
  161. arm_2d_rgb16_tile_copy_with_x_mirror
  162. # define arm_2d_tile_copy_with_y_mirror \
  163. arm_2d_rgb16_tile_copy_with_y_mirror
  164. # define arm_2d_tile_copy_with_xy_mirror \
  165. arm_2d_rgb16_tile_copy_with_xy_mirror
  166. # define arm_2d_tile_copy_only \
  167. arm_2d_rgb16_tile_copy_only
  168. # define arm_2d_tile_copy \
  169. arm_2d_rgb16_tile_copy
  170. # define arm_2d_fill_colour \
  171. arm_2d_rgb16_fill_colour
  172. # define arm_2d_tile_copy_with_colour_keying \
  173. arm_2d_rgb16_tile_copy_with_colour_keying
  174. # define arm_2d_fill_colour_with_opacity \
  175. arm_2d_rgb565_fill_colour_with_opacity
  176. # define arm_2d_alpha_blending \
  177. arm_2d_rgb565_alpha_blending
  178. # define arm_2d_tile_copy_with_des_mask \
  179. arm_2d_rgb565_tile_copy_with_des_mask
  180. # define arm_2d_tile_copy_with_src_mask \
  181. arm_2d_rgb565_tile_copy_with_src_mask
  182. # define arm_2dp_tile_transform_with_opacity \
  183. arm_2dp_rgb565_tile_transform_with_opacity
  184. # define arm_2dp_tile_transform_with_src_mask_and_opacity \
  185. arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity
  186. # define arm_2dp_tile_rotation arm_2dp_rgb565_tile_rotation
  187. # define arm_2dp_tile_rotation_with_alpha \
  188. arm_2dp_rgb565_tile_rotation_with_alpha
  189. # define arm_2dp_tile_rotation_with_src_mask_and_opacity \
  190. arm_2dp_rgb565_tile_rotation_with_src_mask_and_opacity
  191. # define arm_2dp_tile_rotation_with_src_mask \
  192. arm_2dp_rgb565_tile_rotation_with_src_mask
  193. # define arm_2d_tile_rotation \
  194. arm_2d_rgb565_tile_rotation
  195. #elif __GLCD_CFG_COLOUR_DEPTH__ == 32
  196. # define __arm_2d_color_t arm_2d_color_cccn888_t
  197. # define COLOUR_INT uint32_t
  198. # define ARM_2D_COLOUR ARM_2D_COLOUR_CCCA8888
  199. # define arm_2d_draw_pattern arm_2d_rgb32_draw_pattern
  200. # define arm_2dp_fill_colour_with_opacity \
  201. arm_2dp_cccn888_fill_colour_with_opacity
  202. # define arm_2d_fill_colour_with_mask \
  203. arm_2d_cccn888_fill_colour_with_mask
  204. # define arm_2d_fill_colour_with_mask_and_opacity \
  205. arm_2d_cccn888_fill_colour_with_mask_and_opacity
  206. # define arm_2d_alpha_blending_with_colour_keying \
  207. arm_2d_cccn888_alpha_blending_with_colour_keying
  208. # define arm_2d_tile_copy_with_masks \
  209. arm_2d_cccn888_tile_copy_with_masks
  210. # define arm_2d_tile_fill_with_x_mirror \
  211. arm_2d_rgb32_tile_fill_with_x_mirror
  212. # define arm_2d_tile_fill_with_y_mirror \
  213. arm_2d_rgb32_tile_fill_with_y_mirror
  214. # define arm_2d_tile_fill_with_xy_mirror \
  215. arm_2d_rgb32_tile_fill_with_xy_mirror
  216. # define arm_2d_tile_fill_only \
  217. arm_2d_rgb32_tile_fill_only
  218. # define arm_2d_tile_copy_with_x_mirror \
  219. arm_2d_rgb32_tile_copy_with_x_mirror
  220. # define arm_2d_tile_copy_with_y_mirror \
  221. arm_2d_rgb32_tile_copy_with_y_mirror
  222. # define arm_2d_tile_copy_with_xy_mirror \
  223. arm_2d_rgb32_tile_copy_with_xy_mirror
  224. # define arm_2d_tile_copy_only \
  225. arm_2d_rgb32_tile_copy_only
  226. # define arm_2d_tile_copy \
  227. arm_2d_rgb32_tile_copy
  228. # define arm_2d_fill_colour \
  229. arm_2d_rgb32_fill_colour
  230. # define arm_2d_tile_copy_with_colour_keying \
  231. arm_2d_rgb32_tile_copy_with_colour_keying
  232. # define arm_2d_fill_colour_with_opacity \
  233. arm_2d_cccn888_fill_colour_with_opacity
  234. # define arm_2d_alpha_blending \
  235. arm_2d_cccn888_alpha_blending
  236. # define arm_2d_tile_copy_with_des_mask \
  237. arm_2d_cccn888_tile_copy_with_des_mask
  238. # define arm_2d_tile_copy_with_src_mask \
  239. arm_2d_cccn888_tile_copy_with_src_mask
  240. # define arm_2dp_tile_transform_with_opacity \
  241. arm_2dp_cccn888_tile_transform_with_opacity
  242. # define arm_2dp_tile_transform_with_src_mask_and_opacity \
  243. arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity
  244. # define arm_2dp_tile_rotation arm_2dp_cccn888_tile_rotation
  245. # define arm_2dp_tile_rotation_with_alpha \
  246. arm_2dp_cccn888_tile_rotation_with_alpha
  247. # define arm_2dp_tile_rotation_with_src_mask_and_opacity \
  248. arm_2dp_cccn888_tile_rotation_with_src_mask_and_opacity
  249. # define arm_2dp_tile_rotation_with_src_mask \
  250. arm_2dp_cccn888_tile_rotation_with_src_mask
  251. # define arm_2d_tile_rotation \
  252. arm_2d_cccn888_tile_rotation
  253. #else
  254. # error Unsupported colour depth!
  255. #endif