/packages/libndsfpc/examples/graphics/Backgrounds/all_in_one/Basic.pp

https://github.com/slibre/freepascal · Puppet · 527 lines · 388 code · 139 blank · 0 comment · 29 complexity · 4d3bc03e8d916e22fd81c28881c9519b MD5 · raw file

  1. unit basic;
  2. interface
  3. uses
  4. ctypes, nds9, scrolling, TextBackgrounds, RotBackgrounds, Multilayer;
  5. procedure Text256x256();
  6. procedure Text256x512();
  7. procedure Text512x256();
  8. procedure Text512x512();
  9. procedure ExRot128x128();
  10. procedure ExRot256x256();
  11. procedure ExRot512x512();
  12. procedure ExRot1024x1024();
  13. procedure Rot128x128();
  14. procedure Rot256x256();
  15. procedure Rot512x512();
  16. procedure Rot1024x1024();
  17. procedure Bmp8_128x128();
  18. procedure Bmp8_256x256();
  19. procedure Bmp8_512x256();
  20. procedure Bmp8_512x512();
  21. procedure Bmp8_512x1024();
  22. procedure Bmp8_1024x512();
  23. procedure Bmp16_128x128();
  24. procedure Bmp16_512x256();
  25. procedure Bmp16_256x256();
  26. procedure Bmp16_512x512();
  27. implementation
  28. procedure Text256x256();
  29. var
  30. bg: cint;
  31. begin
  32. videoSetMode(MODE_0_2D);
  33. vramSetBankA(VRAM_A_MAIN_BG);
  34. bg := bgInit(0, BgType_Text8bpp, BgSize_T_256x256, 0,1);
  35. dmaCopy(@TextBackgroundsTiles, bgGetGfxPtr(bg), sizeof(TextBackgroundsTiles));
  36. dmaCopy(@Layer256x256Map, bgGetMapPtr(bg), Layer256x256MapLen);
  37. dmaCopy(@TextBackgroundsPal, BG_PALETTE, sizeof(TextBackgroundsPal));
  38. scroll(bg, 256, 256);
  39. end;
  40. procedure Text256x512();
  41. var
  42. bg: cint;
  43. begin
  44. videoSetMode(MODE_0_2D);
  45. vramSetBankA(VRAM_A_MAIN_BG);
  46. bg := bgInit(0, BgType_Text8bpp, BgSize_T_256x512, 0,1);
  47. dmaCopy(@TextBackgroundsTiles, bgGetGfxPtr(bg), sizeof(TextBackgroundsTiles));
  48. dmaCopy(@Layer256x512Map, bgGetMapPtr(bg), Layer256x512MapLen);
  49. dmaCopy(@TextBackgroundsPal, BG_PALETTE, sizeof(TextBackgroundsPal));
  50. scroll(bg, 256, 512);
  51. end;
  52. procedure Text512x256();
  53. var
  54. bg: cint;
  55. map: pcuint16;
  56. iy, ix: integer;
  57. begin
  58. videoSetMode(MODE_0_2D);
  59. vramSetBankA(VRAM_A_MAIN_BG);
  60. bg := bgInit(0, BgType_Text8bpp, BgSize_T_512x256, 0, 1);
  61. dmaCopy(@TextBackgroundsTiles, bgGetGfxPtr(bg), sizeof(TextBackgroundsTiles));
  62. dmaCopy(@TextBackgroundsPal, BG_PALETTE, sizeof(TextBackgroundsPal));
  63. map := pcuint16(bgGetMapPtr(bg));
  64. for iy := 0 to 31 do
  65. begin
  66. //first the left half
  67. dmaCopy(@Layer512x256Map + iy * 64 * 2, @map[iy * 32], 32 * 2);
  68. //then the right half
  69. dmaCopy(@Layer512x256Map + iy * 64 * 2 + 64, @map[(32 * 32) + (iy * 32)], 32 * 2);
  70. end;
  71. scroll(bg, 512, 256);
  72. end;
  73. procedure Text512x512();
  74. var
  75. bg: cint;
  76. map: pcuint16;
  77. iy, ix: integer;
  78. begin
  79. videoSetMode(MODE_0_2D);
  80. vramSetBankA(VRAM_A_MAIN_BG);
  81. bg := bgInit(0, BgType_Text8bpp, BgSize_T_512x512, 0,1);
  82. dmaCopy(@TextBackgroundsTiles, bgGetGfxPtr(bg), sizeof(TextBackgroundsTiles));
  83. dmaCopy(@TextBackgroundsPal, BG_PALETTE, sizeof(TextBackgroundsPal));
  84. map := pcuint16(bgGetMapPtr(bg));
  85. //draw top half
  86. for iy := 0 to 31 do
  87. begin
  88. //first the left half
  89. dmaCopy(@Layer512x512Map + iy * 64 * 2, map + iy * 32, 32 * 2);
  90. //then the right half
  91. dmaCopy(@Layer512x512Map + iy * 64 * 2 + 64, map + (32 * 32) + iy * 32, 32 * 2);
  92. end;
  93. map := map + (32 * 32 * 2);
  94. //draw bottom half
  95. for iy := 0 to 31 do
  96. begin
  97. //copy one line at a time
  98. //first the left half
  99. dmaCopy(@Layer512x512Map + (iy + 32) * 64 * 2, map + iy * 32, 32 * 2);
  100. //then the right half
  101. dmaCopy(@Layer512x512Map + (iy + 32) * 64 * 2 + 64, map + (32 * 32) + iy * 32, 32 * 2);
  102. end;
  103. scroll(bg, 512, 512);
  104. end;
  105. procedure ExRot128x128();
  106. var
  107. bg: cint;
  108. begin
  109. videoSetMode(MODE_5_2D);
  110. vramSetBankA(VRAM_A_MAIN_BG);
  111. bg := bgInit(3, BgType_ExRotation, BgSize_ER_128x128, 0, 1);
  112. dmaCopy(@TextBackgroundsTiles, bgGetGfxPtr(bg), sizeof(TextBackgroundsTiles));
  113. dmaCopy(@Layer128x128Map, bgGetMapPtr(bg), Layer128x128MapLen);
  114. dmaCopy(@TextBackgroundsPal, BG_PALETTE, sizeof(TextBackgroundsPal));
  115. scroll(bg, 128, 128);
  116. end;
  117. procedure ExRot256x256();
  118. var
  119. bg: cint;
  120. begin
  121. videoSetMode(MODE_5_2D);
  122. vramSetBankA(VRAM_A_MAIN_BG);
  123. bg := bgInit(3, BgType_ExRotation, BgSize_ER_256x256, 0,1);
  124. dmaCopy(@TextBackgroundsTiles, bgGetGfxPtr(bg), sizeof(TextBackgroundsTiles));
  125. dmaCopy(@Layer256x256Map, bgGetMapPtr(bg), Layer256x256MapLen);
  126. dmaCopy(@TextBackgroundsPal, BG_PALETTE, sizeof(TextBackgroundsPal));
  127. scroll(bg, 256, 256);
  128. end;
  129. procedure ExRot512x512();
  130. var
  131. bg: cint;
  132. begin
  133. videoSetMode(MODE_5_2D);
  134. vramSetBankA(VRAM_A_MAIN_BG);
  135. bg := bgInit(3, BgType_ExRotation, BgSize_ER_512x512, 0,1);
  136. dmaCopy(@TextBackgroundsTiles, bgGetGfxPtr(bg), sizeof(TextBackgroundsTiles));
  137. dmaCopy(@TextBackgroundsPal, BG_PALETTE, sizeof(TextBackgroundsPal));
  138. dmaCopy(@Layer512x512Map, bgGetMapPtr(bg), Layer512x512MapLen);
  139. scroll(bg, 512, 512);
  140. end;
  141. procedure ExRot1024x1024();
  142. var
  143. bg: cint;
  144. begin
  145. videoSetMode(MODE_5_2D);
  146. vramSetBankA(VRAM_A_MAIN_BG);
  147. bg := bgInit(3, BgType_ExRotation, BgSize_ER_1024x1024, 0,2);
  148. dmaCopy(@TextBackgroundsTiles, bgGetGfxPtr(bg), sizeof(TextBackgroundsTiles));
  149. dmaCopy(@TextBackgroundsPal, BG_PALETTE, sizeof(TextBackgroundsPal));
  150. dmaCopy(@Layer1024x1024Map, bgGetMapPtr(bg), Layer1024x1024MapLen);
  151. scroll(bg, 1024, 1024);
  152. end;
  153. procedure Rot128x128();
  154. var
  155. bg: cint;
  156. begin
  157. videoSetMode(MODE_2_2D);
  158. vramSetBankA(VRAM_A_MAIN_BG);
  159. bg := bgInit(3, BgType_Rotation, BgSize_R_128x128, 0, 1);
  160. dmaCopy(@RotBackgroundsTiles, bgGetGfxPtr(bg), sizeof(RotBackgroundsTiles));
  161. dmaCopy(@RotBackgroundsPal, BG_PALETTE, sizeof(RotBackgroundsPal));
  162. dmaCopy(@Layer128x128rMap, bgGetMapPtr(bg), Layer128x128rMapLen);
  163. scroll(bg, 128, 128);
  164. end;
  165. procedure Rot256x256();
  166. var
  167. bg: cint;
  168. begin
  169. videoSetMode(MODE_2_2D);
  170. vramSetBankA(VRAM_A_MAIN_BG);
  171. bg := bgInit(3, BgType_Rotation, BgSize_R_256x256, 0,2);
  172. dmaCopy(@RotBackgroundsTiles, bgGetGfxPtr(bg), sizeof(RotBackgroundsTiles));
  173. dmaCopy(@RotBackgroundsPal, BG_PALETTE, sizeof(RotBackgroundsPal));
  174. dmaCopy(@Layer256x256rMap, bgGetMapPtr(bg), Layer256x256rMapLen);
  175. scroll(bg, 256, 256);
  176. end;
  177. procedure Rot512x512();
  178. var
  179. bg: cint;
  180. begin
  181. videoSetMode(MODE_2_2D);
  182. vramSetBankA(VRAM_A_MAIN_BG);
  183. bg := bgInit(3, BgType_Rotation, BgSize_R_512x512, 0,2);
  184. dmaCopy(@RotBackgroundsTiles, bgGetGfxPtr(bg), sizeof(RotBackgroundsTiles));
  185. dmaCopy(@RotBackgroundsPal, BG_PALETTE, sizeof(RotBackgroundsPal));
  186. dmaCopy(@Layer512x512rMap, bgGetMapPtr(bg), Layer512x512rMapLen);
  187. scroll(bg, 512, 512);
  188. end;
  189. procedure Rot1024x1024();
  190. var
  191. bg: cint;
  192. begin
  193. videoSetMode(MODE_2_2D);
  194. vramSetBankA(VRAM_A_MAIN_BG);
  195. bg := bgInit(3, BgType_Rotation, BgSize_R_1024x1024, 0,3);
  196. dmaCopy(@RotBackgroundsTiles, bgGetGfxPtr(bg), sizeof(RotBackgroundsTiles));
  197. dmaCopy(@RotBackgroundsPal, BG_PALETTE, sizeof(RotBackgroundsPal));
  198. dmaCopy(@Layer1024x1024rMap, bgGetMapPtr(bg), Layer1024x1024rMapLen);
  199. scroll(bg, 1024, 1024);
  200. end;
  201. procedure Bmp8_128x128();
  202. var
  203. bg: cint;
  204. buffer: pcuint16;
  205. i, iy, ix: integer;
  206. begin
  207. randomize;
  208. videoSetMode(MODE_5_2D);
  209. vramSetBankA(VRAM_A_MAIN_BG);
  210. bg := bgInit(3, BgType_Bmp8, BgSize_B8_128x128,0,0);
  211. for i := 0 to 255 do
  212. BG_PALETTE[i] := random(high(cuint16));
  213. buffer := pcuint16(bgGetGfxPtr(bg));
  214. for iy := 0 to 127 do
  215. for ix := 0 to (128 div 2) - 1 do
  216. buffer[ix + iy * 64] := random(high(cuint16));
  217. scroll(bg, 128, 128);
  218. end;
  219. procedure Bmp8_256x256();
  220. var
  221. bg: cint;
  222. buffer: pcuint16;
  223. i, iy, ix: integer;
  224. begin
  225. randomize;
  226. videoSetMode(MODE_5_2D);
  227. vramSetBankA(VRAM_A_MAIN_BG);
  228. bg := bgInit(3, BgType_Bmp8, BgSize_B8_256x256,0,0);
  229. for i := 0 to 255 do
  230. BG_PALETTE[i] := random(high(cuint16));
  231. buffer := pcuint16(bgGetGfxPtr(bg));
  232. for iy := 0 to 255 do
  233. for ix := 0 to (256 div 2) - 1 do
  234. buffer[ix + iy * 128] := random(high(cuint16));
  235. scroll(bg, 256, 256);
  236. end;
  237. procedure Bmp8_512x256();
  238. var
  239. bg: cint;
  240. buffer: pcuint16;
  241. iy, ix: integer;
  242. i: integer;
  243. begin
  244. randomize;
  245. videoSetMode(MODE_5_2D);
  246. vramSetBankA(VRAM_A_MAIN_BG);
  247. bg := bgInit(3, BgType_Bmp8, BgSize_B8_512x256,0,0);
  248. for i := 0 to 255 do
  249. BG_PALETTE[i] := random(high(cuint16));
  250. buffer := pcuint16(bgGetGfxPtr(bg));
  251. for iy := 0 to 255 do
  252. for ix := 0 to (512 div 2) - 1 do
  253. buffer[ix + iy * 256] := random(high(cuint16));
  254. scroll(bg, 512, 256);
  255. end;
  256. procedure Bmp8_512x512();
  257. var
  258. bg: cint;
  259. buffer: pcuint16;
  260. iy, ix: integer;
  261. i: integer;
  262. begin
  263. randomize;
  264. videoSetMode(MODE_5_2D);
  265. vramSetBankA(VRAM_A_MAIN_BG);
  266. vramSetBankB(VRAM_B_MAIN_BG);
  267. bg := bgInit(3, BgType_Bmp8, BgSize_B8_512x512,0,0);
  268. for i := 0 to 255 do
  269. BG_PALETTE[i] := random(high(cuint16));
  270. buffer := pcuint16(bgGetGfxPtr(bg));
  271. for iy := 0 to 511 do
  272. for ix := 0 to (512 div 2) -1 do
  273. buffer[ix + iy * 256] := random(high(cuint16));
  274. scroll(bg, 512, 512);
  275. end;
  276. procedure Bmp8_512x1024();
  277. var
  278. bg: cint;
  279. buffer: pcuint16;
  280. iy, ix: integer;
  281. i: integer;
  282. begin
  283. randomize;
  284. videoSetMode(MODE_6_2D);
  285. vramSetBankA(VRAM_A_MAIN_BG);
  286. vramSetBankB(VRAM_B_MAIN_BG);
  287. vramSetBankC(VRAM_C_MAIN_BG);
  288. vramSetBankD(VRAM_D_MAIN_BG);
  289. bg := bgInit(2, BgType_Bmp8, BgSize_B8_512x1024,0,0);
  290. for i := 0 to 255 do
  291. BG_PALETTE[i] := random(high(cuint16));
  292. buffer := pcuint16(bgGetGfxPtr(bg));
  293. for iy := 0 to 1023 do
  294. for ix := 0 to (512 div 2) -1 do
  295. buffer[ix + iy * 256] := random(high(cuint16));
  296. scroll(bg, 512, 1024);
  297. end;
  298. procedure Bmp8_1024x512();
  299. var
  300. bg: cint;
  301. buffer: pcuint16;
  302. iy, ix: integer;
  303. i: integer;
  304. begin
  305. randomize;
  306. videoSetMode(MODE_6_2D);
  307. vramSetBankA(VRAM_A_MAIN_BG);
  308. vramSetBankB(VRAM_B_MAIN_BG);
  309. vramSetBankC(VRAM_C_MAIN_BG);
  310. vramSetBankD(VRAM_D_MAIN_BG);
  311. bg := bgInit(2, BgType_Bmp8, BgSize_B8_1024x512,0,0);
  312. for i := 0 to 255 do
  313. BG_PALETTE[i] := random(high(cuint16));
  314. buffer := pcuint16(bgGetGfxPtr(bg));
  315. for iy := 0 to 511 do
  316. for ix := 0 to (1024 div 2) -1 do
  317. buffer[ix + iy * 512] := random(high(cuint16));
  318. scroll(bg, 1024, 512);
  319. end;
  320. procedure Bmp16_128x128();
  321. var
  322. bg: cint;
  323. buffer: pcuint16;
  324. iy, ix: integer;
  325. begin
  326. randomize;
  327. videoSetMode(MODE_5_2D);
  328. vramSetBankA(VRAM_A_MAIN_BG);
  329. bg := bgInit(2, BgType_Bmp16, BgSize_B16_128x128,0,0);
  330. buffer := pcuint16(bgGetGfxPtr(bg));
  331. for iy := 0 to 127 do
  332. for ix := 0 to 127 do
  333. buffer[ix + iy * 128] := random(high(cuint16));
  334. scroll(bg, 128, 128);
  335. end;
  336. procedure Bmp16_256x256();
  337. var
  338. bg: cint;
  339. buffer: pcuint16;
  340. iy, ix: integer;
  341. begin
  342. randomize;
  343. videoSetMode(MODE_5_2D);
  344. vramSetBankA(VRAM_A_MAIN_BG);
  345. bg := bgInit(2, BgType_Bmp16, BgSize_B16_256x256,0,0);
  346. buffer := pcuint16(bgGetGfxPtr(bg));
  347. for iy := 0 to 255 do
  348. for ix := 0 to 255 do
  349. buffer[ix + iy * 256] := random(high(cuint16));
  350. scroll(bg, 256, 256);
  351. end;
  352. procedure Bmp16_512x256();
  353. var
  354. bg: cint;
  355. buffer: pcuint16;
  356. iy, ix: integer;
  357. begin
  358. randomize;
  359. videoSetMode(MODE_5_2D);
  360. vramSetBankA(VRAM_A_MAIN_BG);
  361. vramSetBankB(VRAM_B_MAIN_BG);
  362. bg := bgInit(2, BgType_Bmp16, BgSize_B16_512x256,0,0);
  363. buffer := pcuint16(bgGetGfxPtr(bg));
  364. for iy := 0 to 255 do
  365. for ix := 0 to 512 do
  366. buffer[ix + iy * 512] := random(high(cuint16));
  367. scroll(bg, 512, 256);
  368. end;
  369. procedure Bmp16_512x512();
  370. var
  371. bg: cint;
  372. buffer: pcuint16;
  373. iy, ix: integer;
  374. begin
  375. randomize;
  376. videoSetMode(MODE_5_2D);
  377. vramSetBankA(VRAM_A_MAIN_BG);
  378. vramSetBankB(VRAM_B_MAIN_BG);
  379. vramSetBankC(VRAM_C_MAIN_BG);
  380. vramSetBankD(VRAM_D_MAIN_BG);
  381. bg := bgInit(2, BgType_Bmp16, BgSize_B16_512x512,0,0);
  382. buffer := pcuint16(bgGetGfxPtr(bg));
  383. for iy := 0 to 511 do
  384. for ix := 0 to 511 do
  385. buffer[ix + iy * 512] := random(high(cuint16));
  386. scroll(bg, 512, 512);
  387. end;
  388. end.