PageRenderTime 54ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 1ms

/demos/src/GElist/main.c

http://jpcsp.googlecode.com/
C | 951 lines | 838 code | 110 blank | 3 comment | 20 complexity | 20681dcee6f7b6bc9bae54745c4e635d MD5 | raw file
Possible License(s): GPL-3.0
  1. #include <pspkernel.h>
  2. #include <pspkernel.h>
  3. #include <pspkernel.h>
  4. #include <pspdebug.h>
  5. #include <pspctrl.h>
  6. #include <pspdisplay.h>
  7. #include <pspgu.h>
  8. #include <pspgum.h>
  9. #include <pspge.h>
  10. #include <pspiofilemgr.h>
  11. #include <sys/stat.h>
  12. #include <stdio.h>
  13. #include <string.h>
  14. #include <assert.h>
  15. #include <malloc.h>
  16. PSP_MODULE_INFO("GE List Test", 0, 1, 0);
  17. PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);
  18. #define GU_BEHAVIOR_BREAK 3
  19. #define BUF_WIDTH 512
  20. #define SCR_WIDTH 480
  21. #define SCR_HEIGHT 272
  22. #define FONT_HEIGHT 8
  23. void sendCommandi(int cmd, int argument);
  24. void sendCommandf(int cmd, float argument);
  25. void sceGeContinue();
  26. extern int ge_list_executed[];
  27. typedef struct
  28. {
  29. unsigned int* start;
  30. unsigned int* current;
  31. int parent_context;
  32. } GuDisplayList;
  33. extern GuDisplayList* gu_list;
  34. static unsigned int __attribute__((aligned(16))) list[262144];
  35. static unsigned int staticOffset = 0;
  36. void* fbp0;
  37. void* fbp1;
  38. void* zbp;
  39. int done = 0;
  40. static unsigned int getMemorySize(unsigned int width, unsigned int height, unsigned int psm)
  41. {
  42. switch (psm)
  43. {
  44. case GU_PSM_T4:
  45. return (width * height) >> 1;
  46. case GU_PSM_T8:
  47. return width * height;
  48. case GU_PSM_5650:
  49. case GU_PSM_5551:
  50. case GU_PSM_4444:
  51. case GU_PSM_T16:
  52. return 2 * width * height;
  53. case GU_PSM_8888:
  54. case GU_PSM_T32:
  55. return 4 * width * height;
  56. default:
  57. return 0;
  58. }
  59. }
  60. void* getStaticVramBuffer(unsigned int width, unsigned int height, unsigned int psm)
  61. {
  62. unsigned int memSize = getMemorySize(width,height,psm);
  63. void* result = (void*)staticOffset;
  64. staticOffset += memSize;
  65. return result;
  66. }
  67. unsigned int __attribute__((aligned(16))) clutTable[] = { 0xFFFFFFFF, 0x00000000, 0x00FF0000, 0x0000FF00, 0x000000FF };
  68. unsigned char __attribute__((aligned(16))) imageData[] =
  69. { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
  70. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  71. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  72. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  73. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  74. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  75. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  76. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  77. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  78. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  79. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  80. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  81. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  82. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  83. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  84. 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
  85. };
  86. unsigned char __attribute__((aligned(16))) imageData2[] =
  87. { 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
  88. 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01,
  89. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  90. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  91. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  92. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  93. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  94. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  95. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  96. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  97. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  98. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  99. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  100. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  101. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01,
  102. 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00
  103. };
  104. struct
  105. {
  106. unsigned char u, v;
  107. unsigned short color;
  108. signed char nx, ny, nz;
  109. signed char px, py, pz;
  110. } vertices8[6] = { { 0, 0, 0x000F, 0, 0, 0, -80, 80, -80 },
  111. { 0, 200, 0x00FF, 1, 1, 1, -80, -80, -80 },
  112. { 100, 0, 0x00FF, 1, 1, 1, 0, 80, -80 },
  113. { 100, 200, 0x00FF, 1, 1, 1, 0, -80, -80 },
  114. { 200, 0, 0x00FF, 1, 1, 1, 80, 80, -80 },
  115. { 200, 200, 0x000F, 1, 1, 1, 80, -80, -80 } };
  116. struct
  117. {
  118. unsigned short u, v;
  119. unsigned short color;
  120. signed short nx, ny, nz;
  121. signed short px, py, pz;
  122. } vertices16[6] = { { 0, 0, 0x000F, 0, 0, 0, -32000, 32000, -32000 },
  123. { 0, 50000, 0x00FF, 1, 1, 1, -32000, -32000, -32000 },
  124. { 25000, 0, 0x00FF, 1, 1, 1, 0, 32000, -32000 },
  125. { 25000, 50000, 0x00FF, 1, 1, 1, 0, -32000, -32000 },
  126. { 50000, 0, 0x00FF, 1, 1, 1, 32000, 32000, -32000 },
  127. { 50000, 50000, 0x000F, 1, 1, 1, 32000, -32000, -32000 } };
  128. struct
  129. {
  130. float u, v;
  131. unsigned int color;
  132. float nx, ny, nz;
  133. float px, py, pz;
  134. } verticesFloat[6] = { { 0, 0, 0x000000FF, 0, 0, 0, -1.2, 1.2, -1.2 },
  135. { 0, 2, 0x0000FFFF, 0, 0, 0, -1.2, -1.2, -1.2 },
  136. { 1, 0, 0x0000FFFF, 0, 0, 0, 0, 1.2, -1.2 },
  137. { 1, 2, 0x0000FFFF, 0, 0, 0, 0, -1.2, -1.2 },
  138. { 2, 0, 0x0000FFFF, 0, 0, 0, 1.2, 1.2, -1.2 },
  139. { 2, 2, 0x000000FF, 0, 0, 0, 1.2, -1.2, -1.2 } };
  140. struct
  141. {
  142. unsigned short u, v;
  143. signed short px, py, pz;
  144. } verticesFlip16[32][2];
  145. ScePspFVector3 translation;
  146. void drawTest()
  147. {
  148. sceKernelDcacheWritebackAll();
  149. sceGuClear(GU_COLOR_BUFFER_BIT);
  150. sceGuEnable(GU_TEXTURE_2D);
  151. sceGuClutMode(GU_PSM_8888, 0, 0xFF, 0);
  152. sceGuTexMode(GU_PSM_T8, 0, 0, GU_FALSE);
  153. sceGuTexEnvColor(0xFF000000);
  154. sceGuTexFunc(GU_TFX_DECAL, GU_TCC_RGB);
  155. sceGuTexImage(0, 16, 16, 16, imageData);
  156. sceGuClutLoad(1, clutTable);
  157. sceGumMatrixMode(GU_PROJECTION);
  158. sceGumLoadIdentity();
  159. sceGumPerspective(75.0f,16.0f/9.0f,0.9f,1000.0f);
  160. sceGumMatrixMode(GU_MODEL);
  161. sceGumLoadIdentity();
  162. sceGumMatrixMode(GU_VIEW);
  163. sceGumLoadIdentity();
  164. translation.x = -2;
  165. translation.y = 1.5;
  166. translation.z = -4;
  167. sceGumTranslate(&translation);
  168. sceGumDrawArray(GU_TRIANGLE_STRIP, GU_TEXTURE_8BIT|GU_COLOR_4444|GU_NORMAL_8BIT|GU_VERTEX_8BIT|GU_TRANSFORM_3D, 6, NULL, vertices8);
  169. sceGumMatrixMode(GU_VIEW);
  170. sceGumLoadIdentity();
  171. translation.x = 0;
  172. translation.y = 1.5;
  173. translation.z = -4;
  174. sceGumTranslate(&translation);
  175. sceGumDrawArray(GU_TRIANGLE_STRIP, GU_TEXTURE_16BIT|GU_COLOR_4444|GU_NORMAL_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 6, NULL, vertices16);
  176. sceGumMatrixMode(GU_VIEW);
  177. sceGumLoadIdentity();
  178. translation.x = 3;
  179. translation.y = 1.5;
  180. translation.z = -4;
  181. sceGumTranslate(&translation);
  182. sceGumDrawArray(GU_TRIANGLE_STRIP, GU_TEXTURE_32BITF|GU_COLOR_8888|GU_NORMAL_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_3D, 6, NULL, verticesFloat);
  183. sceGuDisable(GU_TEXTURE_2D);
  184. sceGumMatrixMode(GU_VIEW);
  185. sceGumLoadIdentity();
  186. translation.x = -2;
  187. translation.y = -1.5;
  188. translation.z = -4;
  189. sceGumTranslate(&translation);
  190. sceGumDrawArray(GU_TRIANGLE_STRIP, GU_TEXTURE_8BIT|GU_COLOR_4444|GU_NORMAL_8BIT|GU_VERTEX_8BIT|GU_TRANSFORM_3D, 6, NULL, vertices8);
  191. sceGumMatrixMode(GU_VIEW);
  192. sceGumLoadIdentity();
  193. translation.x = 0;
  194. translation.y = -1.5;
  195. translation.z = -4;
  196. sceGumTranslate(&translation);
  197. sceGumDrawArray(GU_TRIANGLE_STRIP, GU_TEXTURE_16BIT|GU_COLOR_4444|GU_NORMAL_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 6, NULL, vertices16);
  198. sceGumMatrixMode(GU_VIEW);
  199. sceGumLoadIdentity();
  200. translation.x = 3;
  201. translation.y = -1.5;
  202. translation.z = -4;
  203. sceGumTranslate(&translation);
  204. sceGumDrawArray(GU_TRIANGLE_STRIP, GU_TEXTURE_32BITF|GU_COLOR_8888|GU_NORMAL_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_3D, 6, NULL, verticesFloat);
  205. sceGuEnable(GU_TEXTURE_2D);
  206. sceGuTexImage(0, 16, 16, 16, imageData2);
  207. int x = 10;
  208. int y = 10;
  209. int i = 0;
  210. verticesFlip16[i][0].u = 0;
  211. verticesFlip16[i][0].v = 0;
  212. verticesFlip16[i][0].px = x + 0;
  213. verticesFlip16[i][0].py = y + 0;
  214. verticesFlip16[i][0].pz = 0;
  215. verticesFlip16[i][1].u = 16;
  216. verticesFlip16[i][1].v = 16;
  217. verticesFlip16[i][1].px = x + 16;
  218. verticesFlip16[i][1].py = y + 16;
  219. verticesFlip16[i][1].pz = 0;
  220. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  221. x += 20;
  222. i++;
  223. verticesFlip16[i][0].u = 0;
  224. verticesFlip16[i][0].v = 0;
  225. verticesFlip16[i][0].px = x + 16;
  226. verticesFlip16[i][0].py = y + 16;
  227. verticesFlip16[i][0].pz = 0;
  228. verticesFlip16[i][1].u = 16;
  229. verticesFlip16[i][1].v = 16;
  230. verticesFlip16[i][1].px = x + 0;
  231. verticesFlip16[i][1].py = y + 0;
  232. verticesFlip16[i][1].pz = 0;
  233. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  234. x += 20;
  235. i++;
  236. verticesFlip16[i][0].u = 16;
  237. verticesFlip16[i][0].v = 16;
  238. verticesFlip16[i][0].px = x + 0;
  239. verticesFlip16[i][0].py = y + 0;
  240. verticesFlip16[i][0].pz = 0;
  241. verticesFlip16[i][1].u = 0;
  242. verticesFlip16[i][1].v = 0;
  243. verticesFlip16[i][1].px = x + 16;
  244. verticesFlip16[i][1].py = y + 16;
  245. verticesFlip16[i][1].pz = 0;
  246. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  247. x += 20;
  248. i++;
  249. verticesFlip16[i][0].u = 16;
  250. verticesFlip16[i][0].v = 16;
  251. verticesFlip16[i][0].px = x + 16;
  252. verticesFlip16[i][0].py = y + 16;
  253. verticesFlip16[i][0].pz = 0;
  254. verticesFlip16[i][1].u = 0;
  255. verticesFlip16[i][1].v = 0;
  256. verticesFlip16[i][1].px = x + 0;
  257. verticesFlip16[i][1].py = y + 0;
  258. verticesFlip16[i][1].pz = 0;
  259. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  260. x += 20;
  261. i++;
  262. x -= 4 * 20;
  263. y += 20;
  264. verticesFlip16[i][0].u = 0;
  265. verticesFlip16[i][0].v = 0;
  266. verticesFlip16[i][0].px = x + 0;
  267. verticesFlip16[i][0].py = y + 16;
  268. verticesFlip16[i][0].pz = 0;
  269. verticesFlip16[i][1].u = 16;
  270. verticesFlip16[i][1].v = 16;
  271. verticesFlip16[i][1].px = x + 16;
  272. verticesFlip16[i][1].py = y + 0;
  273. verticesFlip16[i][1].pz = 0;
  274. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  275. x += 20;
  276. i++;
  277. verticesFlip16[i][0].u = 0;
  278. verticesFlip16[i][0].v = 0;
  279. verticesFlip16[i][0].px = x + 16;
  280. verticesFlip16[i][0].py = y + 0;
  281. verticesFlip16[i][0].pz = 0;
  282. verticesFlip16[i][1].u = 16;
  283. verticesFlip16[i][1].v = 16;
  284. verticesFlip16[i][1].px = x + 0;
  285. verticesFlip16[i][1].py = y + 16;
  286. verticesFlip16[i][1].pz = 0;
  287. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  288. x += 20;
  289. i++;
  290. verticesFlip16[i][0].u = 16;
  291. verticesFlip16[i][0].v = 16;
  292. verticesFlip16[i][0].px = x + 0;
  293. verticesFlip16[i][0].py = y + 16;
  294. verticesFlip16[i][0].pz = 0;
  295. verticesFlip16[i][1].u = 0;
  296. verticesFlip16[i][1].v = 0;
  297. verticesFlip16[i][1].px = x + 16;
  298. verticesFlip16[i][1].py = y + 0;
  299. verticesFlip16[i][1].pz = 0;
  300. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  301. x += 20;
  302. i++;
  303. verticesFlip16[i][0].u = 16;
  304. verticesFlip16[i][0].v = 16;
  305. verticesFlip16[i][0].px = x + 16;
  306. verticesFlip16[i][0].py = y + 0;
  307. verticesFlip16[i][0].pz = 0;
  308. verticesFlip16[i][1].u = 0;
  309. verticesFlip16[i][1].v = 0;
  310. verticesFlip16[i][1].px = x + 0;
  311. verticesFlip16[i][1].py = y + 16;
  312. verticesFlip16[i][1].pz = 0;
  313. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  314. x += 20;
  315. i++;
  316. x -= 4 * 20;
  317. y += 20;
  318. verticesFlip16[i][0].u = 0;
  319. verticesFlip16[i][0].v = 16;
  320. verticesFlip16[i][0].px = x + 0;
  321. verticesFlip16[i][0].py = y + 0;
  322. verticesFlip16[i][0].pz = 0;
  323. verticesFlip16[i][1].u = 16;
  324. verticesFlip16[i][1].v = 0;
  325. verticesFlip16[i][1].px = x + 16;
  326. verticesFlip16[i][1].py = y + 16;
  327. verticesFlip16[i][1].pz = 0;
  328. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  329. x += 20;
  330. i++;
  331. verticesFlip16[i][0].u = 0;
  332. verticesFlip16[i][0].v = 16;
  333. verticesFlip16[i][0].px = x + 16;
  334. verticesFlip16[i][0].py = y + 16;
  335. verticesFlip16[i][0].pz = 0;
  336. verticesFlip16[i][1].u = 16;
  337. verticesFlip16[i][1].v = 0;
  338. verticesFlip16[i][1].px = x + 0;
  339. verticesFlip16[i][1].py = y + 0;
  340. verticesFlip16[i][1].pz = 0;
  341. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  342. x += 20;
  343. i++;
  344. verticesFlip16[i][0].u = 16;
  345. verticesFlip16[i][0].v = 0;
  346. verticesFlip16[i][0].px = x + 0;
  347. verticesFlip16[i][0].py = y + 0;
  348. verticesFlip16[i][0].pz = 0;
  349. verticesFlip16[i][1].u = 0;
  350. verticesFlip16[i][1].v = 16;
  351. verticesFlip16[i][1].px = x + 16;
  352. verticesFlip16[i][1].py = y + 16;
  353. verticesFlip16[i][1].pz = 0;
  354. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  355. x += 20;
  356. i++;
  357. verticesFlip16[i][0].u = 16;
  358. verticesFlip16[i][0].v = 0;
  359. verticesFlip16[i][0].px = x + 16;
  360. verticesFlip16[i][0].py = y + 16;
  361. verticesFlip16[i][0].pz = 0;
  362. verticesFlip16[i][1].u = 0;
  363. verticesFlip16[i][1].v = 16;
  364. verticesFlip16[i][1].px = x + 0;
  365. verticesFlip16[i][1].py = y + 0;
  366. verticesFlip16[i][1].pz = 0;
  367. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  368. x += 20;
  369. i++;
  370. x -= 4 * 20;
  371. y += 20;
  372. verticesFlip16[i][0].u = 0;
  373. verticesFlip16[i][0].v = 16;
  374. verticesFlip16[i][0].px = x + 0;
  375. verticesFlip16[i][0].py = y + 16;
  376. verticesFlip16[i][0].pz = 0;
  377. verticesFlip16[i][1].u = 16;
  378. verticesFlip16[i][1].v = 0;
  379. verticesFlip16[i][1].px = x + 16;
  380. verticesFlip16[i][1].py = y + 0;
  381. verticesFlip16[i][1].pz = 0;
  382. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  383. x += 20;
  384. i++;
  385. verticesFlip16[i][0].u = 0;
  386. verticesFlip16[i][0].v = 16;
  387. verticesFlip16[i][0].px = x + 16;
  388. verticesFlip16[i][0].py = y + 0;
  389. verticesFlip16[i][0].pz = 0;
  390. verticesFlip16[i][1].u = 16;
  391. verticesFlip16[i][1].v = 0;
  392. verticesFlip16[i][1].px = x + 0;
  393. verticesFlip16[i][1].py = y + 16;
  394. verticesFlip16[i][1].pz = 0;
  395. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  396. x += 20;
  397. i++;
  398. verticesFlip16[i][0].u = 16;
  399. verticesFlip16[i][0].v = 0;
  400. verticesFlip16[i][0].px = x + 0;
  401. verticesFlip16[i][0].py = y + 16;
  402. verticesFlip16[i][0].pz = 0;
  403. verticesFlip16[i][1].u = 0;
  404. verticesFlip16[i][1].v = 16;
  405. verticesFlip16[i][1].px = x + 16;
  406. verticesFlip16[i][1].py = y + 0;
  407. verticesFlip16[i][1].pz = 0;
  408. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  409. x += 20;
  410. i++;
  411. verticesFlip16[i][0].u = 16;
  412. verticesFlip16[i][0].v = 0;
  413. verticesFlip16[i][0].px = x + 16;
  414. verticesFlip16[i][0].py = y + 0;
  415. verticesFlip16[i][0].pz = 0;
  416. verticesFlip16[i][1].u = 0;
  417. verticesFlip16[i][1].v = 16;
  418. verticesFlip16[i][1].px = x + 0;
  419. verticesFlip16[i][1].py = y + 16;
  420. verticesFlip16[i][1].pz = 0;
  421. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_2D, 2, NULL, &verticesFlip16[i][0]);
  422. x += 20;
  423. i++;
  424. translation.x = -5.8;
  425. translation.y = 0.8;
  426. translation.z = -4;
  427. sceGumMatrixMode(GU_VIEW);
  428. sceGumLoadIdentity();
  429. translation.x += 0.6;
  430. sceGumTranslate(&translation);
  431. verticesFlip16[i][0].u = 0;
  432. verticesFlip16[i][0].v = 0;
  433. verticesFlip16[i][0].px = -0x1FFF;
  434. verticesFlip16[i][0].py = 0x1FFF;
  435. verticesFlip16[i][0].pz = -0x1FFF;
  436. verticesFlip16[i][1].u = 0x7FFF;
  437. verticesFlip16[i][1].v = 0x7FFF;
  438. verticesFlip16[i][1].px = 0x1FFF;
  439. verticesFlip16[i][1].py = -0x1FFF;
  440. verticesFlip16[i][1].pz = -0x1FFF;
  441. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  442. i++;
  443. sceGumMatrixMode(GU_VIEW);
  444. sceGumLoadIdentity();
  445. translation.x += 0.6;
  446. sceGumTranslate(&translation);
  447. verticesFlip16[i][0].u = 0;
  448. verticesFlip16[i][0].v = 0;
  449. verticesFlip16[i][0].px = 0x1FFF;
  450. verticesFlip16[i][0].py = -0x1FFF;
  451. verticesFlip16[i][0].pz = -0x1FFF;
  452. verticesFlip16[i][1].u = 0x7FFF;
  453. verticesFlip16[i][1].v = 0x7FFF;
  454. verticesFlip16[i][1].px = -0x1FFF;
  455. verticesFlip16[i][1].py = 0x1FFF;
  456. verticesFlip16[i][1].pz = -0x1FFF;
  457. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  458. i++;
  459. sceGumMatrixMode(GU_VIEW);
  460. sceGumLoadIdentity();
  461. translation.x += 0.6;
  462. sceGumTranslate(&translation);
  463. verticesFlip16[i][0].u = 0x7FFF;
  464. verticesFlip16[i][0].v = 0x7FFF;
  465. verticesFlip16[i][0].px = -0x1FFF;
  466. verticesFlip16[i][0].py = 0x1FFF;
  467. verticesFlip16[i][0].pz = -0x1FFF;
  468. verticesFlip16[i][1].u = 0;
  469. verticesFlip16[i][1].v = 0;
  470. verticesFlip16[i][1].px = 0x1FFF;
  471. verticesFlip16[i][1].py = -0x1FFF;
  472. verticesFlip16[i][1].pz = -0x1FFF;
  473. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  474. i++;
  475. sceGumMatrixMode(GU_VIEW);
  476. sceGumLoadIdentity();
  477. translation.x += 0.6;
  478. sceGumTranslate(&translation);
  479. verticesFlip16[i][0].u = 0x7FFF;
  480. verticesFlip16[i][0].v = 0x7FFF;
  481. verticesFlip16[i][0].px = 0x1FFF;
  482. verticesFlip16[i][0].py = -0x1FFF;
  483. verticesFlip16[i][0].pz = -0x1FFF;
  484. verticesFlip16[i][1].u = 0;
  485. verticesFlip16[i][1].v = 0;
  486. verticesFlip16[i][1].px = -0x1FFF;
  487. verticesFlip16[i][1].py = 0x1FFF;
  488. verticesFlip16[i][1].pz = -0x1FFF;
  489. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  490. i++;
  491. translation.x -= 4 * 0.6;
  492. translation.y -= 0.6;
  493. sceGumMatrixMode(GU_VIEW);
  494. sceGumLoadIdentity();
  495. translation.x += 0.6;
  496. sceGumTranslate(&translation);
  497. verticesFlip16[i][0].u = 0;
  498. verticesFlip16[i][0].v = 0;
  499. verticesFlip16[i][0].px = -0x1FFF;
  500. verticesFlip16[i][0].py = -0x1FFF;
  501. verticesFlip16[i][0].pz = -0x1FFF;
  502. verticesFlip16[i][1].u = 0x7FFF;
  503. verticesFlip16[i][1].v = 0x7FFF;
  504. verticesFlip16[i][1].px = 0x1FFF;
  505. verticesFlip16[i][1].py = 0x1FFF;
  506. verticesFlip16[i][1].pz = -0x1FFF;
  507. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  508. i++;
  509. sceGumMatrixMode(GU_VIEW);
  510. sceGumLoadIdentity();
  511. translation.x += 0.6;
  512. sceGumTranslate(&translation);
  513. verticesFlip16[i][0].u = 0;
  514. verticesFlip16[i][0].v = 0;
  515. verticesFlip16[i][0].px = 0x1FFF;
  516. verticesFlip16[i][0].py = 0x1FFF;
  517. verticesFlip16[i][0].pz = -0x1FFF;
  518. verticesFlip16[i][1].u = 0x7FFF;
  519. verticesFlip16[i][1].v = 0x7FFF;
  520. verticesFlip16[i][1].px = -0x1FFF;
  521. verticesFlip16[i][1].py = -0x1FFF;
  522. verticesFlip16[i][1].pz = -0x1FFF;
  523. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  524. i++;
  525. sceGumMatrixMode(GU_VIEW);
  526. sceGumLoadIdentity();
  527. translation.x += 0.6;
  528. sceGumTranslate(&translation);
  529. verticesFlip16[i][0].u = 0x7FFF;
  530. verticesFlip16[i][0].v = 0x7FFF;
  531. verticesFlip16[i][0].px = -0x1FFF;
  532. verticesFlip16[i][0].py = -0x1FFF;
  533. verticesFlip16[i][0].pz = -0x1FFF;
  534. verticesFlip16[i][1].u = 0;
  535. verticesFlip16[i][1].v = 0;
  536. verticesFlip16[i][1].px = 0x1FFF;
  537. verticesFlip16[i][1].py = 0x1FFF;
  538. verticesFlip16[i][1].pz = -0x1FFF;
  539. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  540. i++;
  541. sceGumMatrixMode(GU_VIEW);
  542. sceGumLoadIdentity();
  543. translation.x += 0.6;
  544. sceGumTranslate(&translation);
  545. verticesFlip16[i][0].u = 0x7FFF;
  546. verticesFlip16[i][0].v = 0x7FFF;
  547. verticesFlip16[i][0].px = 0x1FFF;
  548. verticesFlip16[i][0].py = 0x1FFF;
  549. verticesFlip16[i][0].pz = -0x1FFF;
  550. verticesFlip16[i][1].u = 0;
  551. verticesFlip16[i][1].v = 0;
  552. verticesFlip16[i][1].px = -0x1FFF;
  553. verticesFlip16[i][1].py = -0x1FFF;
  554. verticesFlip16[i][1].pz = -0x1FFF;
  555. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  556. i++;
  557. translation.x -= 4 * 0.6;
  558. translation.y -= 0.6;
  559. sceGumMatrixMode(GU_VIEW);
  560. sceGumLoadIdentity();
  561. translation.x += 0.6;
  562. sceGumTranslate(&translation);
  563. verticesFlip16[i][0].u = 0;
  564. verticesFlip16[i][0].v = 0x7FFF;
  565. verticesFlip16[i][0].px = -0x1FFF;
  566. verticesFlip16[i][0].py = 0x1FFF;
  567. verticesFlip16[i][0].pz = -0x1FFF;
  568. verticesFlip16[i][1].u = 0x7FFF;
  569. verticesFlip16[i][1].v = 0;
  570. verticesFlip16[i][1].px = 0x1FFF;
  571. verticesFlip16[i][1].py = -0x1FFF;
  572. verticesFlip16[i][1].pz = -0x1FFF;
  573. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  574. i++;
  575. sceGumMatrixMode(GU_VIEW);
  576. sceGumLoadIdentity();
  577. translation.x += 0.6;
  578. sceGumTranslate(&translation);
  579. verticesFlip16[i][0].u = 0;
  580. verticesFlip16[i][0].v = 0x7FFF;
  581. verticesFlip16[i][0].px = 0x1FFF;
  582. verticesFlip16[i][0].py = -0x1FFF;
  583. verticesFlip16[i][0].pz = -0x1FFF;
  584. verticesFlip16[i][1].u = 0x7FFF;
  585. verticesFlip16[i][1].v = 0;
  586. verticesFlip16[i][1].px = -0x1FFF;
  587. verticesFlip16[i][1].py = 0x1FFF;
  588. verticesFlip16[i][1].pz = -0x1FFF;
  589. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  590. i++;
  591. sceGumMatrixMode(GU_VIEW);
  592. sceGumLoadIdentity();
  593. translation.x += 0.6;
  594. sceGumTranslate(&translation);
  595. verticesFlip16[i][0].u = 0x7FFF;
  596. verticesFlip16[i][0].v = 0;
  597. verticesFlip16[i][0].px = -0x1FFF;
  598. verticesFlip16[i][0].py = 0x1FFF;
  599. verticesFlip16[i][0].pz = -0x1FFF;
  600. verticesFlip16[i][1].u = 0;
  601. verticesFlip16[i][1].v = 0x7FFF;
  602. verticesFlip16[i][1].px = 0x1FFF;
  603. verticesFlip16[i][1].py = -0x1FFF;
  604. verticesFlip16[i][1].pz = -0x1FFF;
  605. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  606. i++;
  607. sceGumMatrixMode(GU_VIEW);
  608. sceGumLoadIdentity();
  609. translation.x += 0.6;
  610. sceGumTranslate(&translation);
  611. verticesFlip16[i][0].u = 0x7FFF;
  612. verticesFlip16[i][0].v = 0;
  613. verticesFlip16[i][0].px = 0x1FFF;
  614. verticesFlip16[i][0].py = -0x1FFF;
  615. verticesFlip16[i][0].pz = -0x1FFF;
  616. verticesFlip16[i][1].u = 0;
  617. verticesFlip16[i][1].v = 0x7FFF;
  618. verticesFlip16[i][1].px = -0x1FFF;
  619. verticesFlip16[i][1].py = 0x1FFF;
  620. verticesFlip16[i][1].pz = -0x1FFF;
  621. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  622. i++;
  623. translation.x -= 4 * 0.6;
  624. translation.y -= 0.6;
  625. sceGumMatrixMode(GU_VIEW);
  626. sceGumLoadIdentity();
  627. translation.x += 0.6;
  628. sceGumTranslate(&translation);
  629. verticesFlip16[i][0].u = 0;
  630. verticesFlip16[i][0].v = 0x7FFF;
  631. verticesFlip16[i][0].px = -0x1FFF;
  632. verticesFlip16[i][0].py = -0x1FFF;
  633. verticesFlip16[i][0].pz = -0x1FFF;
  634. verticesFlip16[i][1].u = 0x7FFF;
  635. verticesFlip16[i][1].v = 0;
  636. verticesFlip16[i][1].px = 0x1FFF;
  637. verticesFlip16[i][1].py = 0x1FFF;
  638. verticesFlip16[i][1].pz = -0x1FFF;
  639. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  640. i++;
  641. sceGumMatrixMode(GU_VIEW);
  642. sceGumLoadIdentity();
  643. translation.x += 0.6;
  644. sceGumTranslate(&translation);
  645. verticesFlip16[i][0].u = 0;
  646. verticesFlip16[i][0].v = 0x7FFF;
  647. verticesFlip16[i][0].px = 0x1FFF;
  648. verticesFlip16[i][0].py = 0x1FFF;
  649. verticesFlip16[i][0].pz = -0x1FFF;
  650. verticesFlip16[i][1].u = 0x7FFF;
  651. verticesFlip16[i][1].v = 0;
  652. verticesFlip16[i][1].px = -0x1FFF;
  653. verticesFlip16[i][1].py = -0x1FFF;
  654. verticesFlip16[i][1].pz = -0x1FFF;
  655. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  656. i++;
  657. sceGumMatrixMode(GU_VIEW);
  658. sceGumLoadIdentity();
  659. translation.x += 0.6;
  660. sceGumTranslate(&translation);
  661. verticesFlip16[i][0].u = 0x7FFF;
  662. verticesFlip16[i][0].v = 0;
  663. verticesFlip16[i][0].px = -0x1FFF;
  664. verticesFlip16[i][0].py = -0x1FFF;
  665. verticesFlip16[i][0].pz = -0x1FFF;
  666. verticesFlip16[i][1].u = 0;
  667. verticesFlip16[i][1].v = 0x7FFF;
  668. verticesFlip16[i][1].px = 0x1FFF;
  669. verticesFlip16[i][1].py = 0x1FFF;
  670. verticesFlip16[i][1].pz = -0x1FFF;
  671. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  672. i++;
  673. sceGumMatrixMode(GU_VIEW);
  674. sceGumLoadIdentity();
  675. translation.x += 0.6;
  676. sceGumTranslate(&translation);
  677. verticesFlip16[i][0].u = 0x7FFF;
  678. verticesFlip16[i][0].v = 0;
  679. verticesFlip16[i][0].px = 0x1FFF;
  680. verticesFlip16[i][0].py = 0x1FFF;
  681. verticesFlip16[i][0].pz = -0x1FFF;
  682. verticesFlip16[i][1].u = 0;
  683. verticesFlip16[i][1].v = 0x7FFF;
  684. verticesFlip16[i][1].px = -0x1FFF;
  685. verticesFlip16[i][1].py = -0x1FFF;
  686. verticesFlip16[i][1].pz = -0x1FFF;
  687. sceGumDrawArray(GU_SPRITES, GU_TEXTURE_16BIT|GU_VERTEX_16BIT|GU_TRANSFORM_3D, 2, NULL, &verticesFlip16[i][0]);
  688. i++;
  689. }
  690. void draw()
  691. {
  692. sceDisplaySetMode(0, SCR_WIDTH, SCR_HEIGHT);
  693. sceGuStart(GU_DIRECT, list);
  694. sceKernelDcacheWritebackAll();
  695. drawTest();
  696. sceGuFinish();
  697. sceGuSync(0, 0);
  698. sceDisplayWaitVblank();
  699. fbp0 = sceGuSwapBuffers();
  700. }
  701. void init()
  702. {
  703. pspDebugScreenInit();
  704. fbp0 = getStaticVramBuffer(BUF_WIDTH, SCR_HEIGHT, GU_PSM_8888);
  705. fbp1 = getStaticVramBuffer(BUF_WIDTH, SCR_HEIGHT, GU_PSM_8888);
  706. zbp = getStaticVramBuffer(BUF_WIDTH, SCR_HEIGHT, GU_PSM_4444);
  707. sceGuInit();
  708. sceGuStart(GU_DIRECT, list);
  709. sceGuDrawBuffer(GU_PSM_8888,fbp0,BUF_WIDTH);
  710. sceGuDispBuffer(SCR_WIDTH,SCR_HEIGHT,fbp1,BUF_WIDTH);
  711. sceGuDepthBuffer(zbp,BUF_WIDTH);
  712. sceGuOffset(2048 - (SCR_WIDTH/2),2048 - (SCR_HEIGHT/2));
  713. sceGuViewport(2048,2048,SCR_WIDTH,SCR_HEIGHT);
  714. sceGuDepthRange(65535,0);
  715. sceGuScissor(0,0,SCR_WIDTH,SCR_HEIGHT);
  716. sceGuEnable(GU_SCISSOR_TEST);
  717. sceGuFrontFace(GU_CW);
  718. sceGuShadeModel(GU_SMOOTH);
  719. sceGuDisable(GU_TEXTURE_2D);
  720. sceGuFinish();
  721. sceGuSync(0,0);
  722. sceDisplayWaitVblankStart();
  723. sceGuDisplay(1);
  724. sceCtrlSetSamplingCycle(0);
  725. sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
  726. }
  727. int main(int argc, char *argv[])
  728. {
  729. SceCtrlData pad;
  730. int oldButtons = 0;
  731. #define SECOND 1000000
  732. #define REPEAT_START (1 * SECOND)
  733. #define REPEAT_DELAY (SECOND / 5)
  734. struct timeval repeatStart;
  735. struct timeval repeatDelay;
  736. repeatStart.tv_sec = 0;
  737. repeatStart.tv_usec = 0;
  738. repeatDelay.tv_sec = 0;
  739. repeatDelay.tv_usec = 0;
  740. init();
  741. while(!done)
  742. {
  743. draw();
  744. sceCtrlReadBufferPositive(&pad, 1);
  745. int buttonDown = (oldButtons ^ pad.Buttons) & pad.Buttons;
  746. if (pad.Buttons == oldButtons)
  747. {
  748. struct timeval now;
  749. gettimeofday(&now, NULL);
  750. if (repeatStart.tv_sec == 0)
  751. {
  752. repeatStart.tv_sec = now.tv_sec;
  753. repeatStart.tv_usec = now.tv_usec;
  754. repeatDelay.tv_sec = 0;
  755. repeatDelay.tv_usec = 0;
  756. }
  757. else
  758. {
  759. long usec = (now.tv_sec - repeatStart.tv_sec) * SECOND;
  760. usec += (now.tv_usec - repeatStart.tv_usec);
  761. if (usec >= REPEAT_START)
  762. {
  763. if (repeatDelay.tv_sec != 0)
  764. {
  765. usec = (now.tv_sec - repeatDelay.tv_sec) * SECOND;
  766. usec += (now.tv_usec - repeatDelay.tv_usec);
  767. if (usec >= REPEAT_DELAY)
  768. {
  769. repeatDelay.tv_sec = 0;
  770. }
  771. }
  772. if (repeatDelay.tv_sec == 0)
  773. {
  774. buttonDown = pad.Buttons;
  775. repeatDelay.tv_sec = now.tv_sec;
  776. repeatDelay.tv_usec = now.tv_usec;
  777. }
  778. }
  779. }
  780. }
  781. else
  782. {
  783. repeatStart.tv_sec = 0;
  784. }
  785. if (buttonDown & PSP_CTRL_CROSS)
  786. {
  787. }
  788. if (buttonDown & PSP_CTRL_LEFT)
  789. {
  790. }
  791. if (buttonDown & PSP_CTRL_RIGHT)
  792. {
  793. }
  794. if (buttonDown & PSP_CTRL_UP)
  795. {
  796. }
  797. if (buttonDown & PSP_CTRL_DOWN)
  798. {
  799. }
  800. if (buttonDown & PSP_CTRL_LTRIGGER)
  801. {
  802. }
  803. if (buttonDown & PSP_CTRL_RTRIGGER)
  804. {
  805. }
  806. if (buttonDown & PSP_CTRL_TRIANGLE)
  807. {
  808. done = 1;
  809. }
  810. oldButtons = pad.Buttons;
  811. }
  812. sceGuTerm();
  813. sceKernelExitGame();
  814. return 0;
  815. }
  816. /* Exit callback */
  817. int exit_callback(int arg1, int arg2, void *common)
  818. {
  819. done = 1;
  820. return 0;
  821. }
  822. /* Callback thread */
  823. int CallbackThread(SceSize args, void *argp)
  824. {
  825. int cbid;
  826. cbid = sceKernelCreateCallback("Exit Callback", exit_callback, (void*)0);
  827. sceKernelRegisterExitCallback(cbid);
  828. sceKernelSleepThreadCB();
  829. return 0;
  830. }
  831. /* Sets up the callback thread and returns its thread id */
  832. int SetupCallbacks(void)
  833. {
  834. int thid = 0;
  835. thid = sceKernelCreateThread("CallbackThread", CallbackThread, 0x11, 0xFA0, 0, 0);
  836. if(thid >= 0)
  837. {
  838. sceKernelStartThread(thid, 0, 0);
  839. }
  840. return thid;
  841. }