romdev-mcp 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1247) hide show
  1. package/AGENTS.md +726 -0
  2. package/LICENSE +45 -0
  3. package/NOTICE +86 -0
  4. package/README.md +46 -0
  5. package/examples/README.md +36 -0
  6. package/examples/art-first-workflow/README.md +205 -0
  7. package/examples/atari2600/main.asm +143 -0
  8. package/examples/atari2600/templates/default.asm +183 -0
  9. package/examples/atari2600/templates/mini_invaders.asm +381 -0
  10. package/examples/atari2600/templates/music_demo.asm +322 -0
  11. package/examples/atari2600/templates/paddle.asm +345 -0
  12. package/examples/atari2600/templates/single_screen.asm +242 -0
  13. package/examples/atari7800/main.c +88 -0
  14. package/examples/atari7800/templates/default.c +183 -0
  15. package/examples/atari7800/templates/hello_sprite.c +141 -0
  16. package/examples/atari7800/templates/music_demo.c +123 -0
  17. package/examples/atari7800/templates/platformer.c +159 -0
  18. package/examples/atari7800/templates/puzzle.c +164 -0
  19. package/examples/atari7800/templates/racing.c +139 -0
  20. package/examples/atari7800/templates/shmup.c +148 -0
  21. package/examples/atari7800/templates/sports.c +207 -0
  22. package/examples/c64/main.c +63 -0
  23. package/examples/c64/templates/hello_sprite.c +117 -0
  24. package/examples/c64/templates/music_demo.c +131 -0
  25. package/examples/c64/templates/platformer.c +194 -0
  26. package/examples/c64/templates/puzzle.c +178 -0
  27. package/examples/c64/templates/racing.c +140 -0
  28. package/examples/c64/templates/shmup.c +201 -0
  29. package/examples/c64/templates/sports.c +109 -0
  30. package/examples/c64/templates/tile_engine.c +174 -0
  31. package/examples/gb/main.asm +106 -0
  32. package/examples/gb/main.c +49 -0
  33. package/examples/gb/templates/default.c +58 -0
  34. package/examples/gb/templates/hello_sprite.c +130 -0
  35. package/examples/gb/templates/music_demo.c +52 -0
  36. package/examples/gb/templates/platformer.c +178 -0
  37. package/examples/gb/templates/puzzle.c +217 -0
  38. package/examples/gb/templates/racing.c +158 -0
  39. package/examples/gb/templates/shmup.c +172 -0
  40. package/examples/gb/templates/sports.c +136 -0
  41. package/examples/gb/templates/tile_engine.c +280 -0
  42. package/examples/gba/templates/gba_hello.c +64 -0
  43. package/examples/gba/templates/maxmod_demo.c +105 -0
  44. package/examples/gba/templates/platformer.c +215 -0
  45. package/examples/gba/templates/puzzle.c +237 -0
  46. package/examples/gba/templates/racing.c +175 -0
  47. package/examples/gba/templates/shmup.c +197 -0
  48. package/examples/gba/templates/sports.c +177 -0
  49. package/examples/gba/templates/tonc_hello.c +72 -0
  50. package/examples/gba/templates/tonc_hello_sprite.c +109 -0
  51. package/examples/gbc/main.asm +123 -0
  52. package/examples/gbc/templates/default.c +61 -0
  53. package/examples/gbc/templates/hello_sprite.c +140 -0
  54. package/examples/gbc/templates/music_demo.c +63 -0
  55. package/examples/gbc/templates/platformer.c +181 -0
  56. package/examples/gbc/templates/puzzle.c +217 -0
  57. package/examples/gbc/templates/racing.c +164 -0
  58. package/examples/gbc/templates/shmup.c +188 -0
  59. package/examples/gbc/templates/sports.c +142 -0
  60. package/examples/gbc/templates/tile_engine.c +280 -0
  61. package/examples/genesis/main.s +161 -0
  62. package/examples/genesis/templates/hello_sprite.c +75 -0
  63. package/examples/genesis/templates/platformer.c +166 -0
  64. package/examples/genesis/templates/puzzle.c +240 -0
  65. package/examples/genesis/templates/racing.c +170 -0
  66. package/examples/genesis/templates/sgdk_hello.c +41 -0
  67. package/examples/genesis/templates/shmup.c +188 -0
  68. package/examples/genesis/templates/shmup_2p.c +244 -0
  69. package/examples/genesis/templates/sports.c +172 -0
  70. package/examples/genesis/templates/tile_engine.c +135 -0
  71. package/examples/genesis/templates/xgm2_demo.c +53 -0
  72. package/examples/genesis/templates/xgm2_demo_data.s +27 -0
  73. package/examples/gg/main.c +10 -0
  74. package/examples/gg/templates/default.c +156 -0
  75. package/examples/gg/templates/hello_sprite.c +90 -0
  76. package/examples/gg/templates/music_demo.c +156 -0
  77. package/examples/gg/templates/platformer.c +220 -0
  78. package/examples/gg/templates/puzzle.c +204 -0
  79. package/examples/gg/templates/racing.c +161 -0
  80. package/examples/gg/templates/shmup.c +188 -0
  81. package/examples/gg/templates/sports.c +137 -0
  82. package/examples/gg/templates/tile_engine.c +137 -0
  83. package/examples/lynx/main.c +4 -0
  84. package/examples/lynx/templates/default.c +41 -0
  85. package/examples/lynx/templates/hello_sprite.c +39 -0
  86. package/examples/lynx/templates/music_demo.c +37 -0
  87. package/examples/lynx/templates/platformer.c +72 -0
  88. package/examples/lynx/templates/puzzle.c +142 -0
  89. package/examples/lynx/templates/racing.c +94 -0
  90. package/examples/lynx/templates/shmup.c +132 -0
  91. package/examples/lynx/templates/sports.c +59 -0
  92. package/examples/nes/main.c +143 -0
  93. package/examples/nes/space-shooter/README.md +68 -0
  94. package/examples/nes/space-shooter/main.c +441 -0
  95. package/examples/nes/space-shooter/nes_runtime.c +347 -0
  96. package/examples/nes/space-shooter/nes_runtime.h +141 -0
  97. package/examples/nes/templates/default.c +41 -0
  98. package/examples/nes/templates/hello_sprite.c +104 -0
  99. package/examples/nes/templates/music_demo.c +80 -0
  100. package/examples/nes/templates/platformer.c +171 -0
  101. package/examples/nes/templates/puzzle.c +232 -0
  102. package/examples/nes/templates/racing.c +203 -0
  103. package/examples/nes/templates/shmup.c +228 -0
  104. package/examples/nes/templates/sports.c +205 -0
  105. package/examples/nes/templates/tile_engine.c +224 -0
  106. package/examples/porting-across-platforms/README.md +59 -0
  107. package/examples/sms/main.c +129 -0
  108. package/examples/sms/templates/default.c +110 -0
  109. package/examples/sms/templates/hello_sprite.c +90 -0
  110. package/examples/sms/templates/music_demo.c +151 -0
  111. package/examples/sms/templates/platformer.c +215 -0
  112. package/examples/sms/templates/puzzle.c +204 -0
  113. package/examples/sms/templates/racing.c +161 -0
  114. package/examples/sms/templates/shmup.c +167 -0
  115. package/examples/sms/templates/shmup_2p.c +219 -0
  116. package/examples/sms/templates/sports.c +147 -0
  117. package/examples/sms/templates/tile_engine.c +137 -0
  118. package/examples/snes/main.asm +70 -0
  119. package/examples/snes/templates/c-hello-data.asm +28 -0
  120. package/examples/snes/templates/c-hello.c +71 -0
  121. package/examples/snes/templates/default-data.asm +36 -0
  122. package/examples/snes/templates/default.c +74 -0
  123. package/examples/snes/templates/hello_sprite-data.asm +45 -0
  124. package/examples/snes/templates/hello_sprite.c +76 -0
  125. package/examples/snes/templates/music_demo-data.asm +20 -0
  126. package/examples/snes/templates/music_demo.c +83 -0
  127. package/examples/snes/templates/platformer-data.asm +27 -0
  128. package/examples/snes/templates/platformer.c +142 -0
  129. package/examples/snes/templates/puzzle-data.asm +14 -0
  130. package/examples/snes/templates/puzzle.c +199 -0
  131. package/examples/snes/templates/racing-data.asm +33 -0
  132. package/examples/snes/templates/racing.c +146 -0
  133. package/examples/snes/templates/shmup-data.asm +61 -0
  134. package/examples/snes/templates/shmup.c +199 -0
  135. package/examples/snes/templates/sports-data.asm +28 -0
  136. package/examples/snes/templates/sports.c +144 -0
  137. package/package.json +83 -0
  138. package/src/cli/smoke.js +283 -0
  139. package/src/cores/registry.js +95 -0
  140. package/src/host/LibretroHost.js +502 -0
  141. package/src/host/callbacks.js +444 -0
  142. package/src/host/chafa-render.js +170 -0
  143. package/src/host/coreLoader.js +57 -0
  144. package/src/host/cpu-state.js +422 -0
  145. package/src/host/dsp-state.js +188 -0
  146. package/src/host/framebuffer.js +115 -0
  147. package/src/host/gpgx-state.js +309 -0
  148. package/src/host/index.js +4 -0
  149. package/src/host/retroConstants.js +72 -0
  150. package/src/host/snes9x-state.js +35 -0
  151. package/src/host/types.js +280 -0
  152. package/src/mcp/disclosure.js +250 -0
  153. package/src/mcp/log.js +87 -0
  154. package/src/mcp/server.js +433 -0
  155. package/src/mcp/state.js +83 -0
  156. package/src/mcp/tools/address-to-symbol.js +151 -0
  157. package/src/mcp/tools/art-loaders.js +740 -0
  158. package/src/mcp/tools/assets.js +89 -0
  159. package/src/mcp/tools/audio.js +173 -0
  160. package/src/mcp/tools/cart-parts.js +649 -0
  161. package/src/mcp/tools/diff-roms.js +412 -0
  162. package/src/mcp/tools/disasm.js +980 -0
  163. package/src/mcp/tools/find-references.js +361 -0
  164. package/src/mcp/tools/font-map.js +353 -0
  165. package/src/mcp/tools/frame.js +249 -0
  166. package/src/mcp/tools/free-space.js +95 -0
  167. package/src/mcp/tools/index.js +351 -0
  168. package/src/mcp/tools/input-layout.js +215 -0
  169. package/src/mcp/tools/input.js +142 -0
  170. package/src/mcp/tools/lifecycle.js +110 -0
  171. package/src/mcp/tools/lospec.js +156 -0
  172. package/src/mcp/tools/memory.js +169 -0
  173. package/src/mcp/tools/metasprite-tools.js +261 -0
  174. package/src/mcp/tools/platform-docs.js +102 -0
  175. package/src/mcp/tools/platform-tools.js +1063 -0
  176. package/src/mcp/tools/platforms.js +86 -0
  177. package/src/mcp/tools/playtest.js +280 -0
  178. package/src/mcp/tools/preview-tile.js +360 -0
  179. package/src/mcp/tools/project.js +1885 -0
  180. package/src/mcp/tools/record.js +131 -0
  181. package/src/mcp/tools/rendering-context.js +700 -0
  182. package/src/mcp/tools/rom-id.js +256 -0
  183. package/src/mcp/tools/run-until.js +173 -0
  184. package/src/mcp/tools/snippets.js +235 -0
  185. package/src/mcp/tools/splice-chr.js +215 -0
  186. package/src/mcp/tools/sprite-pipeline.js +614 -0
  187. package/src/mcp/tools/state.js +99 -0
  188. package/src/mcp/tools/symbols.js +277 -0
  189. package/src/mcp/tools/tile-inspect.js +206 -0
  190. package/src/mcp/tools/toolchain.js +680 -0
  191. package/src/mcp/tools/watch-memory.js +212 -0
  192. package/src/mcp/tools/which-tiles.js +193 -0
  193. package/src/mcp/util.js +85 -0
  194. package/src/observer/bus.js +127 -0
  195. package/src/observer/livestream.html +589 -0
  196. package/src/observer/server.js +66 -0
  197. package/src/observer/tool-wrap.js +115 -0
  198. package/src/platforms/atari2600/MENTAL_MODEL.md +185 -0
  199. package/src/platforms/atari2600/TROUBLESHOOTING.md +155 -0
  200. package/src/platforms/atari2600/UPSTREAM_SOURCES.md +49 -0
  201. package/src/platforms/atari2600/lib/README.md +67 -0
  202. package/src/platforms/atari2600/lib/cc65-src/crt0.s +49 -0
  203. package/src/platforms/atari2600/lib/cc65-src/ctype.s +5 -0
  204. package/src/platforms/atari2600/lib/kernel_skeleton.asm +85 -0
  205. package/src/platforms/atari2600/lib/player_kernel.asm +87 -0
  206. package/src/platforms/atari2600/lib/playfield_kernel.asm +63 -0
  207. package/src/platforms/atari2600/lib/read_joystick.asm +76 -0
  208. package/src/platforms/atari2600/lib/score_kernel.asm +141 -0
  209. package/src/platforms/atari2600/lib/vcs_constants.h +97 -0
  210. package/src/platforms/atari2600/lib/vectors.asm +16 -0
  211. package/src/platforms/atari2600/tia.js +355 -0
  212. package/src/platforms/atari7800/MENTAL_MODEL.md +306 -0
  213. package/src/platforms/atari7800/TROUBLESHOOTING.md +195 -0
  214. package/src/platforms/atari7800/UPSTREAM_SOURCES.md +43 -0
  215. package/src/platforms/atari7800/lib/README.md +45 -0
  216. package/src/platforms/atari7800/lib/c/atari7800_music.c +215 -0
  217. package/src/platforms/atari7800/lib/c/atari7800_music.h +33 -0
  218. package/src/platforms/atari7800/lib/c/atari7800_sfx.c +74 -0
  219. package/src/platforms/atari7800/lib/c/atari7800_sfx.h +45 -0
  220. package/src/platforms/atari7800/lib/cc65-src/clock.s +69 -0
  221. package/src/platforms/atari7800/lib/cc65-src/clocks_per_sec.s +34 -0
  222. package/src/platforms/atari7800/lib/cc65-src/clrscr.s +27 -0
  223. package/src/platforms/atari7800/lib/cc65-src/conio.s +226 -0
  224. package/src/platforms/atari7800/lib/cc65-src/conio_font.s +278 -0
  225. package/src/platforms/atari7800/lib/cc65-src/cputc.s +139 -0
  226. package/src/platforms/atari7800/lib/cc65-src/crt0.s +71 -0
  227. package/src/platforms/atari7800/lib/cc65-src/ctype.s +5 -0
  228. package/src/platforms/atari7800/lib/cc65-src/exehdr.s +46 -0
  229. package/src/platforms/atari7800/lib/cc65-src/extra/mono.s +28 -0
  230. package/src/platforms/atari7800/lib/cc65-src/extzp.inc +15 -0
  231. package/src/platforms/atari7800/lib/cc65-src/extzp.s +15 -0
  232. package/src/platforms/atari7800/lib/cc65-src/get_tv.s +65 -0
  233. package/src/platforms/atari7800/lib/cc65-src/irq.s +36 -0
  234. package/src/platforms/atari7800/lib/cc65-src/joy/atari7800-stdjoy.s +197 -0
  235. package/src/platforms/atari7800/lib/cc65-src/joy_stat_stddrv.s +14 -0
  236. package/src/platforms/atari7800/lib/cc65-src/libref.s +8 -0
  237. package/src/platforms/atari7800/lib/cc65-src/mono_clrscr.s +27 -0
  238. package/src/platforms/atari7800/lib/cc65-src/mono_conio.s +231 -0
  239. package/src/platforms/atari7800/lib/cc65-src/mono_cputc.s +102 -0
  240. package/src/platforms/atari7800/lib/cc65-src/mono_font.s +2065 -0
  241. package/src/platforms/atari7800/lib/cc65-src/mono_setcursor.s +214 -0
  242. package/src/platforms/atari7800/lib/cc65-src/setcursor.s +214 -0
  243. package/src/platforms/atari7800/lib/cc65-src/textcolor.s +53 -0
  244. package/src/platforms/atari7800/lib/cc65-src/wherex.s +19 -0
  245. package/src/platforms/atari7800/lib/cc65-src/wherey.s +19 -0
  246. package/src/platforms/atari7800/lib/display_list.asm +53 -0
  247. package/src/platforms/atari7800/lib/maria_init.asm +48 -0
  248. package/src/platforms/atari7800/lib/maria_registers.h +61 -0
  249. package/src/platforms/atari7800/lib/palette_load.asm +53 -0
  250. package/src/platforms/atari7800/lib/read_pad.asm +57 -0
  251. package/src/platforms/atari7800/lib/vblank_wait.asm +16 -0
  252. package/src/platforms/atari7800/maria.js +220 -0
  253. package/src/platforms/c64/MENTAL_MODEL.md +175 -0
  254. package/src/platforms/c64/TROUBLESHOOTING.md +130 -0
  255. package/src/platforms/c64/UPSTREAM_SOURCES.md +35 -0
  256. package/src/platforms/c64/image-to-tilemap.js +190 -0
  257. package/src/platforms/c64/lib/README.md +52 -0
  258. package/src/platforms/c64/lib/basic_stub.s +25 -0
  259. package/src/platforms/c64/lib/c/c64_music.c +248 -0
  260. package/src/platforms/c64/lib/c/c64_music.h +36 -0
  261. package/src/platforms/c64/lib/c/c64_sfx.c +94 -0
  262. package/src/platforms/c64/lib/c/c64_sfx.h +37 -0
  263. package/src/platforms/c64/lib/c64_registers.h +108 -0
  264. package/src/platforms/c64/lib/cc65-src/_scrsize.s +12 -0
  265. package/src/platforms/c64/lib/cc65-src/acc_c128_speed.s +5 -0
  266. package/src/platforms/c64/lib/cc65-src/acc_c64dtv_speed.s +64 -0
  267. package/src/platforms/c64/lib/cc65-src/acc_c65_speed.s +69 -0
  268. package/src/platforms/c64/lib/cc65-src/acc_chameleon_speed.s +100 -0
  269. package/src/platforms/c64/lib/cc65-src/acc_detect_c128.s +33 -0
  270. package/src/platforms/c64/lib/cc65-src/acc_detect_c64dtv.s +44 -0
  271. package/src/platforms/c64/lib/cc65-src/acc_detect_c65.s +55 -0
  272. package/src/platforms/c64/lib/cc65-src/acc_detect_chameleon.s +39 -0
  273. package/src/platforms/c64/lib/cc65-src/acc_detect_scpu.s +34 -0
  274. package/src/platforms/c64/lib/cc65-src/acc_detect_turbomaster.s +45 -0
  275. package/src/platforms/c64/lib/cc65-src/acc_scpu_speed.s +59 -0
  276. package/src/platforms/c64/lib/cc65-src/acc_turbomaster_speed.s +56 -0
  277. package/src/platforms/c64/lib/cc65-src/bordercolor.s +17 -0
  278. package/src/platforms/c64/lib/cc65-src/break.s +108 -0
  279. package/src/platforms/c64/lib/cc65-src/cgetc.s +62 -0
  280. package/src/platforms/c64/lib/cc65-src/clrscr.s +11 -0
  281. package/src/platforms/c64/lib/cc65-src/color.s +24 -0
  282. package/src/platforms/c64/lib/cc65-src/conio.s +10 -0
  283. package/src/platforms/c64/lib/cc65-src/cputc.s +105 -0
  284. package/src/platforms/c64/lib/cc65-src/crt0.s +117 -0
  285. package/src/platforms/c64/lib/cc65-src/devnum.s +7 -0
  286. package/src/platforms/c64/lib/cc65-src/emd/c64-65816.s +377 -0
  287. package/src/platforms/c64/lib/cc65-src/emd/c64-c256k.s +508 -0
  288. package/src/platforms/c64/lib/cc65-src/emd/c64-dqbb.s +447 -0
  289. package/src/platforms/c64/lib/cc65-src/emd/c64-georam.s +355 -0
  290. package/src/platforms/c64/lib/cc65-src/emd/c64-isepic.s +276 -0
  291. package/src/platforms/c64/lib/cc65-src/emd/c64-kerberos.s +281 -0
  292. package/src/platforms/c64/lib/cc65-src/emd/c64-ram.s +270 -0
  293. package/src/platforms/c64/lib/cc65-src/emd/c64-ramcart.s +297 -0
  294. package/src/platforms/c64/lib/cc65-src/emd/c64-reu.s +286 -0
  295. package/src/platforms/c64/lib/cc65-src/emd/c64-rrr.s +363 -0
  296. package/src/platforms/c64/lib/cc65-src/emd/c64-vdc.s +405 -0
  297. package/src/platforms/c64/lib/cc65-src/emd/dtv-himem.s +251 -0
  298. package/src/platforms/c64/lib/cc65-src/extra/soft80.s +71 -0
  299. package/src/platforms/c64/lib/cc65-src/extra/soft80mono.s +74 -0
  300. package/src/platforms/c64/lib/cc65-src/extra/tgimousedata.s +21 -0
  301. package/src/platforms/c64/lib/cc65-src/get_ostype.s +43 -0
  302. package/src/platforms/c64/lib/cc65-src/get_tv.s +20 -0
  303. package/src/platforms/c64/lib/cc65-src/gettime.s +83 -0
  304. package/src/platforms/c64/lib/cc65-src/irq.s +49 -0
  305. package/src/platforms/c64/lib/cc65-src/joy/c64-hitjoy.s +218 -0
  306. package/src/platforms/c64/lib/cc65-src/joy/c64-numpad.s +155 -0
  307. package/src/platforms/c64/lib/cc65-src/joy/c64-ptvjoy.s +146 -0
  308. package/src/platforms/c64/lib/cc65-src/joy/c64-stdjoy.s +111 -0
  309. package/src/platforms/c64/lib/cc65-src/joy_stat_stddrv.s +14 -0
  310. package/src/platforms/c64/lib/cc65-src/joy_stddrv.s +14 -0
  311. package/src/platforms/c64/lib/cc65-src/kbhit.s +23 -0
  312. package/src/platforms/c64/lib/cc65-src/kbrepeat.s +14 -0
  313. package/src/platforms/c64/lib/cc65-src/kernal.s +53 -0
  314. package/src/platforms/c64/lib/cc65-src/kplot.s +22 -0
  315. package/src/platforms/c64/lib/cc65-src/libref.s +16 -0
  316. package/src/platforms/c64/lib/cc65-src/mainargs.s +137 -0
  317. package/src/platforms/c64/lib/cc65-src/mcbdefault.s +146 -0
  318. package/src/platforms/c64/lib/cc65-src/mcbspritedata.s +4 -0
  319. package/src/platforms/c64/lib/cc65-src/mou/c64-1351.s +467 -0
  320. package/src/platforms/c64/lib/cc65-src/mou/c64-inkwell.s +446 -0
  321. package/src/platforms/c64/lib/cc65-src/mou/c64-joy.s +451 -0
  322. package/src/platforms/c64/lib/cc65-src/mou/c64-pot.s +409 -0
  323. package/src/platforms/c64/lib/cc65-src/mouse_stat_stddrv.s +14 -0
  324. package/src/platforms/c64/lib/cc65-src/mouse_stddrv.s +14 -0
  325. package/src/platforms/c64/lib/cc65-src/mouseref.s +23 -0
  326. package/src/platforms/c64/lib/cc65-src/pencalib.c +94 -0
  327. package/src/platforms/c64/lib/cc65-src/randomize.s +18 -0
  328. package/src/platforms/c64/lib/cc65-src/revers.s +27 -0
  329. package/src/platforms/c64/lib/cc65-src/ser/c64-swlink.s +484 -0
  330. package/src/platforms/c64/lib/cc65-src/ser_stat_stddrv.s +14 -0
  331. package/src/platforms/c64/lib/cc65-src/ser_stddrv.s +13 -0
  332. package/src/platforms/c64/lib/cc65-src/settime.s +84 -0
  333. package/src/platforms/c64/lib/cc65-src/soft80.inc +46 -0
  334. package/src/platforms/c64/lib/cc65-src/soft80_cgetc.s +85 -0
  335. package/src/platforms/c64/lib/cc65-src/soft80_charset.s +182 -0
  336. package/src/platforms/c64/lib/cc65-src/soft80_color.s +159 -0
  337. package/src/platforms/c64/lib/cc65-src/soft80_conio.s +157 -0
  338. package/src/platforms/c64/lib/cc65-src/soft80_cpeekc.s +148 -0
  339. package/src/platforms/c64/lib/cc65-src/soft80_cpeekcolor.s +19 -0
  340. package/src/platforms/c64/lib/cc65-src/soft80_cpeekrevers.s +15 -0
  341. package/src/platforms/c64/lib/cc65-src/soft80_cpeeks.s +71 -0
  342. package/src/platforms/c64/lib/cc65-src/soft80_cputc.s +521 -0
  343. package/src/platforms/c64/lib/cc65-src/soft80_kclrscr.s +76 -0
  344. package/src/platforms/c64/lib/cc65-src/soft80_kplot.s +63 -0
  345. package/src/platforms/c64/lib/cc65-src/soft80_scrsize.s +14 -0
  346. package/src/platforms/c64/lib/cc65-src/soft80mono_cgetc.s +67 -0
  347. package/src/platforms/c64/lib/cc65-src/soft80mono_color.s +65 -0
  348. package/src/platforms/c64/lib/cc65-src/soft80mono_conio.s +168 -0
  349. package/src/platforms/c64/lib/cc65-src/soft80mono_cpeekcolor.s +17 -0
  350. package/src/platforms/c64/lib/cc65-src/soft80mono_cputc.s +204 -0
  351. package/src/platforms/c64/lib/cc65-src/soft80mono_kclrscr.s +63 -0
  352. package/src/platforms/c64/lib/cc65-src/soft80mono_kplot.s +52 -0
  353. package/src/platforms/c64/lib/cc65-src/status.s +15 -0
  354. package/src/platforms/c64/lib/cc65-src/sysuname.s +37 -0
  355. package/src/platforms/c64/lib/cc65-src/tgi/c64-hi.s +881 -0
  356. package/src/platforms/c64/lib/cc65-src/tgi_stat_stddrv.s +14 -0
  357. package/src/platforms/c64/lib/cc65-src/tgi_stddrv.s +13 -0
  358. package/src/platforms/c64/lib/cc65-src/tmcommon.s +67 -0
  359. package/src/platforms/c64/lib/cc65-src/waitvsync.s +18 -0
  360. package/src/platforms/c64/lib/read_joystick.s +28 -0
  361. package/src/platforms/c64/lib/sid_play.s +48 -0
  362. package/src/platforms/c64/lib/sprite_table.s +73 -0
  363. package/src/platforms/c64/lib/vic_init.s +47 -0
  364. package/src/platforms/c64/sid.js +128 -0
  365. package/src/platforms/c64/vic.js +273 -0
  366. package/src/platforms/common/default-palette.js +139 -0
  367. package/src/platforms/common/image-to-tiles.js +407 -0
  368. package/src/platforms/common/intent.js +111 -0
  369. package/src/platforms/common/metasprite-adapters.js +279 -0
  370. package/src/platforms/common/metasprite-codegen.js +192 -0
  371. package/src/platforms/common/metasprite-core.js +201 -0
  372. package/src/platforms/common/metasprite.js +89 -0
  373. package/src/platforms/common/platform-palette.js +137 -0
  374. package/src/platforms/common/registers.js +329 -0
  375. package/src/platforms/common/render-tiles.js +86 -0
  376. package/src/platforms/common/screenshot-sprite.js +153 -0
  377. package/src/platforms/common/tile-decode.js +149 -0
  378. package/src/platforms/gb/MENTAL_MODEL.md +252 -0
  379. package/src/platforms/gb/TROUBLESHOOTING.md +221 -0
  380. package/src/platforms/gb/UPSTREAM_SOURCES.md +43 -0
  381. package/src/platforms/gb/image-to-tilemap.js +173 -0
  382. package/src/platforms/gb/lib/README.md +115 -0
  383. package/src/platforms/gb/lib/c/LICENSE-HUGEDRIVER +25 -0
  384. package/src/platforms/gb/lib/c/README.md +120 -0
  385. package/src/platforms/gb/lib/c/SDCC_GOTCHAS.md +189 -0
  386. package/src/platforms/gb/lib/c/gb_crt0.s +163 -0
  387. package/src/platforms/gb/lib/c/gb_hardware.h +113 -0
  388. package/src/platforms/gb/lib/c/gb_runtime.c +284 -0
  389. package/src/platforms/gb/lib/c/gb_runtime.h +145 -0
  390. package/src/platforms/gb/lib/c/hUGEDriver.c +191 -0
  391. package/src/platforms/gb/lib/c/hUGEDriver.h +95 -0
  392. package/src/platforms/gb/lib/c/hUGEDriver.upstream.asm +1908 -0
  393. package/src/platforms/gb/lib/c/lcd_init.c +19 -0
  394. package/src/platforms/gb/lib/c/patch-header.js +154 -0
  395. package/src/platforms/gb/lib/c/song_data.c +88 -0
  396. package/src/platforms/gb/lib/c/unroll.h +52 -0
  397. package/src/platforms/gb/lib/c/wait_vblank.c +14 -0
  398. package/src/platforms/gb/lib/dma_oam.asm +51 -0
  399. package/src/platforms/gb/lib/header.asm +56 -0
  400. package/src/platforms/gb/lib/joypad_read.asm +47 -0
  401. package/src/platforms/gb/lib/lcd_init.asm +44 -0
  402. package/src/platforms/gb/lib/load_palette.asm +25 -0
  403. package/src/platforms/gb/lib/load_tiles.asm +29 -0
  404. package/src/platforms/gb/lib/vblank_wait.asm +31 -0
  405. package/src/platforms/gb/ppu.js +574 -0
  406. package/src/platforms/gba/MENTAL_MODEL.md +203 -0
  407. package/src/platforms/gba/TROUBLESHOOTING.md +250 -0
  408. package/src/platforms/gba/UPSTREAM_SOURCES.md +41 -0
  409. package/src/platforms/gba/lib/arm-archives/libc.a +0 -0
  410. package/src/platforms/gba/lib/arm-archives/libgcc.a +0 -0
  411. package/src/platforms/gba/lib/arm-archives/libnosys.a +0 -0
  412. package/src/platforms/gba/lib/c/gba_sfx.c +81 -0
  413. package/src/platforms/gba/lib/c/gba_sfx.h +48 -0
  414. package/src/platforms/gba/lib/libgba/crtbegin.o +0 -0
  415. package/src/platforms/gba/lib/libgba/crtend.o +0 -0
  416. package/src/platforms/gba/lib/libgba/crti.o +0 -0
  417. package/src/platforms/gba/lib/libgba/crtn.o +0 -0
  418. package/src/platforms/gba/lib/libgba/gba_cart.ld +319 -0
  419. package/src/platforms/gba/lib/libgba/gba_crt0.s +258 -0
  420. package/src/platforms/gba/lib/libgba/include/BoyScout.h +128 -0
  421. package/src/platforms/gba/lib/libgba/include/disc.h +36 -0
  422. package/src/platforms/gba/lib/libgba/include/disc_io.h +64 -0
  423. package/src/platforms/gba/lib/libgba/include/dldi.h +112 -0
  424. package/src/platforms/gba/lib/libgba/include/erapi.h +195 -0
  425. package/src/platforms/gba/lib/libgba/include/fade.h +76 -0
  426. package/src/platforms/gba/lib/libgba/include/gba.h +47 -0
  427. package/src/platforms/gba/lib/libgba/include/gba_affine.h +83 -0
  428. package/src/platforms/gba/lib/libgba/include/gba_base.h +122 -0
  429. package/src/platforms/gba/lib/libgba/include/gba_compression.h +66 -0
  430. package/src/platforms/gba/lib/libgba/include/gba_console.h +55 -0
  431. package/src/platforms/gba/lib/libgba/include/gba_dma.h +100 -0
  432. package/src/platforms/gba/lib/libgba/include/gba_input.h +127 -0
  433. package/src/platforms/gba/lib/libgba/include/gba_interrupt.h +146 -0
  434. package/src/platforms/gba/lib/libgba/include/gba_multiboot.h +72 -0
  435. package/src/platforms/gba/lib/libgba/include/gba_sio.h +124 -0
  436. package/src/platforms/gba/lib/libgba/include/gba_sound.h +356 -0
  437. package/src/platforms/gba/lib/libgba/include/gba_sprites.h +195 -0
  438. package/src/platforms/gba/lib/libgba/include/gba_systemcalls.h +194 -0
  439. package/src/platforms/gba/lib/libgba/include/gba_timers.h +63 -0
  440. package/src/platforms/gba/lib/libgba/include/gba_types.h +60 -0
  441. package/src/platforms/gba/lib/libgba/include/gba_video.h +307 -0
  442. package/src/platforms/gba/lib/libgba/include/mappy.h +72 -0
  443. package/src/platforms/gba/lib/libgba/include/mbv2.h +90 -0
  444. package/src/platforms/gba/lib/libgba/include/xcomms.h +93 -0
  445. package/src/platforms/gba/lib/libgba/include/xcomms_cmd.h +53 -0
  446. package/src/platforms/gba/lib/libgba/libgba.seed.a +0 -0
  447. package/src/platforms/gba/lib/libgba/libgba.seed.hash +1 -0
  448. package/src/platforms/gba/lib/libgba/src/AffineSet.c +42 -0
  449. package/src/platforms/gba/lib/libgba/src/ArcTan.s +41 -0
  450. package/src/platforms/gba/lib/libgba/src/BoyScout/BoyScout.c +1242 -0
  451. package/src/platforms/gba/lib/libgba/src/BoyScout/GBASoundRegs.h +200 -0
  452. package/src/platforms/gba/lib/libgba/src/Compression.c +84 -0
  453. package/src/platforms/gba/lib/libgba/src/CpuSet.c +41 -0
  454. package/src/platforms/gba/lib/libgba/src/Div.s +58 -0
  455. package/src/platforms/gba/lib/libgba/src/DivArm.s +50 -0
  456. package/src/platforms/gba/lib/libgba/src/InterruptDispatcher.s +113 -0
  457. package/src/platforms/gba/lib/libgba/src/IntrWait.c +35 -0
  458. package/src/platforms/gba/lib/libgba/src/MultiBoot.s +33 -0
  459. package/src/platforms/gba/lib/libgba/src/Reset.s +49 -0
  460. package/src/platforms/gba/lib/libgba/src/Sound.s +48 -0
  461. package/src/platforms/gba/lib/libgba/src/Sqrt.s +34 -0
  462. package/src/platforms/gba/lib/libgba/src/disc_io/disc.c +58 -0
  463. package/src/platforms/gba/lib/libgba/src/disc_io/dldi.c +189 -0
  464. package/src/platforms/gba/lib/libgba/src/disc_io/dldi_stub.s +78 -0
  465. package/src/platforms/gba/lib/libgba/src/disc_io/io_cf_common.c +260 -0
  466. package/src/platforms/gba/lib/libgba/src/disc_io/io_cf_common.h +72 -0
  467. package/src/platforms/gba/lib/libgba/src/disc_io/io_m3_common.c +60 -0
  468. package/src/platforms/gba/lib/libgba/src/disc_io/io_m3_common.h +48 -0
  469. package/src/platforms/gba/lib/libgba/src/disc_io/io_m3cf.c +83 -0
  470. package/src/platforms/gba/lib/libgba/src/disc_io/io_m3cf.h +45 -0
  471. package/src/platforms/gba/lib/libgba/src/disc_io/io_m3sd.c +508 -0
  472. package/src/platforms/gba/lib/libgba/src/disc_io/io_m3sd.h +45 -0
  473. package/src/platforms/gba/lib/libgba/src/disc_io/io_mpcf.c +87 -0
  474. package/src/platforms/gba/lib/libgba/src/disc_io/io_mpcf.h +42 -0
  475. package/src/platforms/gba/lib/libgba/src/disc_io/io_sc_common.c +47 -0
  476. package/src/platforms/gba/lib/libgba/src/disc_io/io_sc_common.h +43 -0
  477. package/src/platforms/gba/lib/libgba/src/disc_io/io_sccf.c +83 -0
  478. package/src/platforms/gba/lib/libgba/src/disc_io/io_sccf.h +45 -0
  479. package/src/platforms/gba/lib/libgba/src/disc_io/io_scsd.c +385 -0
  480. package/src/platforms/gba/lib/libgba/src/disc_io/io_scsd.h +48 -0
  481. package/src/platforms/gba/lib/libgba/src/disc_io/io_scsd_s.s +139 -0
  482. package/src/platforms/gba/lib/libgba/src/disc_io/io_sd_common.c +203 -0
  483. package/src/platforms/gba/lib/libgba/src/disc_io/io_sd_common.h +108 -0
  484. package/src/platforms/gba/lib/libgba/src/fade.c +185 -0
  485. package/src/platforms/gba/lib/libgba/src/input.c +127 -0
  486. package/src/platforms/gba/lib/libgba/src/interrupt.c +116 -0
  487. package/src/platforms/gba/lib/libgba/src/mappy_print.c +74 -0
  488. package/src/platforms/gba/lib/libgba/src/mb2print.c +69 -0
  489. package/src/platforms/gba/lib/libgba/src/mbv2.c +230 -0
  490. package/src/platforms/gba/lib/libgba/src/mbv2.txt +119 -0
  491. package/src/platforms/gba/lib/libgba/src/xcomms.c +203 -0
  492. package/src/platforms/gba/lib/libgba/src/xcomms_print.c +56 -0
  493. package/src/platforms/gba/lib/libgba/sysinclude/_ansi.h +82 -0
  494. package/src/platforms/gba/lib/libgba/sysinclude/_newlib_version.h +11 -0
  495. package/src/platforms/gba/lib/libgba/sysinclude/_syslist.h +41 -0
  496. package/src/platforms/gba/lib/libgba/sysinclude/alloca.h +21 -0
  497. package/src/platforms/gba/lib/libgba/sysinclude/ar.h +65 -0
  498. package/src/platforms/gba/lib/libgba/sysinclude/argz.h +33 -0
  499. package/src/platforms/gba/lib/libgba/sysinclude/assert.h +50 -0
  500. package/src/platforms/gba/lib/libgba/sysinclude/complex.h +150 -0
  501. package/src/platforms/gba/lib/libgba/sysinclude/cpio.h +30 -0
  502. package/src/platforms/gba/lib/libgba/sysinclude/ctype.h +183 -0
  503. package/src/platforms/gba/lib/libgba/sysinclude/devctl.h +78 -0
  504. package/src/platforms/gba/lib/libgba/sysinclude/dirent.h +85 -0
  505. package/src/platforms/gba/lib/libgba/sysinclude/elf.h +3147 -0
  506. package/src/platforms/gba/lib/libgba/sysinclude/envlock.h +15 -0
  507. package/src/platforms/gba/lib/libgba/sysinclude/envz.h +16 -0
  508. package/src/platforms/gba/lib/libgba/sysinclude/errno.h +11 -0
  509. package/src/platforms/gba/lib/libgba/sysinclude/fastmath.h +13 -0
  510. package/src/platforms/gba/lib/libgba/sysinclude/fcntl.h +1 -0
  511. package/src/platforms/gba/lib/libgba/sysinclude/fenv.h +42 -0
  512. package/src/platforms/gba/lib/libgba/sysinclude/float.h +631 -0
  513. package/src/platforms/gba/lib/libgba/sysinclude/fnmatch.h +55 -0
  514. package/src/platforms/gba/lib/libgba/sysinclude/ftw.h +66 -0
  515. package/src/platforms/gba/lib/libgba/sysinclude/getopt.h +185 -0
  516. package/src/platforms/gba/lib/libgba/sysinclude/glob.h +90 -0
  517. package/src/platforms/gba/lib/libgba/sysinclude/grp.h +86 -0
  518. package/src/platforms/gba/lib/libgba/sysinclude/iconv.h +63 -0
  519. package/src/platforms/gba/lib/libgba/sysinclude/ieeefp.h +295 -0
  520. package/src/platforms/gba/lib/libgba/sysinclude/inttypes.h +345 -0
  521. package/src/platforms/gba/lib/libgba/sysinclude/iso646.h +45 -0
  522. package/src/platforms/gba/lib/libgba/sysinclude/langinfo.h +332 -0
  523. package/src/platforms/gba/lib/libgba/sysinclude/libgen.h +37 -0
  524. package/src/platforms/gba/lib/libgba/sysinclude/limits.h +168 -0
  525. package/src/platforms/gba/lib/libgba/sysinclude/locale.h +96 -0
  526. package/src/platforms/gba/lib/libgba/sysinclude/machine/_arc4random.h +1 -0
  527. package/src/platforms/gba/lib/libgba/sysinclude/machine/_default_types.h +250 -0
  528. package/src/platforms/gba/lib/libgba/sysinclude/machine/_endian.h +39 -0
  529. package/src/platforms/gba/lib/libgba/sysinclude/machine/_time.h +3 -0
  530. package/src/platforms/gba/lib/libgba/sysinclude/machine/_types.h +8 -0
  531. package/src/platforms/gba/lib/libgba/sysinclude/machine/ansi.h +1 -0
  532. package/src/platforms/gba/lib/libgba/sysinclude/machine/endian.h +69 -0
  533. package/src/platforms/gba/lib/libgba/sysinclude/machine/fastmath.h +98 -0
  534. package/src/platforms/gba/lib/libgba/sysinclude/machine/ieee.h +127 -0
  535. package/src/platforms/gba/lib/libgba/sysinclude/machine/ieeefp.h +533 -0
  536. package/src/platforms/gba/lib/libgba/sysinclude/machine/malloc.h +8 -0
  537. package/src/platforms/gba/lib/libgba/sysinclude/machine/param.h +8 -0
  538. package/src/platforms/gba/lib/libgba/sysinclude/machine/setjmp-dj.h +43 -0
  539. package/src/platforms/gba/lib/libgba/sysinclude/machine/setjmp.h +524 -0
  540. package/src/platforms/gba/lib/libgba/sysinclude/machine/stdlib.h +8 -0
  541. package/src/platforms/gba/lib/libgba/sysinclude/machine/termios.h +1 -0
  542. package/src/platforms/gba/lib/libgba/sysinclude/machine/time.h +15 -0
  543. package/src/platforms/gba/lib/libgba/sysinclude/machine/types.h +13 -0
  544. package/src/platforms/gba/lib/libgba/sysinclude/malloc.h +173 -0
  545. package/src/platforms/gba/lib/libgba/sysinclude/math.h +645 -0
  546. package/src/platforms/gba/lib/libgba/sysinclude/memory.h +4 -0
  547. package/src/platforms/gba/lib/libgba/sysinclude/ndbm.h +91 -0
  548. package/src/platforms/gba/lib/libgba/sysinclude/newlib.h +427 -0
  549. package/src/platforms/gba/lib/libgba/sysinclude/paths.h +9 -0
  550. package/src/platforms/gba/lib/libgba/sysinclude/pthread.h +456 -0
  551. package/src/platforms/gba/lib/libgba/sysinclude/pwd.h +83 -0
  552. package/src/platforms/gba/lib/libgba/sysinclude/reent.h +190 -0
  553. package/src/platforms/gba/lib/libgba/sysinclude/regdef.h +7 -0
  554. package/src/platforms/gba/lib/libgba/sysinclude/regex.h +103 -0
  555. package/src/platforms/gba/lib/libgba/sysinclude/sched.h +112 -0
  556. package/src/platforms/gba/lib/libgba/sysinclude/search.h +64 -0
  557. package/src/platforms/gba/lib/libgba/sysinclude/setjmp.h +25 -0
  558. package/src/platforms/gba/lib/libgba/sysinclude/signal.h +35 -0
  559. package/src/platforms/gba/lib/libgba/sysinclude/spawn.h +111 -0
  560. package/src/platforms/gba/lib/libgba/sysinclude/ssp/ssp.h +76 -0
  561. package/src/platforms/gba/lib/libgba/sysinclude/ssp/stdio.h +101 -0
  562. package/src/platforms/gba/lib/libgba/sysinclude/ssp/stdlib.h +30 -0
  563. package/src/platforms/gba/lib/libgba/sysinclude/ssp/string.h +115 -0
  564. package/src/platforms/gba/lib/libgba/sysinclude/ssp/strings.h +55 -0
  565. package/src/platforms/gba/lib/libgba/sysinclude/ssp/unistd.h +93 -0
  566. package/src/platforms/gba/lib/libgba/sysinclude/ssp/wchar.h +97 -0
  567. package/src/platforms/gba/lib/libgba/sysinclude/stdarg.h +135 -0
  568. package/src/platforms/gba/lib/libgba/sysinclude/stdatomic.h +409 -0
  569. package/src/platforms/gba/lib/libgba/sysinclude/stdbool.h +51 -0
  570. package/src/platforms/gba/lib/libgba/sysinclude/stddef.h +463 -0
  571. package/src/platforms/gba/lib/libgba/sysinclude/stdint.h +466 -0
  572. package/src/platforms/gba/lib/libgba/sysinclude/stdio.h +807 -0
  573. package/src/platforms/gba/lib/libgba/sysinclude/stdio_ext.h +79 -0
  574. package/src/platforms/gba/lib/libgba/sysinclude/stdlib.h +345 -0
  575. package/src/platforms/gba/lib/libgba/sysinclude/string.h +183 -0
  576. package/src/platforms/gba/lib/libgba/sysinclude/strings.h +80 -0
  577. package/src/platforms/gba/lib/libgba/sysinclude/sys/_default_fcntl.h +241 -0
  578. package/src/platforms/gba/lib/libgba/sysinclude/sys/_intsup.h +199 -0
  579. package/src/platforms/gba/lib/libgba/sysinclude/sys/_locale.h +12 -0
  580. package/src/platforms/gba/lib/libgba/sysinclude/sys/_pthreadtypes.h +233 -0
  581. package/src/platforms/gba/lib/libgba/sysinclude/sys/_sigset.h +43 -0
  582. package/src/platforms/gba/lib/libgba/sysinclude/sys/_stdint.h +90 -0
  583. package/src/platforms/gba/lib/libgba/sysinclude/sys/_timespec.h +52 -0
  584. package/src/platforms/gba/lib/libgba/sysinclude/sys/_timeval.h +60 -0
  585. package/src/platforms/gba/lib/libgba/sysinclude/sys/_types.h +228 -0
  586. package/src/platforms/gba/lib/libgba/sysinclude/sys/_tz_structs.h +24 -0
  587. package/src/platforms/gba/lib/libgba/sysinclude/sys/cdefs.h +754 -0
  588. package/src/platforms/gba/lib/libgba/sysinclude/sys/config.h +314 -0
  589. package/src/platforms/gba/lib/libgba/sysinclude/sys/custom_file.h +2 -0
  590. package/src/platforms/gba/lib/libgba/sysinclude/sys/dir.h +10 -0
  591. package/src/platforms/gba/lib/libgba/sysinclude/sys/dirent.h +13 -0
  592. package/src/platforms/gba/lib/libgba/sysinclude/sys/endian.h +207 -0
  593. package/src/platforms/gba/lib/libgba/sysinclude/sys/errno.h +198 -0
  594. package/src/platforms/gba/lib/libgba/sysinclude/sys/fcntl.h +12 -0
  595. package/src/platforms/gba/lib/libgba/sysinclude/sys/features.h +551 -0
  596. package/src/platforms/gba/lib/libgba/sysinclude/sys/fenv.h +90 -0
  597. package/src/platforms/gba/lib/libgba/sysinclude/sys/file.h +2 -0
  598. package/src/platforms/gba/lib/libgba/sysinclude/sys/iconvnls.h +77 -0
  599. package/src/platforms/gba/lib/libgba/sysinclude/sys/iosupport.h +143 -0
  600. package/src/platforms/gba/lib/libgba/sysinclude/sys/lock.h +75 -0
  601. package/src/platforms/gba/lib/libgba/sysinclude/sys/param.h +35 -0
  602. package/src/platforms/gba/lib/libgba/sysinclude/sys/queue.h +919 -0
  603. package/src/platforms/gba/lib/libgba/sysinclude/sys/reent.h +913 -0
  604. package/src/platforms/gba/lib/libgba/sysinclude/sys/resource.h +24 -0
  605. package/src/platforms/gba/lib/libgba/sysinclude/sys/sched.h +69 -0
  606. package/src/platforms/gba/lib/libgba/sysinclude/sys/select.h +94 -0
  607. package/src/platforms/gba/lib/libgba/sysinclude/sys/signal.h +388 -0
  608. package/src/platforms/gba/lib/libgba/sysinclude/sys/stat.h +179 -0
  609. package/src/platforms/gba/lib/libgba/sysinclude/sys/statvfs.h +41 -0
  610. package/src/platforms/gba/lib/libgba/sysinclude/sys/stdio.h +27 -0
  611. package/src/platforms/gba/lib/libgba/sysinclude/sys/string.h +2 -0
  612. package/src/platforms/gba/lib/libgba/sysinclude/sys/syslimits.h +61 -0
  613. package/src/platforms/gba/lib/libgba/sysinclude/sys/time.h +448 -0
  614. package/src/platforms/gba/lib/libgba/sysinclude/sys/timeb.h +40 -0
  615. package/src/platforms/gba/lib/libgba/sysinclude/sys/times.h +32 -0
  616. package/src/platforms/gba/lib/libgba/sysinclude/sys/timespec.h +63 -0
  617. package/src/platforms/gba/lib/libgba/sysinclude/sys/tree.h +864 -0
  618. package/src/platforms/gba/lib/libgba/sysinclude/sys/types.h +228 -0
  619. package/src/platforms/gba/lib/libgba/sysinclude/sys/unistd.h +591 -0
  620. package/src/platforms/gba/lib/libgba/sysinclude/sys/utime.h +22 -0
  621. package/src/platforms/gba/lib/libgba/sysinclude/sys/wait.h +44 -0
  622. package/src/platforms/gba/lib/libgba/sysinclude/tar.h +43 -0
  623. package/src/platforms/gba/lib/libgba/sysinclude/termios.h +7 -0
  624. package/src/platforms/gba/lib/libgba/sysinclude/tgmath.h +127 -0
  625. package/src/platforms/gba/lib/libgba/sysinclude/threads.h +93 -0
  626. package/src/platforms/gba/lib/libgba/sysinclude/time.h +313 -0
  627. package/src/platforms/gba/lib/libgba/sysinclude/unctrl.h +42 -0
  628. package/src/platforms/gba/lib/libgba/sysinclude/unistd.h +6 -0
  629. package/src/platforms/gba/lib/libgba/sysinclude/utime.h +12 -0
  630. package/src/platforms/gba/lib/libgba/sysinclude/utmp.h +8 -0
  631. package/src/platforms/gba/lib/libgba/sysinclude/varargs.h +7 -0
  632. package/src/platforms/gba/lib/libgba/sysinclude/wchar.h +339 -0
  633. package/src/platforms/gba/lib/libgba/sysinclude/wctype.h +74 -0
  634. package/src/platforms/gba/lib/libgba/sysinclude/wordexp.h +53 -0
  635. package/src/platforms/gba/lib/libtonc/crtbegin.o +0 -0
  636. package/src/platforms/gba/lib/libtonc/crtend.o +0 -0
  637. package/src/platforms/gba/lib/libtonc/crti.o +0 -0
  638. package/src/platforms/gba/lib/libtonc/crtn.o +0 -0
  639. package/src/platforms/gba/lib/libtonc/gba_cart.ld +319 -0
  640. package/src/platforms/gba/lib/libtonc/gba_crt0.s +258 -0
  641. package/src/platforms/gba/lib/libtonc/include/tonc.h +72 -0
  642. package/src/platforms/gba/lib/libtonc/include/tonc_asminc.h +132 -0
  643. package/src/platforms/gba/lib/libtonc/include/tonc_bios.h +555 -0
  644. package/src/platforms/gba/lib/libtonc/include/tonc_core.h +573 -0
  645. package/src/platforms/gba/lib/libtonc/include/tonc_input.h +184 -0
  646. package/src/platforms/gba/lib/libtonc/include/tonc_irq.h +121 -0
  647. package/src/platforms/gba/lib/libtonc/include/tonc_legacy.h +481 -0
  648. package/src/platforms/gba/lib/libtonc/include/tonc_libgba.h +537 -0
  649. package/src/platforms/gba/lib/libtonc/include/tonc_math.h +692 -0
  650. package/src/platforms/gba/lib/libtonc/include/tonc_memdef.h +962 -0
  651. package/src/platforms/gba/lib/libtonc/include/tonc_memmap.h +583 -0
  652. package/src/platforms/gba/lib/libtonc/include/tonc_nocash.h +51 -0
  653. package/src/platforms/gba/lib/libtonc/include/tonc_oam.h +186 -0
  654. package/src/platforms/gba/lib/libtonc/include/tonc_surface.h +461 -0
  655. package/src/platforms/gba/lib/libtonc/include/tonc_text.h +270 -0
  656. package/src/platforms/gba/lib/libtonc/include/tonc_tte.h +748 -0
  657. package/src/platforms/gba/lib/libtonc/include/tonc_types.h +376 -0
  658. package/src/platforms/gba/lib/libtonc/include/tonc_video.h +615 -0
  659. package/src/platforms/gba/lib/libtonc/libtonc.seed.a +0 -0
  660. package/src/platforms/gba/lib/libtonc/libtonc.seed.hash +1 -0
  661. package/src/platforms/gba/lib/libtonc/src/asm/clr_blend_fast.s +72 -0
  662. package/src/platforms/gba/lib/libtonc/src/asm/clr_fade_fast.s +74 -0
  663. package/src/platforms/gba/lib/libtonc/src/asm/div_lut.s +54 -0
  664. package/src/platforms/gba/lib/libtonc/src/asm/sin_lut.s +90 -0
  665. package/src/platforms/gba/lib/libtonc/src/asm/tonc_bios.s +289 -0
  666. package/src/platforms/gba/lib/libtonc/src/asm/tonc_bios_ex.s +97 -0
  667. package/src/platforms/gba/lib/libtonc/src/asm/tonc_isr_master.s +92 -0
  668. package/src/platforms/gba/lib/libtonc/src/asm/tonc_isr_nest.s +98 -0
  669. package/src/platforms/gba/lib/libtonc/src/asm/tonc_memcpy.s +126 -0
  670. package/src/platforms/gba/lib/libtonc/src/asm/tonc_memset.s +123 -0
  671. package/src/platforms/gba/lib/libtonc/src/asm/tonc_nocash.s +73 -0
  672. package/src/platforms/gba/lib/libtonc/src/font/sys8.png +0 -0
  673. package/src/platforms/gba/lib/libtonc/src/font/sys8.s +46 -0
  674. package/src/platforms/gba/lib/libtonc/src/font/verdana10.png +0 -0
  675. package/src/platforms/gba/lib/libtonc/src/font/verdana10.s +293 -0
  676. package/src/platforms/gba/lib/libtonc/src/font/verdana9.png +0 -0
  677. package/src/platforms/gba/lib/libtonc/src/font/verdana9.s +167 -0
  678. package/src/platforms/gba/lib/libtonc/src/font/verdana9_b4.png +0 -0
  679. package/src/platforms/gba/lib/libtonc/src/font/verdana9_b4.s +545 -0
  680. package/src/platforms/gba/lib/libtonc/src/font/verdana9b.png +0 -0
  681. package/src/platforms/gba/lib/libtonc/src/font/verdana9b.s +167 -0
  682. package/src/platforms/gba/lib/libtonc/src/font/verdana9i.png +0 -0
  683. package/src/platforms/gba/lib/libtonc/src/font/verdana9i.s +167 -0
  684. package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_bitmap.c +289 -0
  685. package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text.c +81 -0
  686. package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text_bm.c +244 -0
  687. package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text_map.c +122 -0
  688. package/src/platforms/gba/lib/libtonc/src/pre1.3/tonc_text_oam.c +113 -0
  689. package/src/platforms/gba/lib/libtonc/src/pre1.3/toncfont.s +43 -0
  690. package/src/platforms/gba/lib/libtonc/src/tonc_bg.c +61 -0
  691. package/src/platforms/gba/lib/libtonc/src/tonc_bg_affine.c +112 -0
  692. package/src/platforms/gba/lib/libtonc/src/tonc_bmp16.c +240 -0
  693. package/src/platforms/gba/lib/libtonc/src/tonc_bmp8.c +314 -0
  694. package/src/platforms/gba/lib/libtonc/src/tonc_color.c +368 -0
  695. package/src/platforms/gba/lib/libtonc/src/tonc_core.c +237 -0
  696. package/src/platforms/gba/lib/libtonc/src/tonc_input.c +118 -0
  697. package/src/platforms/gba/lib/libtonc/src/tonc_irq.c +271 -0
  698. package/src/platforms/gba/lib/libtonc/src/tonc_math.c +54 -0
  699. package/src/platforms/gba/lib/libtonc/src/tonc_oam.c +76 -0
  700. package/src/platforms/gba/lib/libtonc/src/tonc_obj_affine.c +146 -0
  701. package/src/platforms/gba/lib/libtonc/src/tonc_sbmp16.c +369 -0
  702. package/src/platforms/gba/lib/libtonc/src/tonc_sbmp8.c +405 -0
  703. package/src/platforms/gba/lib/libtonc/src/tonc_schr4c.c +588 -0
  704. package/src/platforms/gba/lib/libtonc/src/tonc_schr4r.c +462 -0
  705. package/src/platforms/gba/lib/libtonc/src/tonc_surface.c +105 -0
  706. package/src/platforms/gba/lib/libtonc/src/tonc_video.c +33 -0
  707. package/src/platforms/gba/lib/libtonc/src/tte/ase_drawg.c +83 -0
  708. package/src/platforms/gba/lib/libtonc/src/tte/bmp16_drawg.c +72 -0
  709. package/src/platforms/gba/lib/libtonc/src/tte/bmp16_drawg_b1cs.c +92 -0
  710. package/src/platforms/gba/lib/libtonc/src/tte/bmp8_drawg.c +71 -0
  711. package/src/platforms/gba/lib/libtonc/src/tte/bmp8_drawg_b1cs.c +104 -0
  712. package/src/platforms/gba/lib/libtonc/src/tte/bmp8_drawg_b1cts_fast.s +115 -0
  713. package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b1cts.c +76 -0
  714. package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b1cts_fast.s +128 -0
  715. package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b4cts.c +67 -0
  716. package/src/platforms/gba/lib/libtonc/src/tte/chr4c_drawg_b4cts_fast.s +127 -0
  717. package/src/platforms/gba/lib/libtonc/src/tte/chr4r_drawg_b1cts.c +80 -0
  718. package/src/platforms/gba/lib/libtonc/src/tte/chr4r_drawg_b1cts_fast.s +145 -0
  719. package/src/platforms/gba/lib/libtonc/src/tte/obj_drawg.c +61 -0
  720. package/src/platforms/gba/lib/libtonc/src/tte/se_drawg.c +110 -0
  721. package/src/platforms/gba/lib/libtonc/src/tte/tte_init_ase.c +87 -0
  722. package/src/platforms/gba/lib/libtonc/src/tte/tte_init_bmp.c +118 -0
  723. package/src/platforms/gba/lib/libtonc/src/tte/tte_init_chr4c.c +86 -0
  724. package/src/platforms/gba/lib/libtonc/src/tte/tte_init_chr4r.c +87 -0
  725. package/src/platforms/gba/lib/libtonc/src/tte/tte_init_obj.c +84 -0
  726. package/src/platforms/gba/lib/libtonc/src/tte/tte_init_se.c +96 -0
  727. package/src/platforms/gba/lib/libtonc/src/tte/tte_iohook.c +264 -0
  728. package/src/platforms/gba/lib/libtonc/src/tte/tte_main.c +756 -0
  729. package/src/platforms/gba/lib/libtonc/src/tte/tte_types.s +119 -0
  730. package/src/platforms/gba/lib/maxmod/LICENSE-MAXMOD +23 -0
  731. package/src/platforms/gba/lib/maxmod/asm_include/mp_defs.inc +117 -0
  732. package/src/platforms/gba/lib/maxmod/asm_include/mp_format_mas.inc +108 -0
  733. package/src/platforms/gba/lib/maxmod/asm_include/mp_macros.inc +195 -0
  734. package/src/platforms/gba/lib/maxmod/asm_include/mp_mas.inc +40 -0
  735. package/src/platforms/gba/lib/maxmod/asm_include/mp_mas_structs.inc +189 -0
  736. package/src/platforms/gba/lib/maxmod/asm_include/mp_mixer_ds.inc +46 -0
  737. package/src/platforms/gba/lib/maxmod/asm_include/mp_mixer_gba.inc +42 -0
  738. package/src/platforms/gba/lib/maxmod/asm_include/swi_gba.inc +23 -0
  739. package/src/platforms/gba/lib/maxmod/include/maxmod.h +412 -0
  740. package/src/platforms/gba/lib/maxmod/include/mm_types.h +333 -0
  741. package/src/platforms/gba/lib/maxmod/maxmod.seed.a +0 -0
  742. package/src/platforms/gba/lib/maxmod/maxmod.seed.hash +1 -0
  743. package/src/platforms/gba/lib/maxmod/music/chiptune.xm +0 -0
  744. package/src/platforms/gba/lib/maxmod/music/chiptune_soundbank.bin +0 -0
  745. package/src/platforms/gba/lib/maxmod/music/chiptune_soundbank.h +4 -0
  746. package/src/platforms/gba/lib/maxmod/music/make_chiptune_xm.js +203 -0
  747. package/src/platforms/gba/lib/maxmod/source/mm_effect.s +767 -0
  748. package/src/platforms/gba/lib/maxmod/source/mm_main.s +115 -0
  749. package/src/platforms/gba/lib/maxmod/source/mm_mas.s +4990 -0
  750. package/src/platforms/gba/lib/maxmod/source/mm_mas_arm.s +612 -0
  751. package/src/platforms/gba/lib/maxmod/source_gba/mm_init_default.s +98 -0
  752. package/src/platforms/gba/lib/maxmod/source_gba/mm_main_gba.s +292 -0
  753. package/src/platforms/gba/lib/maxmod/source_gba/mm_mixer_gba.s +1367 -0
  754. package/src/platforms/gba/lib/sysbase/gba_iosupport.c +138 -0
  755. package/src/platforms/gbc/MENTAL_MODEL.md +165 -0
  756. package/src/platforms/gbc/TROUBLESHOOTING.md +142 -0
  757. package/src/platforms/gbc/UPSTREAM_SOURCES.md +60 -0
  758. package/src/platforms/gbc/lib/c/LICENSE-HUGEDRIVER +25 -0
  759. package/src/platforms/gbc/lib/c/README.md +120 -0
  760. package/src/platforms/gbc/lib/c/SDCC_GOTCHAS.md +189 -0
  761. package/src/platforms/gbc/lib/c/gb_crt0.s +163 -0
  762. package/src/platforms/gbc/lib/c/gb_hardware.h +113 -0
  763. package/src/platforms/gbc/lib/c/gb_runtime.c +284 -0
  764. package/src/platforms/gbc/lib/c/gb_runtime.h +145 -0
  765. package/src/platforms/gbc/lib/c/hUGEDriver.c +191 -0
  766. package/src/platforms/gbc/lib/c/hUGEDriver.h +95 -0
  767. package/src/platforms/gbc/lib/c/hUGEDriver.upstream.asm +1908 -0
  768. package/src/platforms/gbc/lib/c/lcd_init.c +19 -0
  769. package/src/platforms/gbc/lib/c/patch-header.js +154 -0
  770. package/src/platforms/gbc/lib/c/song_data.c +88 -0
  771. package/src/platforms/gbc/lib/c/unroll.h +52 -0
  772. package/src/platforms/gbc/lib/c/wait_vblank.c +14 -0
  773. package/src/platforms/genesis/MENTAL_MODEL.md +223 -0
  774. package/src/platforms/genesis/TROUBLESHOOTING.md +193 -0
  775. package/src/platforms/genesis/UPSTREAM_SOURCES.md +52 -0
  776. package/src/platforms/genesis/image-to-tilemap.js +333 -0
  777. package/src/platforms/genesis/lib/README.md +157 -0
  778. package/src/platforms/genesis/lib/c/crtbegin.o +0 -0
  779. package/src/platforms/genesis/lib/c/crtend.o +0 -0
  780. package/src/platforms/genesis/lib/c/genesis.ld +44 -0
  781. package/src/platforms/genesis/lib/c/genesis_sfx.c +51 -0
  782. package/src/platforms/genesis/lib/c/genesis_sfx.h +49 -0
  783. package/src/platforms/genesis/lib/c/libc.a +0 -0
  784. package/src/platforms/genesis/lib/c/libgcc.a +0 -0
  785. package/src/platforms/genesis/lib/c/libm.a +0 -0
  786. package/src/platforms/genesis/lib/c/sega.s +71 -0
  787. package/src/platforms/genesis/lib/header.s +96 -0
  788. package/src/platforms/genesis/lib/nmi_safe.s +79 -0
  789. package/src/platforms/genesis/lib/pad_read.s +104 -0
  790. package/src/platforms/genesis/lib/sgdk/COPYING.RUNTIME +73 -0
  791. package/src/platforms/genesis/lib/sgdk/LICENSE +12 -0
  792. package/src/platforms/genesis/lib/sgdk/include/asm.h +52 -0
  793. package/src/platforms/genesis/lib/sgdk/include/asm_mac.i +9 -0
  794. package/src/platforms/genesis/lib/sgdk/include/bmp.h +690 -0
  795. package/src/platforms/genesis/lib/sgdk/include/config.h +208 -0
  796. package/src/platforms/genesis/lib/sgdk/include/dma.h +542 -0
  797. package/src/platforms/genesis/lib/sgdk/include/ext/console.h +387 -0
  798. package/src/platforms/genesis/lib/sgdk/include/ext/everdrive.h +116 -0
  799. package/src/platforms/genesis/lib/sgdk/include/ext/fat16.h +84 -0
  800. package/src/platforms/genesis/lib/sgdk/include/ext/flash-save/flash.h +164 -0
  801. package/src/platforms/genesis/lib/sgdk/include/ext/flash-save/saveman.h +177 -0
  802. package/src/platforms/genesis/lib/sgdk/include/ext/link_cable.h +316 -0
  803. package/src/platforms/genesis/lib/sgdk/include/ext/minimusic/minimus.h +29 -0
  804. package/src/platforms/genesis/lib/sgdk/include/ext/mw/16c550.h +221 -0
  805. package/src/platforms/genesis/lib/sgdk/include/ext/mw/comm.h +93 -0
  806. package/src/platforms/genesis/lib/sgdk/include/ext/mw/gamejolt.h +541 -0
  807. package/src/platforms/genesis/lib/sgdk/include/ext/mw/jsmn.h +471 -0
  808. package/src/platforms/genesis/lib/sgdk/include/ext/mw/json.h +122 -0
  809. package/src/platforms/genesis/lib/sgdk/include/ext/mw/lsd.h +172 -0
  810. package/src/platforms/genesis/lib/sgdk/include/ext/mw/megawifi.h +984 -0
  811. package/src/platforms/genesis/lib/sgdk/include/ext/mw/mw-msg.h +392 -0
  812. package/src/platforms/genesis/lib/sgdk/include/ext/mw/ssf_ed_pro.h +38 -0
  813. package/src/platforms/genesis/lib/sgdk/include/ext/mw/ssf_ed_x7.h +73 -0
  814. package/src/platforms/genesis/lib/sgdk/include/ext/serial/buffer.h +8 -0
  815. package/src/platforms/genesis/lib/sgdk/include/ext/serial/serial.h +133 -0
  816. package/src/platforms/genesis/lib/sgdk/include/ext/stb/stb_sprintf.h +1864 -0
  817. package/src/platforms/genesis/lib/sgdk/include/genesis.h +92 -0
  818. package/src/platforms/genesis/lib/sgdk/include/joy.h +482 -0
  819. package/src/platforms/genesis/lib/sgdk/include/kdebug.h +21 -0
  820. package/src/platforms/genesis/lib/sgdk/include/map.h +409 -0
  821. package/src/platforms/genesis/lib/sgdk/include/mapper.h +186 -0
  822. package/src/platforms/genesis/lib/sgdk/include/maths.h +1071 -0
  823. package/src/platforms/genesis/lib/sgdk/include/maths3D.h +480 -0
  824. package/src/platforms/genesis/lib/sgdk/include/memory.h +346 -0
  825. package/src/platforms/genesis/lib/sgdk/include/memory_base.h +37 -0
  826. package/src/platforms/genesis/lib/sgdk/include/object.h +171 -0
  827. package/src/platforms/genesis/lib/sgdk/include/pal.h +500 -0
  828. package/src/platforms/genesis/lib/sgdk/include/pool.h +171 -0
  829. package/src/platforms/genesis/lib/sgdk/include/psg.h +153 -0
  830. package/src/platforms/genesis/lib/sgdk/include/snd/pcm/snd_dpcm2.h +79 -0
  831. package/src/platforms/genesis/lib/sgdk/include/snd/pcm/snd_pcm.h +98 -0
  832. package/src/platforms/genesis/lib/sgdk/include/snd/pcm/snd_pcm4.h +125 -0
  833. package/src/platforms/genesis/lib/sgdk/include/snd/pcm/tab_vol.h +6 -0
  834. package/src/platforms/genesis/lib/sgdk/include/snd/smp_null.h +6 -0
  835. package/src/platforms/genesis/lib/sgdk/include/snd/smp_null_dpcm.h +6 -0
  836. package/src/platforms/genesis/lib/sgdk/include/snd/sound.h +70 -0
  837. package/src/platforms/genesis/lib/sgdk/include/snd/xgm.h +399 -0
  838. package/src/platforms/genesis/lib/sgdk/include/snd/xgm2.h +389 -0
  839. package/src/platforms/genesis/lib/sgdk/include/snd/z80_def.i80 +41 -0
  840. package/src/platforms/genesis/lib/sgdk/include/snd/z80_fct.i80 +83 -0
  841. package/src/platforms/genesis/lib/sgdk/include/snd/z80_mac.i80 +1476 -0
  842. package/src/platforms/genesis/lib/sgdk/include/sprite_eng.h +1095 -0
  843. package/src/platforms/genesis/lib/sgdk/include/sprite_eng_legacy.h +1030 -0
  844. package/src/platforms/genesis/lib/sgdk/include/sram.h +110 -0
  845. package/src/platforms/genesis/lib/sgdk/include/string.h +349 -0
  846. package/src/platforms/genesis/lib/sgdk/include/sys.h +511 -0
  847. package/src/platforms/genesis/lib/sgdk/include/tab_cnv.h +19 -0
  848. package/src/platforms/genesis/lib/sgdk/include/task.h +77 -0
  849. package/src/platforms/genesis/lib/sgdk/include/task_cst.h +33 -0
  850. package/src/platforms/genesis/lib/sgdk/include/timer.h +132 -0
  851. package/src/platforms/genesis/lib/sgdk/include/tools.h +450 -0
  852. package/src/platforms/genesis/lib/sgdk/include/types.h +320 -0
  853. package/src/platforms/genesis/lib/sgdk/include/vdp.h +1150 -0
  854. package/src/platforms/genesis/lib/sgdk/include/vdp_bg.h +723 -0
  855. package/src/platforms/genesis/lib/sgdk/include/vdp_pal.h +101 -0
  856. package/src/platforms/genesis/lib/sgdk/include/vdp_spr.h +448 -0
  857. package/src/platforms/genesis/lib/sgdk/include/vdp_tile.h +1136 -0
  858. package/src/platforms/genesis/lib/sgdk/include/vram.h +270 -0
  859. package/src/platforms/genesis/lib/sgdk/include/ym2612.h +87 -0
  860. package/src/platforms/genesis/lib/sgdk/include/z80_ctrl.h +420 -0
  861. package/src/platforms/genesis/lib/sgdk/libmd.seed.a +0 -0
  862. package/src/platforms/genesis/lib/sgdk/libmd.seed.hash +1 -0
  863. package/src/platforms/genesis/lib/sgdk/md.ld +120 -0
  864. package/src/platforms/genesis/lib/sgdk/music/demo.vgm +0 -0
  865. package/src/platforms/genesis/lib/sgdk/music/demo.xgc +0 -0
  866. package/src/platforms/genesis/lib/sgdk/music/demo.xgm +0 -0
  867. package/src/platforms/genesis/lib/sgdk/res/image/font_default.png +0 -0
  868. package/src/platforms/genesis/lib/sgdk/res/image/sgdk_logo.png +0 -0
  869. package/src/platforms/genesis/lib/sgdk/res/libres.h +10 -0
  870. package/src/platforms/genesis/lib/sgdk/res/libres.res +5 -0
  871. package/src/platforms/genesis/lib/sgdk/res/libres.s +166 -0
  872. package/src/platforms/genesis/lib/sgdk/res/sound/stop_xgm.bin +0 -0
  873. package/src/platforms/genesis/lib/sgdk/rom_header.c +33 -0
  874. package/src/platforms/genesis/lib/sgdk/sega.preprocessed.s +364 -0
  875. package/src/platforms/genesis/lib/sgdk/sega.s +365 -0
  876. package/src/platforms/genesis/lib/sgdk/src/bmp.c +1539 -0
  877. package/src/platforms/genesis/lib/sgdk/src/bmp_a.s +3477 -0
  878. package/src/platforms/genesis/lib/sgdk/src/boot/rom_header.c +33 -0
  879. package/src/platforms/genesis/lib/sgdk/src/boot/sega.s +365 -0
  880. package/src/platforms/genesis/lib/sgdk/src/dma.c +782 -0
  881. package/src/platforms/genesis/lib/sgdk/src/dma_a.s +23 -0
  882. package/src/platforms/genesis/lib/sgdk/src/error_a.s +376 -0
  883. package/src/platforms/genesis/lib/sgdk/src/ext/console.c +490 -0
  884. package/src/platforms/genesis/lib/sgdk/src/ext/everdrive.c +285 -0
  885. package/src/platforms/genesis/lib/sgdk/src/ext/fat16.c +610 -0
  886. package/src/platforms/genesis/lib/sgdk/src/ext/flash-save/README.md +112 -0
  887. package/src/platforms/genesis/lib/sgdk/src/ext/flash-save/flash.c +300 -0
  888. package/src/platforms/genesis/lib/sgdk/src/ext/flash-save/saveman.c +641 -0
  889. package/src/platforms/genesis/lib/sgdk/src/ext/link_cable.c +1758 -0
  890. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/CHANGELOG.md +31 -0
  891. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/LICENSE.txt +17 -0
  892. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/README.md +18 -0
  893. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/data.z80 +148 -0
  894. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/define.z80 +173 -0
  895. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/doc/api-c.md +80 -0
  896. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/doc/format.md +132 -0
  897. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/doc/teradrive.md +33 -0
  898. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/fm.z80 +363 -0
  899. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/main.z80 +433 -0
  900. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/minimus.c +129 -0
  901. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/minimus_drv.s80 +17 -0
  902. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/psg.z80 +231 -0
  903. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/track.z80 +398 -0
  904. package/src/platforms/genesis/lib/sgdk/src/ext/minimusic/util.z80 +98 -0
  905. package/src/platforms/genesis/lib/sgdk/src/ext/mw/16c550.c +84 -0
  906. package/src/platforms/genesis/lib/sgdk/src/ext/mw/README.md +849 -0
  907. package/src/platforms/genesis/lib/sgdk/src/ext/mw/comm.c +141 -0
  908. package/src/platforms/genesis/lib/sgdk/src/ext/mw/gamejolt.c +758 -0
  909. package/src/platforms/genesis/lib/sgdk/src/ext/mw/json.c +153 -0
  910. package/src/platforms/genesis/lib/sgdk/src/ext/mw/lsd.c +364 -0
  911. package/src/platforms/genesis/lib/sgdk/src/ext/mw/megawifi.c +1501 -0
  912. package/src/platforms/genesis/lib/sgdk/src/ext/mw/ssf_ed_pro.c +98 -0
  913. package/src/platforms/genesis/lib/sgdk/src/ext/mw/ssf_ed_x7.c +67 -0
  914. package/src/platforms/genesis/lib/sgdk/src/ext/serial/buffer.c +69 -0
  915. package/src/platforms/genesis/lib/sgdk/src/ext/serial/serial.c +158 -0
  916. package/src/platforms/genesis/lib/sgdk/src/joy.c +1361 -0
  917. package/src/platforms/genesis/lib/sgdk/src/kdebug.s +109 -0
  918. package/src/platforms/genesis/lib/sgdk/src/map.c +1915 -0
  919. package/src/platforms/genesis/lib/sgdk/src/mapper.c +280 -0
  920. package/src/platforms/genesis/lib/sgdk/src/maths.c +878 -0
  921. package/src/platforms/genesis/lib/sgdk/src/maths3D.c +480 -0
  922. package/src/platforms/genesis/lib/sgdk/src/maths3D_a.s +205 -0
  923. package/src/platforms/genesis/lib/sgdk/src/memory.c +760 -0
  924. package/src/platforms/genesis/lib/sgdk/src/memory_a.s +306 -0
  925. package/src/platforms/genesis/lib/sgdk/src/object.c +111 -0
  926. package/src/platforms/genesis/lib/sgdk/src/pal.c +484 -0
  927. package/src/platforms/genesis/lib/sgdk/src/pool.c +234 -0
  928. package/src/platforms/genesis/lib/sgdk/src/psg.c +82 -0
  929. package/src/platforms/genesis/lib/sgdk/src/snd/drv_null.s80 +27 -0
  930. package/src/platforms/genesis/lib/sgdk/src/snd/drv_xgm.s80 +3037 -0
  931. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/drv_dpcm2.s80 +984 -0
  932. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/drv_pcm.s80 +592 -0
  933. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/drv_pcm4.s80 +699 -0
  934. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/snd_dpcm2.c +172 -0
  935. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/snd_pcm.c +152 -0
  936. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/snd_pcm4.c +213 -0
  937. package/src/platforms/genesis/lib/sgdk/src/snd/pcm/tab_vol.c +277 -0
  938. package/src/platforms/genesis/lib/sgdk/src/snd/smp_null.s +22 -0
  939. package/src/platforms/genesis/lib/sgdk/src/snd/smp_null_dpcm.s +15 -0
  940. package/src/platforms/genesis/lib/sgdk/src/snd/sound.c +33 -0
  941. package/src/platforms/genesis/lib/sgdk/src/snd/xgm.c +683 -0
  942. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2.s80 +993 -0
  943. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_fct.i80 +611 -0
  944. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_mac.i80 +133 -0
  945. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_pcm_fct.i80 +114 -0
  946. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_pcm_mac.i80 +1444 -0
  947. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_psg_fct.i80 +491 -0
  948. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_psg_mac.i80 +43 -0
  949. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_ym_fct.i80 +1664 -0
  950. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2/drv_xgm2_ym_mac.i80 +295 -0
  951. package/src/platforms/genesis/lib/sgdk/src/snd/xgm2.c +1083 -0
  952. package/src/platforms/genesis/lib/sgdk/src/sprite_eng.c +2256 -0
  953. package/src/platforms/genesis/lib/sgdk/src/sprite_eng_legacy.c +2309 -0
  954. package/src/platforms/genesis/lib/sgdk/src/sram.c +30 -0
  955. package/src/platforms/genesis/lib/sgdk/src/sram_a.s +41 -0
  956. package/src/platforms/genesis/lib/sgdk/src/string.c +720 -0
  957. package/src/platforms/genesis/lib/sgdk/src/sys.c +1053 -0
  958. package/src/platforms/genesis/lib/sgdk/src/sys_a.s +74 -0
  959. package/src/platforms/genesis/lib/sgdk/src/tab_cnv.c +129 -0
  960. package/src/platforms/genesis/lib/sgdk/src/tab_log10.c +8201 -0
  961. package/src/platforms/genesis/lib/sgdk/src/tab_log2.c +8201 -0
  962. package/src/platforms/genesis/lib/sgdk/src/tab_sin.c +2058 -0
  963. package/src/platforms/genesis/lib/sgdk/src/tab_sqrt.c +8201 -0
  964. package/src/platforms/genesis/lib/sgdk/src/task.s +148 -0
  965. package/src/platforms/genesis/lib/sgdk/src/timer.c +201 -0
  966. package/src/platforms/genesis/lib/sgdk/src/tools.c +1299 -0
  967. package/src/platforms/genesis/lib/sgdk/src/tools_a.s +979 -0
  968. package/src/platforms/genesis/lib/sgdk/src/types.c +18 -0
  969. package/src/platforms/genesis/lib/sgdk/src/vdp.c +1060 -0
  970. package/src/platforms/genesis/lib/sgdk/src/vdp_bg.c +511 -0
  971. package/src/platforms/genesis/lib/sgdk/src/vdp_spr.c +322 -0
  972. package/src/platforms/genesis/lib/sgdk/src/vdp_tile.c +1011 -0
  973. package/src/platforms/genesis/lib/sgdk/src/vdp_tile_a.s +68 -0
  974. package/src/platforms/genesis/lib/sgdk/src/vram.c +273 -0
  975. package/src/platforms/genesis/lib/sgdk/src/ym2612.c +175 -0
  976. package/src/platforms/genesis/lib/sgdk/src/z80_ctrl.c +334 -0
  977. package/src/platforms/genesis/lib/sprite_table.s +129 -0
  978. package/src/platforms/genesis/lib/vblank_wait.s +73 -0
  979. package/src/platforms/genesis/lib/vdp_init.s +85 -0
  980. package/src/platforms/genesis/lib/wram.s +88 -0
  981. package/src/platforms/genesis/lib/z80_bootstrap.s +102 -0
  982. package/src/platforms/genesis/vdp.js +495 -0
  983. package/src/platforms/gg/MENTAL_MODEL.md +155 -0
  984. package/src/platforms/gg/TROUBLESHOOTING.md +91 -0
  985. package/src/platforms/gg/UPSTREAM_SOURCES.md +36 -0
  986. package/src/platforms/gg/lib/c/gg_crt0.s +112 -0
  987. package/src/platforms/gg/lib/c/gg_hw.h +62 -0
  988. package/src/platforms/gg/lib/c/gg_music.c +155 -0
  989. package/src/platforms/gg/lib/c/gg_music.h +89 -0
  990. package/src/platforms/gg/lib/c/gg_sfx.c +82 -0
  991. package/src/platforms/gg/lib/c/gg_sfx.h +40 -0
  992. package/src/platforms/gg/lib/c/joypad_read.c +22 -0
  993. package/src/platforms/gg/lib/c/load_palette.c +20 -0
  994. package/src/platforms/gg/lib/c/load_tiles.c +32 -0
  995. package/src/platforms/gg/lib/c/sprite_table.c +60 -0
  996. package/src/platforms/gg/lib/c/vblank_wait.c +10 -0
  997. package/src/platforms/gg/lib/c/vdp_init.c +58 -0
  998. package/src/platforms/index.js +7 -0
  999. package/src/platforms/lynx/MENTAL_MODEL.md +231 -0
  1000. package/src/platforms/lynx/TROUBLESHOOTING.md +105 -0
  1001. package/src/platforms/lynx/UPSTREAM_SOURCES.md +66 -0
  1002. package/src/platforms/lynx/lib/c/lynx_music.c +63 -0
  1003. package/src/platforms/lynx/lib/c/lynx_music.h +16 -0
  1004. package/src/platforms/lynx/lib/c/lynx_sfx.c +147 -0
  1005. package/src/platforms/lynx/lib/c/lynx_sfx.h +59 -0
  1006. package/src/platforms/lynx/lib/cc65-src/bllhdr.s +18 -0
  1007. package/src/platforms/lynx/lib/cc65-src/bootldr.s +195 -0
  1008. package/src/platforms/lynx/lib/cc65-src/cgetc.s +69 -0
  1009. package/src/platforms/lynx/lib/cc65-src/clock.s +87 -0
  1010. package/src/platforms/lynx/lib/cc65-src/crt0.s +135 -0
  1011. package/src/platforms/lynx/lib/cc65-src/defdir.s +29 -0
  1012. package/src/platforms/lynx/lib/cc65-src/eeprom.s +255 -0
  1013. package/src/platforms/lynx/lib/cc65-src/eeprom46.s +204 -0
  1014. package/src/platforms/lynx/lib/cc65-src/eeprom66.s +227 -0
  1015. package/src/platforms/lynx/lib/cc65-src/eeprom86.s +236 -0
  1016. package/src/platforms/lynx/lib/cc65-src/exec.s +34 -0
  1017. package/src/platforms/lynx/lib/cc65-src/exehdr.s +27 -0
  1018. package/src/platforms/lynx/lib/cc65-src/extzp.inc +23 -0
  1019. package/src/platforms/lynx/lib/cc65-src/extzp.s +30 -0
  1020. package/src/platforms/lynx/lib/cc65-src/irq.s +45 -0
  1021. package/src/platforms/lynx/lib/cc65-src/joy/lynx-stdjoy.s +93 -0
  1022. package/src/platforms/lynx/lib/cc65-src/joy_stat_stddrv.s +14 -0
  1023. package/src/platforms/lynx/lib/cc65-src/kbhit.s +56 -0
  1024. package/src/platforms/lynx/lib/cc65-src/libref.s +9 -0
  1025. package/src/platforms/lynx/lib/cc65-src/load.s +41 -0
  1026. package/src/platforms/lynx/lib/cc65-src/lseek.s +58 -0
  1027. package/src/platforms/lynx/lib/cc65-src/lynx-cart.s +98 -0
  1028. package/src/platforms/lynx/lib/cc65-src/lynx-snd.s +1270 -0
  1029. package/src/platforms/lynx/lib/cc65-src/mainargs.s +24 -0
  1030. package/src/platforms/lynx/lib/cc65-src/open.s +136 -0
  1031. package/src/platforms/lynx/lib/cc65-src/oserror.s +14 -0
  1032. package/src/platforms/lynx/lib/cc65-src/read.s +44 -0
  1033. package/src/platforms/lynx/lib/cc65-src/ser/lynx-comlynx.s +404 -0
  1034. package/src/platforms/lynx/lib/cc65-src/ser_stat_stddrv.s +14 -0
  1035. package/src/platforms/lynx/lib/cc65-src/sysuname.s +39 -0
  1036. package/src/platforms/lynx/lib/cc65-src/tgi/lynx-160-102-16.s +1075 -0
  1037. package/src/platforms/lynx/lib/cc65-src/tgi_colors.s +9 -0
  1038. package/src/platforms/lynx/lib/cc65-src/tgi_irq.s +11 -0
  1039. package/src/platforms/lynx/lib/cc65-src/tgi_stat_stddrv.s +14 -0
  1040. package/src/platforms/lynx/lib/cc65-src/tgi_stddrv.s +13 -0
  1041. package/src/platforms/lynx/lib/cc65-src/uploader.s +81 -0
  1042. package/src/platforms/nes/MENTAL_MODEL.md +301 -0
  1043. package/src/platforms/nes/TROUBLESHOOTING.md +321 -0
  1044. package/src/platforms/nes/UPSTREAM_SOURCES.md +31 -0
  1045. package/src/platforms/nes/image-to-chr.js +195 -0
  1046. package/src/platforms/nes/image-to-tilemap.js +415 -0
  1047. package/src/platforms/nes/lib/README.md +40 -0
  1048. package/src/platforms/nes/lib/asm/LICENSE-FAMITONE +40 -0
  1049. package/src/platforms/nes/lib/asm/chr_ram_header.s +32 -0
  1050. package/src/platforms/nes/lib/asm/famitone2.s +1258 -0
  1051. package/src/platforms/nes/lib/asm/famitone_bridge.s +50 -0
  1052. package/src/platforms/nes/lib/asm/music_data.s +238 -0
  1053. package/src/platforms/nes/lib/c/chr_ram_runtime_hello_sprite.c +81 -0
  1054. package/src/platforms/nes/lib/c/chr_ram_runtime_hud_row.c +101 -0
  1055. package/src/platforms/nes/lib/c/nes_runtime.c +347 -0
  1056. package/src/platforms/nes/lib/c/nes_runtime.h +153 -0
  1057. package/src/platforms/nes/lib/c/nmi_handler.c +51 -0
  1058. package/src/platforms/nes/lib/c/nmi_trampoline.s +25 -0
  1059. package/src/platforms/nes/lib/cc65-src/Makefile.inc +9 -0
  1060. package/src/platforms/nes/lib/cc65-src/_scrsize.s +24 -0
  1061. package/src/platforms/nes/lib/cc65-src/cclear.s +29 -0
  1062. package/src/platforms/nes/lib/cc65-src/chline.s +31 -0
  1063. package/src/platforms/nes/lib/cc65-src/clock.s +31 -0
  1064. package/src/platforms/nes/lib/cc65-src/clrscr.s +72 -0
  1065. package/src/platforms/nes/lib/cc65-src/color.s +68 -0
  1066. package/src/platforms/nes/lib/cc65-src/cpeekc.s +37 -0
  1067. package/src/platforms/nes/lib/cc65-src/cpeekcolor.s +8 -0
  1068. package/src/platforms/nes/lib/cc65-src/cpeekrevers.s +37 -0
  1069. package/src/platforms/nes/lib/cc65-src/cputc.s +95 -0
  1070. package/src/platforms/nes/lib/cc65-src/crt0.s +180 -0
  1071. package/src/platforms/nes/lib/cc65-src/cvline.s +31 -0
  1072. package/src/platforms/nes/lib/cc65-src/get_tv.s +37 -0
  1073. package/src/platforms/nes/lib/cc65-src/gotox.s +21 -0
  1074. package/src/platforms/nes/lib/cc65-src/gotoxy.s +22 -0
  1075. package/src/platforms/nes/lib/cc65-src/gotoy.s +22 -0
  1076. package/src/platforms/nes/lib/cc65-src/irq.s +19 -0
  1077. package/src/platforms/nes/lib/cc65-src/joy/nes-stdjoy.s +102 -0
  1078. package/src/platforms/nes/lib/cc65-src/joy_stat_stddrv.s +14 -0
  1079. package/src/platforms/nes/lib/cc65-src/libref.s +9 -0
  1080. package/src/platforms/nes/lib/cc65-src/mainargs.s +24 -0
  1081. package/src/platforms/nes/lib/cc65-src/neschar.s +4616 -0
  1082. package/src/platforms/nes/lib/cc65-src/ppu.s +158 -0
  1083. package/src/platforms/nes/lib/cc65-src/ppubuf.s +117 -0
  1084. package/src/platforms/nes/lib/cc65-src/randomize.s +18 -0
  1085. package/src/platforms/nes/lib/cc65-src/revers.s +27 -0
  1086. package/src/platforms/nes/lib/cc65-src/setcursor.s +37 -0
  1087. package/src/platforms/nes/lib/cc65-src/sysuname.s +39 -0
  1088. package/src/platforms/nes/lib/cc65-src/tgi/nes-64-56-2.s +480 -0
  1089. package/src/platforms/nes/lib/cc65-src/tgi_stat_stddrv.s +14 -0
  1090. package/src/platforms/nes/lib/cc65-src/tgi_stddrv.s +13 -0
  1091. package/src/platforms/nes/lib/cc65-src/waitvsync.s +18 -0
  1092. package/src/platforms/nes/lib/cc65-src/wherex.s +19 -0
  1093. package/src/platforms/nes/lib/cc65-src/wherey.s +19 -0
  1094. package/src/platforms/nes/lib/clear_nametable.s +38 -0
  1095. package/src/platforms/nes/lib/clear_oam.s +18 -0
  1096. package/src/platforms/nes/lib/load_palette.s +31 -0
  1097. package/src/platforms/nes/lib/nmi_safe.s +65 -0
  1098. package/src/platforms/nes/lib/oam_dma.s +16 -0
  1099. package/src/platforms/nes/lib/read_pad.s +46 -0
  1100. package/src/platforms/nes/lib/reset.s +46 -0
  1101. package/src/platforms/nes/lib/sprite_table_populate.s +75 -0
  1102. package/src/platforms/nes/lib/wait_vblank.s +12 -0
  1103. package/src/platforms/nes/palette.js +39 -0
  1104. package/src/platforms/nes/ppu.js +372 -0
  1105. package/src/platforms/sms/MENTAL_MODEL.md +267 -0
  1106. package/src/platforms/sms/TROUBLESHOOTING.md +124 -0
  1107. package/src/platforms/sms/UPSTREAM_SOURCES.md +29 -0
  1108. package/src/platforms/sms/image-to-tilemap.js +260 -0
  1109. package/src/platforms/sms/lib/README.md +117 -0
  1110. package/src/platforms/sms/lib/c/joypad_read.c +33 -0
  1111. package/src/platforms/sms/lib/c/load_palette.c +24 -0
  1112. package/src/platforms/sms/lib/c/load_tiles.c +32 -0
  1113. package/src/platforms/sms/lib/c/sms_crt0.s +101 -0
  1114. package/src/platforms/sms/lib/c/sms_hw.h +53 -0
  1115. package/src/platforms/sms/lib/c/sms_music.c +178 -0
  1116. package/src/platforms/sms/lib/c/sms_music.h +50 -0
  1117. package/src/platforms/sms/lib/c/sms_sfx.c +82 -0
  1118. package/src/platforms/sms/lib/c/sms_sfx.h +40 -0
  1119. package/src/platforms/sms/lib/c/sprite_table.c +60 -0
  1120. package/src/platforms/sms/lib/c/vblank_wait.c +10 -0
  1121. package/src/platforms/sms/lib/c/vdp_init.c +58 -0
  1122. package/src/platforms/sms/lib/header.s +33 -0
  1123. package/src/platforms/sms/lib/joypad_read.s +40 -0
  1124. package/src/platforms/sms/lib/load_palette.s +30 -0
  1125. package/src/platforms/sms/lib/load_tiles.s +50 -0
  1126. package/src/platforms/sms/lib/sprite_table.s +44 -0
  1127. package/src/platforms/sms/lib/vblank_wait.s +36 -0
  1128. package/src/platforms/sms/lib/vdp_init.s +47 -0
  1129. package/src/platforms/sms/vdp.js +530 -0
  1130. package/src/platforms/snes/MENTAL_MODEL.md +275 -0
  1131. package/src/platforms/snes/TROUBLESHOOTING.md +208 -0
  1132. package/src/platforms/snes/UPSTREAM_SOURCES.md +50 -0
  1133. package/src/platforms/snes/brr.js +208 -0
  1134. package/src/platforms/snes/image-to-tilemap.js +227 -0
  1135. package/src/platforms/snes/lib/audio/apu_blob.asm +228 -0
  1136. package/src/platforms/snes/lib/audio/apu_blob.bin +0 -0
  1137. package/src/platforms/snes/lib/audio/explosion.brr +0 -0
  1138. package/src/platforms/snes/lib/audio/sample_bank.bin +0 -0
  1139. package/src/platforms/snes/lib/audio/shoot.brr +0 -0
  1140. package/src/platforms/snes/lib/audio/spc_driver.asm +241 -0
  1141. package/src/platforms/snes/lib/audio_pipeline.asm +62 -0
  1142. package/src/platforms/snes/lib/c/crt0.asm +125 -0
  1143. package/src/platforms/snes/lib/c/hdr.asm +50 -0
  1144. package/src/platforms/snes/lib/c/snes_sfx.c +116 -0
  1145. package/src/platforms/snes/lib/c/snes_sfx.h +96 -0
  1146. package/src/platforms/snes/lib/c/snes_sfx_data.asm +25 -0
  1147. package/src/platforms/snes/lib/cgram_upload.asm +43 -0
  1148. package/src/platforms/snes/lib/lorom_header.asm +47 -0
  1149. package/src/platforms/snes/lib/lorom_multibank.asm +66 -0
  1150. package/src/platforms/snes/lib/nmi_safe.asm +77 -0
  1151. package/src/platforms/snes/lib/oam_upload.asm +45 -0
  1152. package/src/platforms/snes/lib/pad_read.asm +64 -0
  1153. package/src/platforms/snes/lib/pvsneslib/LICENSE +21 -0
  1154. package/src/platforms/snes/lib/pvsneslib/include/ctype.h +6 -0
  1155. package/src/platforms/snes/lib/pvsneslib/include/float.h +4 -0
  1156. package/src/platforms/snes/lib/pvsneslib/include/hdr.asm +47 -0
  1157. package/src/platforms/snes/lib/pvsneslib/include/limits.h +13 -0
  1158. package/src/platforms/snes/lib/pvsneslib/include/math.h +10 -0
  1159. package/src/platforms/snes/lib/pvsneslib/include/setjmp.h +4 -0
  1160. package/src/platforms/snes/lib/pvsneslib/include/snes/background.h +396 -0
  1161. package/src/platforms/snes/lib/pvsneslib/include/snes/console.h +188 -0
  1162. package/src/platforms/snes/lib/pvsneslib/include/snes/dma.h +381 -0
  1163. package/src/platforms/snes/lib/pvsneslib/include/snes/input.h +289 -0
  1164. package/src/platforms/snes/lib/pvsneslib/include/snes/interrupt.h +264 -0
  1165. package/src/platforms/snes/lib/pvsneslib/include/snes/libversion.h +10 -0
  1166. package/src/platforms/snes/lib/pvsneslib/include/snes/lzss.h +43 -0
  1167. package/src/platforms/snes/lib/pvsneslib/include/snes/map.h +113 -0
  1168. package/src/platforms/snes/lib/pvsneslib/include/snes/object.h +234 -0
  1169. package/src/platforms/snes/lib/pvsneslib/include/snes/pixel.h +53 -0
  1170. package/src/platforms/snes/lib/pvsneslib/include/snes/scores.h +66 -0
  1171. package/src/platforms/snes/lib/pvsneslib/include/snes/snestypes.h +65 -0
  1172. package/src/platforms/snes/lib/pvsneslib/include/snes/sound.h +245 -0
  1173. package/src/platforms/snes/lib/pvsneslib/include/snes/sprite.h +456 -0
  1174. package/src/platforms/snes/lib/pvsneslib/include/snes/video.h +465 -0
  1175. package/src/platforms/snes/lib/pvsneslib/include/snes.h +190 -0
  1176. package/src/platforms/snes/lib/pvsneslib/include/stdarg.h +28 -0
  1177. package/src/platforms/snes/lib/pvsneslib/include/stdbool.h +53 -0
  1178. package/src/platforms/snes/lib/pvsneslib/include/stddef.h +27 -0
  1179. package/src/platforms/snes/lib/pvsneslib/include/stdint.h +7 -0
  1180. package/src/platforms/snes/lib/pvsneslib/include/stdio.h +9 -0
  1181. package/src/platforms/snes/lib/pvsneslib/include/stdlib.h +13 -0
  1182. package/src/platforms/snes/lib/pvsneslib/include/string.h +19 -0
  1183. package/src/platforms/snes/lib/pvsneslib/include/strings.h +5 -0
  1184. package/src/platforms/snes/lib/pvsneslib/source/Makefile +87 -0
  1185. package/src/platforms/snes/lib/pvsneslib/source/backgrounds.asm +834 -0
  1186. package/src/platforms/snes/lib/pvsneslib/source/consoles.asm +1028 -0
  1187. package/src/platforms/snes/lib/pvsneslib/source/crt0_snes.asm +329 -0
  1188. package/src/platforms/snes/lib/pvsneslib/source/dmas.asm +1275 -0
  1189. package/src/platforms/snes/lib/pvsneslib/source/hdr.asm +56 -0
  1190. package/src/platforms/snes/lib/pvsneslib/source/input.asm +445 -0
  1191. package/src/platforms/snes/lib/pvsneslib/source/libc.asm +485 -0
  1192. package/src/platforms/snes/lib/pvsneslib/source/libc_c.c +1214 -0
  1193. package/src/platforms/snes/lib/pvsneslib/source/libm.asm +510 -0
  1194. package/src/platforms/snes/lib/pvsneslib/source/libtcc.asm +374 -0
  1195. package/src/platforms/snes/lib/pvsneslib/source/lzsss.asm +256 -0
  1196. package/src/platforms/snes/lib/pvsneslib/source/maps.asm +1078 -0
  1197. package/src/platforms/snes/lib/pvsneslib/source/objects.asm +2881 -0
  1198. package/src/platforms/snes/lib/pvsneslib/source/scores.asm +226 -0
  1199. package/src/platforms/snes/lib/pvsneslib/source/sm_spc.asm +187 -0
  1200. package/src/platforms/snes/lib/pvsneslib/source/snesmodwla.asm +1186 -0
  1201. package/src/platforms/snes/lib/pvsneslib/source/sounds.asm +273 -0
  1202. package/src/platforms/snes/lib/pvsneslib/source/sprites.asm +3946 -0
  1203. package/src/platforms/snes/lib/pvsneslib/source/vblank.asm +917 -0
  1204. package/src/platforms/snes/lib/pvsneslib/source/videos.asm +1137 -0
  1205. package/src/platforms/snes/lib/reset_init.asm +31 -0
  1206. package/src/platforms/snes/lib/sprite_table_populate.asm +122 -0
  1207. package/src/platforms/snes/lib/vram_dma_upload.asm +42 -0
  1208. package/src/platforms/snes/ppu.js +606 -0
  1209. package/src/playtest/playtest.js +612 -0
  1210. package/src/rom-id/identifier.js +421 -0
  1211. package/src/rom-id/patch.js +217 -0
  1212. package/src/toolchains/_worker/pool.js +253 -0
  1213. package/src/toolchains/_worker/run.js +78 -0
  1214. package/src/toolchains/_worker/wasm-worker.js +233 -0
  1215. package/src/toolchains/arm-none-eabi-gcc/gcc.js +208 -0
  1216. package/src/toolchains/asar/asar.js +542 -0
  1217. package/src/toolchains/assemble-snippet.js +256 -0
  1218. package/src/toolchains/cc65/cc65.js +395 -0
  1219. package/src/toolchains/cc65/da65.js +119 -0
  1220. package/src/toolchains/cc65/dbgparse.js +274 -0
  1221. package/src/toolchains/cc65/preset-resolver.js +59 -0
  1222. package/src/toolchains/cc65/presets/nes/chr-ram-runtime.cfg +79 -0
  1223. package/src/toolchains/cc65/presets/nes/chr-ram-runtime.crt0.s +178 -0
  1224. package/src/toolchains/cc65/presets/nes/chr-ram.cfg +76 -0
  1225. package/src/toolchains/cc65/presets/nes/chr-ram.crt0.s +106 -0
  1226. package/src/toolchains/common/ar.js +121 -0
  1227. package/src/toolchains/common/sdk-cache.js +116 -0
  1228. package/src/toolchains/common/symbols.js +139 -0
  1229. package/src/toolchains/dasm/dasm.js +96 -0
  1230. package/src/toolchains/gba-c/gba-c.js +832 -0
  1231. package/src/toolchains/genesis-c/README.md +61 -0
  1232. package/src/toolchains/genesis-c/genesis-c.js +598 -0
  1233. package/src/toolchains/index.js +727 -0
  1234. package/src/toolchains/m68k-elf-gcc/gcc.js +220 -0
  1235. package/src/toolchains/m68kdasm.js +438 -0
  1236. package/src/toolchains/parse-errors.js +258 -0
  1237. package/src/toolchains/registry.js +67 -0
  1238. package/src/toolchains/rgbds/rgbds.js +144 -0
  1239. package/src/toolchains/sdcc/preflight-lint.js +295 -0
  1240. package/src/toolchains/sdcc/sdcc.js +519 -0
  1241. package/src/toolchains/sjasm/sjasm.js +85 -0
  1242. package/src/toolchains/sm83dasm.js +194 -0
  1243. package/src/toolchains/snes-c/snes-c.js +409 -0
  1244. package/src/toolchains/tcc816/tcc816.js +79 -0
  1245. package/src/toolchains/vasm68k/vasm68k.js +138 -0
  1246. package/src/toolchains/wladx/wladx.js +120 -0
  1247. package/src/toolchains/z80dasm.js +303 -0
@@ -0,0 +1,2881 @@
1
+ ;---------------------------------------------------------------------------------
2
+ ;
3
+ ; Copyright (C) 2012-2024
4
+ ; Alekmaul, Nub1604
5
+ ;
6
+ ; This software is provided 'as-is', without any express or implied
7
+ ; warranty. In no event will the authors be held liable for any
8
+ ; damages arising from the use of this software.
9
+ ;
10
+ ; Permission is granted to anyone to use this software for any
11
+ ; purpose, including commercial applications, and to alter it and
12
+ ; redistribute it freely, subject to the following restrictions:
13
+ ;
14
+ ; 1. The origin of this software must not be misrepresented; you
15
+ ; must not claim that you wrote the original software. If you use
16
+ ; this software in a product, an acknowledgment in the product
17
+ ; documentation would be appreciated but is not required.
18
+ ; 2. Altered source versions must be plainly marked as such, and
19
+ ; must not be misrepresented as being the original software.
20
+ ; 3. This notice may not be removed or altered from any source
21
+ ; distribution.
22
+ ;
23
+ ; Special thanks to Nub1604 for the slope management
24
+ ;
25
+ ;---------------------------------------------------------------------------------
26
+
27
+ .DEFINE OB_NULL $FFFF ; null value for linked table
28
+ .DEFINE OB_ID_NULL $0000 ; null value for obj id
29
+
30
+ .DEFINE OB_MAX 80 ; total number of objects in the game
31
+ .DEFINE OB_TYPE_MAX 64 ; total number of type of objects in the game
32
+
33
+ .DEFINE OB_SIZE 64 ; 64 bytes for each object
34
+
35
+ .DEFINE OB_SCR_XLR_CHK -64 ; -64 is the minimum on "virtual" screen x position to update object
36
+ .DEFINE OB_SCR_XRR_CHK 320 ; 256+64 is the maximum on "virtual" screen x position to update object
37
+ .DEFINE OB_SCR_YLR_CHK -64 ; -64 is the minimum on "virtual" screen y position to update object
38
+ .DEFINE OB_SCR_YRR_CHK 288 ; 224+64 is the maximum on "virtual" screen y position to update object
39
+
40
+ .DEFINE OB_SCR_XLE_CHK -32 ; -32 is the minimum on screen x position to display sprite object
41
+ .DEFINE OB_SCR_XRI_CHK 256 ; 256 is the maximum on screen x position to display sprite object
42
+ .DEFINE OB_SCR_YLE_CHK -32 ; -32 is the minimum on screen y position to display sprite object
43
+ .DEFINE OB_SCR_YRI_CHK 224 ; 224 is the maximum on screen y position to display sprite object
44
+
45
+ .DEFINE T_SOLID $FF00
46
+ .DEFINE T_LADDER $0001
47
+ .DEFINE T_FIRES $0002
48
+ .DEFINE T_SPIKE $0004
49
+ .DEFINE T_PLATE $0008
50
+ .DEFINE T_SLOPES $0020
51
+ ; $0020 Type Slope 1x1 Up ◢ (action will be climb on it) for tile
52
+ ; $0021 Type Slope 1x1 Down ◣ (action will be descend on it) for tile
53
+ ; $0022 Type Slope 2x1 lower half Up ◢ (action will be climb on it) for tile
54
+ ; $0023 Type Slope 2x1 lower half Down ◣ (action will be descend on it) for tile
55
+ ; $0024 Type Slope 2x1 upper half Up ◢ (action will be climb on it) for tile
56
+ ; $0025 Type Slope 2x1 upper half Down ◣ (action will be descend on it) for tile
57
+
58
+ .DEFINE ACT_CLIMB $2000
59
+ .DEFINE ACT_DIE $4000
60
+ .DEFINE ACT_BURN $8000
61
+
62
+ .DEFINE GRAVITY 41 ; default values
63
+ .DEFINE MAX_Y_VELOCITY (10*256)
64
+ .DEFINE FRICTION $10
65
+
66
+ .DEFINE FRICTION1D $0100
67
+
68
+ .STRUCT t_objs
69
+ prev DW ; 0 previous object linked list
70
+ next DW ; 2 next object in linked list
71
+ type DB ; 4 type of object, depend of the game
72
+ nID DB ; 5 obj ID in linked list
73
+
74
+ sprnum DW ; 6 sprite oam number of the object (multiple of 4)
75
+ sprid3216 DW ; 8 sprite oam id in sprite oam memory
76
+ sprblk3216 DW ; 10 sprite oam address in sprites tiles memory
77
+ sprflip DB ; 12 sprite flip attribute
78
+ sprpal DB ; 13 sprite palette
79
+ sprframe DW ; 14 current frame
80
+
81
+ xpos DSB 3 ; 16 x position on the screen (3 fixed point)
82
+ ypos DSB 3 ; 19 y position on the screen (3 fixed point)
83
+
84
+ xofs DW ; 22 x offset of the object (from the square 16x16 or 32x32)
85
+ yofs DW ; 24 y offset of the object (from the square 16x16 or 32x32)
86
+ width DW ; 26 width of the object (from the square 16x16 or 32x32)
87
+ height DW ; 28 height of the object (from the square 16x16 or 32x32)
88
+ xmin DW ; 30 min x coordinate for action of object, depends of game (ex: revert direction)
89
+ xmax DW ; 32 max x coordinate for action of object, depends of game (ex: revert direction)
90
+
91
+ xvel DW ; 34 x velocity
92
+ yvel DW ; 36 y velocity
93
+
94
+ tilestand DW ; 38 tile number object is standing on
95
+ tileabove DW ; 40 tile number above object
96
+ tilesprop DW ; 42 tile property stand on
97
+ tilebprop DW ; 44 tile property on left/right side
98
+
99
+ action DW ; 46 current action of the object, depends of game
100
+ status DB ; 48 status of object regarding collision
101
+ tempo DB ; 49 if object needs tempo
102
+ count DB ; 50 if object needs a counter
103
+ dir DB ; 51 if object needs to manage direction
104
+
105
+ parentID DW ; 52 obj ID of parent (useful for projectiles)
106
+ hitpoints DB ; 54 number of hit points of object
107
+ sprrefresh DB ; 55 if object needs sprite to be refresh
108
+
109
+ onscreen DB ; 56 to know if object is on screen or not
110
+
111
+ objnotused DSB 7 ; OB_SIZE-56-1 for future use
112
+
113
+ .ENDST
114
+
115
+ .BASE $00
116
+ .RAMSECTION ".reg_objects7e" BANK $7E SLOT RAMSLOT_0
117
+
118
+ objbuffers INSTANCEOF t_objs OB_MAX ; object struct in memory
119
+ objactives DSW OB_TYPE_MAX ; active object list
120
+
121
+ objfctinit DSB 4*OB_TYPE_MAX ; pointer to init function of objects
122
+ objfctupd DSB 4*OB_TYPE_MAX ; pointer to update function of object
123
+ objfctref DSB 4*OB_TYPE_MAX ; pointer to refresh function of sprite object
124
+
125
+ objtmpbuf DSW (OB_MAX*5)+1 ; temporary buffer for object
126
+
127
+ objunused DW ; buffer of unused objects
128
+ objnewid DW ; new id created for the last object
129
+ objgetid DW ; return value of objNew
130
+ objnextid DB ; each new object is given a unique nID
131
+
132
+ objfctcall DSB 2 ; low address for C function call
133
+ objfctcallh DSB 2 ; high address for C function call
134
+
135
+ objptr DW ; pointer to current object
136
+ objcidx DW ; index of loop object
137
+
138
+ objgravity DW ; default gravity for objects
139
+ objfriction DW ; default friction for objects
140
+
141
+ objtokill DB ; =1 if need to kill object
142
+
143
+ objneedrefresh DB ; =1 if we need to refresh all spritesbecause object is out of screen
144
+
145
+ objtmp1 DW ; temporary vars for stuffs
146
+ objtmp2 DW
147
+ objtmp3 DW
148
+ objtmp4 DW
149
+
150
+ .ENDS
151
+
152
+ .BASE BASE_0
153
+ .SECTION ".objects0_text" superfree
154
+
155
+ .accu 16
156
+ .index 16
157
+ .16bit
158
+
159
+ ;---------------------------------------------------------------------------------
160
+ ; void objInitEngine(void)
161
+ objInitEngine:
162
+ php
163
+ phb
164
+ phx
165
+ phy
166
+
167
+ sep #$20 ; change bank for object bank
168
+ lda #$7e
169
+ pha
170
+ plb
171
+
172
+ rep #$20
173
+ ldx #0
174
+
175
+ _oieR0:
176
+ stz objbuffers,x ; clear all object memory
177
+ inx
178
+ inx
179
+ txa
180
+ cmp #(OB_SIZE*(OB_MAX))
181
+ bne _oieR0
182
+
183
+ lda #$0000
184
+ ldy #$0001
185
+
186
+ _oieR1:
187
+ tax
188
+ stz objbuffers.1.nID,x ;init and link up all the unused objects
189
+ tya
190
+ sta objbuffers.1.next,x
191
+ txa
192
+ cmp #(OB_SIZE*(OB_MAX-2)) ; if max reached, go away
193
+ beq _oieR2
194
+ iny
195
+ clc
196
+ adc #OB_SIZE
197
+ bra _oieR1
198
+
199
+ _oieR2:
200
+ tya ; because obj size is 64
201
+ asl a
202
+ asl a
203
+ asl a
204
+ asl a
205
+ asl a
206
+ asl a
207
+ tax
208
+ lda #OB_NULL
209
+ sta objbuffers.1.next,x ; terminate linked list
210
+ stz objunused ; top of unused list is object 0
211
+
212
+ ldx #(2*(OB_TYPE_MAX-1))
213
+ _oieR3:
214
+ sta objactives,x ; each active object to OB_NULL
215
+ dex
216
+ dex
217
+ bne _oieR3
218
+ sta objactives,x ; for last one
219
+
220
+ stz.w objnewid
221
+ stz.w objgetid
222
+
223
+ sep #$20
224
+ lda #$1
225
+ sta objnextid
226
+
227
+ rep #$20
228
+ lda #GRAVITY ; set default values for gravity and other variables
229
+ sta objgravity
230
+ lda #FRICTION
231
+ sta objfriction
232
+
233
+ ply
234
+ plx
235
+ plb
236
+ plp
237
+
238
+ rtl
239
+
240
+ ;---------------------------------------------------------------------------------
241
+ ; void objInitGravity(u16 objgravity, u16 objfriction)
242
+ objInitGravity:
243
+ php
244
+ phb
245
+
246
+ sep #$20 ; change bank for object bank
247
+ lda #$7e
248
+ pha
249
+ plb
250
+
251
+ lda 7,s ; get gravity (5+2)
252
+ sta objgravity
253
+ lda 8,s ; get friction (6+2)
254
+ sta objfriction
255
+ rep #$20
256
+
257
+ plb
258
+ plp
259
+
260
+ rtl
261
+
262
+ ;---------------------------------------------------------------------------------
263
+ ; void objInitFunctions(u8 objtype, void *initfct,void *updfct,void *reffct)
264
+ ; 5 6-9 10-13 14-16
265
+ objInitFunctions:
266
+ php
267
+ phb
268
+
269
+ phx
270
+
271
+ sep #$20 ; go to object bank
272
+ lda #$7e
273
+ pha
274
+ plb
275
+
276
+ lda 8,s ; get type of object (x4 to have correct entry) (5+1+2)
277
+ rep #$20
278
+ and #$00ff
279
+ asl a
280
+ asl a
281
+ tax
282
+
283
+ lda 9,s ; get bank + data init function address (6+1+2 & 8+1+2)
284
+ sta objfctinit,x
285
+ lda 11,s
286
+ sta objfctinit+2,x
287
+
288
+ lda 13,s ; get bank + data update function address (10+1+2 & 12+1+2)
289
+ sta objfctupd,x
290
+ lda 15,s
291
+ sta objfctupd+2,x
292
+
293
+ lda 17,s ; get bank + data update function address (14+1+2 & 16+1+2)
294
+ sta objfctref,x
295
+ lda 19,s
296
+ sta objfctref+2,x
297
+
298
+ plx
299
+ plb
300
+ plp
301
+ rtl
302
+
303
+ ;---------------------------------------------------------------------------------
304
+ ; u16 objNew (u8 objtype, u16 x, u16 y)
305
+ ; 5 6-7 8-9
306
+ objNew:
307
+ php
308
+ phb
309
+
310
+ phx
311
+ phy
312
+
313
+ sep #$20 ; go to bank object
314
+ lda #$7e
315
+ pha
316
+ plb
317
+
318
+ lda 10,s ; get object type (5+1+2+2)
319
+
320
+ rep #$20
321
+ and #$00ff
322
+ asl a
323
+ tay
324
+
325
+ lda objunused ; if no object left, return null id value
326
+ cmp #OB_NULL
327
+ beq _oiN0
328
+ bra _oiN1
329
+
330
+ _oiN0:
331
+ lda #OB_ID_NULL ; put OB_ID_NULL and leave function
332
+ sta tcc__r0
333
+ bra _oiNEnd
334
+
335
+ _oiN1:
336
+ sta objnewid
337
+ asl a ; size 64
338
+ asl a
339
+ asl a
340
+ asl a
341
+ asl a
342
+ asl a
343
+ tax
344
+ lda objbuffers.1.next,x ; get the next unused object
345
+ sta objunused
346
+
347
+ lda #OB_NULL
348
+ sta objbuffers.1.prev,x
349
+ lda objactives,y ; add new object to the top of it's active list
350
+ sta objbuffers.1.next,x
351
+
352
+ phx
353
+ cmp #OB_NULL
354
+ beq _oiN2
355
+ asl a
356
+ asl a
357
+ asl a
358
+ asl a
359
+ asl a
360
+ asl a
361
+ tax
362
+ lda objnewid
363
+ sta objbuffers.1.prev,x
364
+
365
+ _oiN2:
366
+ lda objnewid
367
+ sta objactives,y
368
+ plx
369
+
370
+ sep #$20 ; init object
371
+ lda 10,s
372
+ sta objbuffers.1.type,x
373
+ lda objnextid
374
+ sta objbuffers.1.nID,x
375
+ inc a
376
+ bne _oiN3 ; zero is invalid nID (for unused objects)
377
+ inc a
378
+ _oiN3:
379
+ sta objnextid
380
+
381
+ rep #$20
382
+ lda 11,s ; store coordinates x
383
+ sta objbuffers.1.xpos+1,x
384
+ lda 13,s ; store coordinates y
385
+ sta objbuffers.1.ypos+1,x
386
+
387
+ sep #$20
388
+ lda objbuffers.1.nID,x ; calculate (pObj->nID<<8) + newObjIdx
389
+
390
+ rep #$20
391
+ and #$00ff ; build the object handle (combined nID and object index in buffer)
392
+ xba
393
+ clc
394
+ adc objnewid
395
+ sta tcc__r0
396
+ sta objgetid
397
+
398
+ _oiNEnd:
399
+ ply
400
+ plx
401
+ plb
402
+ plp
403
+
404
+ rtl
405
+
406
+ ;---------------------------------------------------------------------------------
407
+ ; long call to the subroutine pointed to in objfctcall, needed for C functions
408
+ jslcallfct:
409
+ sep #$20
410
+ lda.l objfctcall + 2
411
+ pha
412
+ rep #$20
413
+ lda.l objfctcall
414
+ dec a
415
+ pha
416
+ rtl
417
+
418
+ ;---------------------------------------------------------------------------------
419
+ ; void objGetPointer(u16 objhandle)
420
+ objGetPointer:
421
+ php
422
+ phb
423
+
424
+ phx
425
+ phy
426
+
427
+ sep #$20 ; bank address of objects
428
+ lda #$7e
429
+ pha
430
+ plb
431
+
432
+ rep #$20 ; grab the nID value from the id (top word of the id)
433
+ lda 10,s ; 5+1+2+2
434
+ xba
435
+ and #$00ff
436
+
437
+ sta objptr
438
+ lda 10,s
439
+ and #$00ff ; grab the ptr to the object (from index, lower word of id 5+1+2+2)
440
+ tax
441
+ inx ; grab value for return value
442
+ asl a ; adapt to object size 64
443
+ asl a
444
+ asl a
445
+ asl a
446
+ asl a
447
+ asl a
448
+ tay
449
+ sep #$20
450
+ lda objbuffers.1.nID,y
451
+ rep #$20
452
+ and #$00ff
453
+ clc
454
+ cmp objptr ; is object still valid?
455
+ beq _oigp1
456
+
457
+ ldx #0 ; no... object has died and it's buffer slot has been reallocated
458
+ _oigp1:
459
+ txa
460
+ sta objptr
461
+
462
+ ply
463
+ plx
464
+ plb
465
+ plp
466
+ rtl
467
+
468
+ ;---------------------------------------------------------------------------------
469
+ ; void objKill(u16 objhandle)
470
+ objKill:
471
+ php
472
+ phb
473
+
474
+ phx
475
+ phy
476
+
477
+ sep #$20 ; got o object bank
478
+ lda #$7e
479
+ pha
480
+ plb
481
+
482
+ rep #$20 ; grab the nID value from the id (top word of the id)
483
+ lda 10,s ; handle of object (5+1+2+2)
484
+ pha
485
+ jsl objGetPointer
486
+ pla
487
+
488
+ lda objptr
489
+ bne _oik1 ; if NULL, object is already dead
490
+ brl _oikend
491
+
492
+ _oik1:
493
+ dec a ; point to correct object (size 64)
494
+ asl a
495
+ asl a
496
+ asl a
497
+ asl a
498
+ asl a
499
+ asl a
500
+ tax
501
+ sta objptr
502
+
503
+ lda objbuffers.1.prev,x ; remove it from its active list
504
+
505
+ cmp #OB_NULL
506
+ bne _oik2
507
+
508
+ sep #$20 ; this object was at the top of its list... move next one up to top
509
+ lda objbuffers.1.type,x
510
+ rep #$20
511
+ and #$00ff
512
+ asl a
513
+ tay
514
+ lda objbuffers.1.next,x
515
+ sta objactives,y
516
+
517
+ cmp #OB_NULL
518
+ beq _oik3
519
+
520
+ asl a
521
+ asl a
522
+ asl a
523
+ asl a
524
+ asl a
525
+ asl a
526
+ tax
527
+ lda #OB_NULL
528
+ sta objbuffers.1.prev,x
529
+ bra _oik3
530
+
531
+ _oik2:
532
+ lda objbuffers.1.next,x
533
+ tay
534
+ lda objbuffers.1.prev,x
535
+ asl a
536
+ asl a
537
+ asl a
538
+ asl a
539
+ asl a
540
+ asl a
541
+ tax
542
+ tya
543
+ sta objbuffers.1.next,x
544
+
545
+ cmp #OB_NULL
546
+ beq _oik3
547
+
548
+ ldx objptr
549
+ lda objbuffers.1.prev,x
550
+ tay
551
+ lda objbuffers.1.next,x
552
+ asl a
553
+ asl a
554
+ asl a
555
+ asl a
556
+ asl a
557
+ asl a
558
+ tax
559
+ tya
560
+ sta objbuffers.1.prev,x
561
+
562
+ _oik3:
563
+ ldx objptr ; add the object to the unused list
564
+ lda objunused
565
+ sta objbuffers.1.next,x
566
+ lda 10,s
567
+ and #$00ff
568
+ sta objunused
569
+
570
+ ldy #4
571
+ _oik4: ; init memory of object
572
+ stz objbuffers.1.type,x
573
+ inx
574
+ inx
575
+ iny
576
+ iny
577
+ cpy #OB_SIZE
578
+ bne _oik4
579
+
580
+ _oikend:
581
+ ply
582
+ plx
583
+ plb
584
+ plp
585
+
586
+ rtl
587
+
588
+ ;---------------------------------------------------------------------------------
589
+ ; void objKillAll(void)
590
+ objKillAll:
591
+ php
592
+ phb
593
+
594
+ phx
595
+ phy
596
+
597
+ sep #$20 ; go to object bank
598
+ lda #$7e
599
+ pha
600
+ plb
601
+
602
+ rep #$20
603
+ ldy #$0000
604
+
605
+ _oikal1:
606
+ lda objactives,y ; walk through entire active buffer
607
+ _oikal2:
608
+ sta objcidx
609
+ cmp #OB_NULL ; there are still object left in the list
610
+ beq _oikal3
611
+ asl a
612
+ asl a
613
+ asl a
614
+ asl a
615
+ asl a
616
+ asl a
617
+ tax
618
+ lda objbuffers.1.next,x
619
+ pha
620
+
621
+ sep #$20 ; kill this object
622
+ lda objbuffers.1.nID,x
623
+ rep #$20
624
+ and #$00ff
625
+ xba
626
+ clc
627
+ adc objcidx
628
+ pha
629
+ jsl objKill
630
+ pla
631
+
632
+ pla
633
+ bra _oikal2
634
+
635
+ _oikal3:
636
+ iny
637
+ iny
638
+ cpy #OB_TYPE_MAX*2 ; loop for all objects
639
+ bne _oikal1
640
+
641
+ stz.w objnewid
642
+ stz.w objgetid
643
+ stz.w objunused
644
+
645
+ sep #$20
646
+ lda #$1
647
+ sta objnextid
648
+
649
+ ply
650
+ plx
651
+ plb
652
+ plp
653
+ rtl
654
+
655
+ objOamRefreshAll:
656
+ php
657
+ phx
658
+
659
+ ldx #$0000
660
+ _oora:
661
+ sep #$20
662
+ lda #$1
663
+ sta oambuffer.1.oamrefresh,x ; get refresh attribute
664
+ rep #$20
665
+ txa
666
+ clc
667
+ adc #16 ; to be on correct index (16 bytes per oam)
668
+ tax
669
+ cmp #128*16
670
+ bne _oora
671
+
672
+ plx
673
+ plp
674
+ rts
675
+
676
+ ;---------------------------------------------------------------------------------
677
+ ; void objUpdateAll(void)
678
+ objUpdateAll:
679
+ php
680
+ phb
681
+
682
+ phx
683
+ phy
684
+
685
+ sep #$20 ; goto object bank
686
+ lda #$7e
687
+ pha
688
+ plb
689
+
690
+ stz objneedrefresh ; no global refresh needed
691
+
692
+ rep #$20
693
+ ldx #$0000
694
+
695
+ _oiual1:
696
+ lda objactives,x ; walk through entire active buffer
697
+ phx
698
+ _oiual10:
699
+ sta objcidx ; to keep value of current index
700
+ cmp #OB_NULL ; there are still object left in the list
701
+ bne _oiual3
702
+ brl _oiual2
703
+ _oiual3:
704
+ asl a
705
+ asl a
706
+ asl a
707
+ asl a
708
+ asl a
709
+ asl a
710
+ tax ; x is now the current object
711
+
712
+ lda objbuffers.1.next,x ; grab the next object to update
713
+ pha ; will be restore at the end
714
+
715
+ lda objbuffers.1.xpos+1,x
716
+ sec
717
+ sbc.l x_pos
718
+
719
+ cmp.w #OB_SCR_XRR_CHK
720
+ bcc _oiual3y ; x is lower than map max
721
+ cmp.w #OB_SCR_XLR_CHK
722
+ bcc _oiual3y1 ; but x is lower than map min
723
+
724
+ _oiual3y: ; check now y coordinates
725
+ lda objbuffers.1.ypos+1,x
726
+ sec
727
+ sbc.l y_pos
728
+
729
+ cmp.w #OB_SCR_YRR_CHK
730
+ bcc _oiual32 ; y is lower than map max
731
+ cmp.w #OB_SCR_YLR_CHK
732
+ bcs _oiual32 ; but y is greater than map min
733
+
734
+ _oiual3y1:
735
+ jmp _oial4
736
+
737
+ _oiual32: ; *** now we test if we are really on screen ***
738
+ lda objbuffers.1.xpos+1,x
739
+ sec
740
+ sbc.l x_pos
741
+ cmp.w #OB_SCR_XRI_CHK
742
+ bcc _oiual3sy ; x is lower than map max
743
+ cmp.w #OB_SCR_XLE_CHK
744
+ bcc _oiual3sy1 ; but x is lower than map min
745
+
746
+ _oiual3sy: ; check now y coordinates
747
+ lda objbuffers.1.ypos+1,x
748
+ sec
749
+ sbc.l y_pos
750
+
751
+ cmp.w #OB_SCR_YRI_CHK
752
+ bcc _oiuals32 ; y is lower than map max
753
+ cmp.w #OB_SCR_YLE_CHK
754
+ bcs _oiuals32 ; but y is greater than map min
755
+
756
+ _oiual3sy1:
757
+ sep #$20 ; check if it was previously on screen to refresh all the objects
758
+ lda objbuffers.1.onscreen,x
759
+ beq _oiual3sy11 ; no ? no need to refresh
760
+ stz objbuffers.1.onscreen,x
761
+ lda objneedrefresh ; if we have noticed a global refresh previously, don't do it again
762
+ bne _oiual3sy11
763
+ lda #1
764
+ sta objneedrefresh
765
+ jsr objOamRefreshAll ; do a global refresh of sprites
766
+
767
+ _oiual3sy11: ; here we are not on screen but we manage object update
768
+ bra _oiual321
769
+
770
+ _oiuals32:
771
+ sep #$20
772
+ lda objbuffers.1.onscreen,x
773
+ bne _oiual321 ; no ? we need to refresh
774
+ lda #$1
775
+ sta objbuffers.1.onscreen,x ; store that object is on screen
776
+ lda objneedrefresh ; if we have noticed a global refresh previously, don't do it again
777
+ bne _oiual321
778
+ lda #1
779
+ sta objneedrefresh
780
+ jsr objOamRefreshAll ; do a global refresh of sprites
781
+ _oiual321:
782
+ lda objbuffers.1.type,x
783
+ rep #$20
784
+ and #$00ff
785
+ asl a
786
+ asl a
787
+ tay
788
+
789
+ lda objfctupd,y ; get address of update function and call it
790
+ sta objfctcall
791
+ lda objfctupd+2,y
792
+ sta objfctcallh
793
+
794
+ lda objcidx
795
+ pha
796
+
797
+ sep #$20
798
+ stz objtokill ; not killing object for now
799
+ jsl jslcallfct
800
+ rep #$20
801
+ pla
802
+
803
+ sep #$20
804
+ lda objtokill ; object returned that it is now dead
805
+ beq _oial4
806
+
807
+ _oial41:
808
+ rep #$20
809
+ lda objcidx
810
+ asl a
811
+ asl a
812
+ asl a
813
+ asl a
814
+ asl a
815
+ asl a
816
+ tax
817
+ sep #$20
818
+ stz objbuffers.1.onscreen,x ; remove it from the screen
819
+ lda objbuffers.1.nID,x
820
+ rep #$20
821
+ and #$00ff
822
+ xba
823
+ clc
824
+ adc objcidx
825
+ pha
826
+ jsl objKill
827
+ pla
828
+
829
+ sep #$20
830
+ lda objneedrefresh ; it is dead, so remove sprite from screen
831
+ bne _oial4 ; if we have noticed a global refresh previously, don't do it again
832
+ lda #1
833
+ sta objneedrefresh
834
+ jsr objOamRefreshAll ; do a global refresh of sprites
835
+
836
+ _oial4:
837
+ rep #$20 ; goto next object (saved at beginning)
838
+ pla
839
+ brl _oiual10
840
+
841
+ _oiual2:
842
+ plx
843
+ inx
844
+ inx
845
+ cpx #OB_TYPE_MAX*2 ; loop with all type of objects
846
+ beq _oiuaend
847
+ brl _oiual1
848
+
849
+ _oiuaend:
850
+ ply
851
+ plx
852
+ plb
853
+ plp
854
+ rtl
855
+
856
+ ;---------------------------------------------------------------------------------
857
+ ; void objRefreshAll(void)
858
+ objRefreshAll:
859
+ php
860
+ phb
861
+
862
+ phx
863
+ phy
864
+
865
+ sep #$20 ; goto object bank
866
+ lda #$7e
867
+ pha
868
+ plb
869
+
870
+ stz objneedrefresh ; no global refresh needed
871
+
872
+ rep #$20
873
+ ldx #$0000
874
+
875
+ _oiral1:
876
+ lda objactives,x ; walk through entire active buffer
877
+ phx
878
+ _oiral10:
879
+ sta objcidx ; to keep value of current index
880
+ cmp #OB_NULL ; there are still object left in the list
881
+ bne _oiral3
882
+ brl _oiral2
883
+ _oiral3:
884
+ asl a
885
+ asl a
886
+ asl a
887
+ asl a
888
+ asl a
889
+ asl a
890
+ tax ; x is now the current object
891
+
892
+ lda objbuffers.1.next,x ; grab the next object to update
893
+ pha ; will be restore at the end
894
+
895
+ sep #$20 ; check if it was previously on screen to refresh all the objects
896
+ lda objbuffers.1.onscreen,x
897
+ bne _oiral32 ; no ? no need to refresh
898
+
899
+ rep #$20
900
+ bra _oiral31
901
+
902
+ _oiral32:
903
+ lda objbuffers.1.type,x
904
+ rep #$20
905
+ and #$00ff
906
+ asl a
907
+ asl a
908
+ tay
909
+
910
+ lda objfctref,y ; get address of update function and call it
911
+ sta objfctcall
912
+ lda objfctref+2,y
913
+ sta objfctcallh
914
+
915
+ lda objcidx
916
+ pha
917
+
918
+ sep #$20
919
+ jsl jslcallfct
920
+ rep #$20
921
+ pla
922
+
923
+ _oiral31:
924
+ pla
925
+ brl _oiral10
926
+
927
+ _oiral2:
928
+ plx
929
+ inx
930
+ inx
931
+ cpx #OB_TYPE_MAX*2 ; loop with all type of objects
932
+ beq _oiraend
933
+ brl _oiral1
934
+
935
+ _oiraend:
936
+ ply
937
+ plx
938
+ plb
939
+ plp
940
+ rtl
941
+
942
+ .ENDS
943
+
944
+ .SECTION ".objects1_text" superfree
945
+
946
+ ;---------------------------------------------------------------------------------
947
+ ; void objCollidMap(u16 objhandle)
948
+ objCollidMap:
949
+ php
950
+ phb
951
+
952
+ phx
953
+ phy
954
+
955
+ sep #$20 ; go to bank objects
956
+ lda #$7e
957
+ pha
958
+ plb
959
+
960
+ rep #$20
961
+ lda 10,s ; grad the index of object (5+1+2+2)
962
+ asl a
963
+ asl a
964
+ asl a
965
+ asl a
966
+ asl a
967
+ asl a
968
+ tax
969
+ sta objtmp2 ; to keep global handle for object
970
+
971
+ lda objbuffers.1.yvel,x ; if yvel>=0 -> if object is falling
972
+ bpl _oicm1
973
+ jmp _oicmtstyn
974
+ _oicm1:
975
+ xba ; compute ypos
976
+ and #$00FF
977
+ clc
978
+ adc objbuffers.1.ypos+1,x
979
+ clc
980
+ adc objbuffers.1.yofs,x
981
+ clc
982
+ adc objbuffers.1.height,x
983
+ bpl + ; if y<0, put it to 0 *FIX 221130 *
984
+ lda #0000
985
+
986
+ + lsr a
987
+ lsr a
988
+ and #$FFFE
989
+ tay
990
+
991
+ lda objbuffers.1.xpos+1,x
992
+ clc
993
+ adc objbuffers.1.xofs,x
994
+ pha
995
+
996
+ and #$0007 ; compute the number of tiles to test
997
+ clc
998
+ adc objbuffers.1.width,x
999
+ dec a
1000
+ lsr a
1001
+ lsr a
1002
+ lsr a
1003
+ inc a
1004
+ sta objtmp1
1005
+
1006
+ pla ; compute the offset line for y
1007
+ lsr a
1008
+ lsr a
1009
+ and #$FFFE
1010
+ clc
1011
+ adc.w mapadrrowlut, y
1012
+ tay
1013
+
1014
+ clc
1015
+ adc maptile_L1d ; get direct rom value
1016
+ tax
1017
+ phb
1018
+ sep #$20
1019
+ lda maptile_L1b.b
1020
+ pha
1021
+ plb
1022
+ rep #$20
1023
+ lda 0,x
1024
+ plb
1025
+ and #$03FF ; to have only tile number (no flipx/y)
1026
+ asl a ; to have a 16 bit value for 8 pix
1027
+ tax
1028
+ lda metatilesprop, x
1029
+ sta objtmp3
1030
+ bra _oicm21 ; speedup, saves some cycles
1031
+
1032
+ _oicm2:
1033
+ tya
1034
+ clc
1035
+ adc maptile_L1d ; get direct rom value
1036
+ tax
1037
+ phb
1038
+ sep #$20
1039
+ lda maptile_L1b.b
1040
+ pha
1041
+ plb
1042
+ rep #$20
1043
+ lda 0,x
1044
+ plb
1045
+ and #$03FF ; to have only tile number (no flipx/y)
1046
+ asl a ; to have a 16 bit value for 8 pix
1047
+ tax
1048
+ lda metatilesprop, x
1049
+ sta objtmp3
1050
+
1051
+ _oicm21:
1052
+ ldx objtmp2
1053
+ sta objbuffers.1.tilesprop,x
1054
+ lda objbuffers.1.tilesprop,x
1055
+ cmp #T_LADDER ; if ladder, well avoid doing stuffs
1056
+ beq _oicm3
1057
+ cmp #T_PLATE ; if on a plate, do same thing
1058
+ beq _oicm3
1059
+
1060
+ cmp #T_FIRES ; if fire, player is burning
1061
+ bne _oicm22
1062
+ lda #ACT_BURN ; player is now dying, no more checking
1063
+ sta objbuffers.1.action
1064
+ brl _oicmtstx
1065
+
1066
+ _oicm22:
1067
+ cmp #T_SPIKE ; if spike, player is dying too
1068
+ bne _oicm23
1069
+ lda #ACT_DIE
1070
+ sta objbuffers.1.action
1071
+ brl _oicmtstx
1072
+
1073
+ _oicm23:
1074
+ and #$ff00 ; keep only the high values for collision
1075
+ beq _oicm4
1076
+
1077
+ _oicm3:
1078
+ lda objtmp3
1079
+ sta objbuffers.1.tilestand,x ; store the tile we are standing on
1080
+
1081
+ lda objbuffers.1.yvel+1,x
1082
+ and #$00ff
1083
+ clc
1084
+ adc objbuffers.1.ypos+1,x
1085
+ clc
1086
+ adc objbuffers.1.yofs,x
1087
+ clc
1088
+ adc objbuffers.1.height,x
1089
+ inc a
1090
+
1091
+ and #$fff8
1092
+ sec
1093
+ sbc objbuffers.1.yofs,x
1094
+ sec
1095
+ sbc objbuffers.1.height,x
1096
+ sta objbuffers.1.ypos+1,x
1097
+ stz objbuffers.1.yvel,x
1098
+ jmp _oicmtstx
1099
+
1100
+ _oicm4:
1101
+ rep #$20 ; continue to test the tiles on x
1102
+ iny
1103
+ iny
1104
+ dec objtmp1
1105
+ beq _oicm5
1106
+ brl _oicm2
1107
+
1108
+ _oicm5:
1109
+ ldx objtmp2 ; not standing on anything or ladder, now falling if not climbing
1110
+ stz objbuffers.1.tilestand,x
1111
+
1112
+ lda objbuffers.1.tilesprop,x ; need again to verify if not tile standing
1113
+ beq _oicm61
1114
+ lda objbuffers.1.action,x ; if not climbing, well doing like if falling
1115
+ and #ACT_CLIMB
1116
+ beq _oicm61
1117
+ brl _oicmtstx
1118
+
1119
+ _oicm61:
1120
+ lda objbuffers.1.yvel,x
1121
+ clc
1122
+ adc #GRAVITY
1123
+ cmp #MAX_Y_VELOCITY+1 ; add velocity regarding if we do not reach the maximum
1124
+ bmi _oicm6
1125
+ lda #MAX_Y_VELOCITY
1126
+
1127
+ _oicm6:
1128
+ sta objbuffers.1.yvel,x
1129
+ brl _oicmtstx
1130
+
1131
+ _oicmtstyn: ; ------------------------------------------------------
1132
+ stz objbuffers.1.tilestand,x ; yvel<0, object is moving upwards
1133
+
1134
+ xba
1135
+ ora #$FF00
1136
+ clc
1137
+ adc objbuffers.1.ypos+1,x
1138
+ clc
1139
+ adc objbuffers.1.yofs,x
1140
+ bpl + ; if y < 0, put it to 0 *FIX 221126*
1141
+
1142
+ lda #0000
1143
+ + lsr a
1144
+ lsr a
1145
+ and #$FFFE
1146
+ tay
1147
+
1148
+ lda objbuffers.1.xpos+1,x
1149
+ clc
1150
+ adc objbuffers.1.xofs,x
1151
+ pha
1152
+
1153
+ and #$0007
1154
+ clc
1155
+ adc objbuffers.1.width,x
1156
+ dec a
1157
+ lsr a
1158
+ lsr a
1159
+ lsr a
1160
+ inc a
1161
+ sta objtmp1
1162
+
1163
+ pla
1164
+ lsr a
1165
+ lsr a
1166
+ and #$FFFE
1167
+ clc
1168
+ adc.w mapadrrowlut, y
1169
+ tay
1170
+
1171
+ clc
1172
+ adc maptile_L1d ; get direct rom value
1173
+ tax
1174
+ phb
1175
+ sep #$20
1176
+ lda maptile_L1b.b
1177
+ pha
1178
+ plb
1179
+ rep #$20
1180
+ lda 0,x
1181
+ plb
1182
+ and #$03FF ; to have only tile number (no flipx/y)
1183
+ asl a ; to have a 16 bit value for 8 pix
1184
+ tax
1185
+ lda metatilesprop, x
1186
+ bra _oicmtstyn2 ; speedup, saves some cycles
1187
+
1188
+ _oicmtstyn1:
1189
+ tya
1190
+ clc
1191
+ adc maptile_L1d ; get direct rom value
1192
+ tax
1193
+ phb
1194
+ sep #$20
1195
+ lda maptile_L1b.b
1196
+ pha
1197
+ plb
1198
+ rep #$20
1199
+ lda 0,x
1200
+ plb
1201
+ and #$03FF ; to have only tile number (no flipx/y)
1202
+ asl a ; to have a 16 bit value for 8 pix
1203
+ tax
1204
+ lda metatilesprop, x
1205
+
1206
+ _oicmtstyn2:
1207
+ ldx objtmp2
1208
+ sta objbuffers.1.tilesprop,x
1209
+ lda objbuffers.1.tilesprop,x
1210
+ cmp #T_LADDER ; if ladder, well avoid doing stuffs
1211
+ beq _oicmtstyn4
1212
+
1213
+ and #$ff00 ; keep only the high values for collision
1214
+ beq _oicmtstyn3
1215
+
1216
+ lda objbuffers.1.yvel+1,x
1217
+ ora #$ff00
1218
+ clc
1219
+ adc objbuffers.1.ypos+1,x
1220
+ clc
1221
+ adc objbuffers.1.yofs,x
1222
+ clc
1223
+ adc #8
1224
+ and #$fff8
1225
+ sec
1226
+ sbc objbuffers.1.yofs,x
1227
+ sta objbuffers.1.ypos+1,x
1228
+ stz objbuffers.1.yvel,x
1229
+ brl _oicmtstyn4
1230
+
1231
+ _oicmtstyn3:
1232
+ iny ; continue to test the tiles on x
1233
+ iny
1234
+ dec objtmp1
1235
+ bne _oicmtstyn1
1236
+
1237
+ _oicmtstyn4:
1238
+ ldx objtmp2 ; not standing on anything, now falling
1239
+ lda objbuffers.1.yvel,x
1240
+ clc
1241
+ adc #GRAVITY
1242
+ cmp #MAX_Y_VELOCITY+1
1243
+ bmi _oicmtstyn5 ; add velocity regarding if we do not reach the maximum
1244
+ lda #MAX_Y_VELOCITY
1245
+
1246
+ _oicmtstyn5:
1247
+ sta objbuffers.1.yvel,x
1248
+
1249
+ _oicmtstx:
1250
+ ldx objtmp2
1251
+ lda objbuffers.1.xvel,x ; if xvel>=0 -> moving right
1252
+ bne _oicmtstx1
1253
+ jmp _oicmend
1254
+ _oicmtstx1:
1255
+ bpl _oicmtstx11
1256
+ jmp _oicmtstxn
1257
+ _oicmtstx11:
1258
+ sec ; moving right
1259
+ sbc objfriction
1260
+ bpl _oicmtstx12
1261
+ stz objbuffers.1.xvel,x
1262
+ jmp _oicmend
1263
+
1264
+ _oicmtstx12:
1265
+ sta objbuffers.1.xvel,x
1266
+ lda objbuffers.1.ypos+1,x
1267
+ clc
1268
+ adc objbuffers.1.yofs,x
1269
+ bpl + ; if y<0, put it to 0 *FIX 20221201 */
1270
+ lda #0000
1271
+
1272
+ + pha
1273
+ and #$0007
1274
+ clc
1275
+ adc objbuffers.1.height,x
1276
+ dec a
1277
+ lsr a
1278
+ lsr a
1279
+ lsr a
1280
+ inc a
1281
+ sta objtmp1
1282
+
1283
+ pla
1284
+ lsr a
1285
+ lsr a
1286
+ and #$fffe
1287
+ tay
1288
+
1289
+ lda objbuffers.1.xvel+1,x
1290
+ and #$00ff
1291
+ clc
1292
+ adc objbuffers.1.xpos+1,x
1293
+ clc
1294
+ adc objbuffers.1.xofs,x
1295
+ clc
1296
+ adc objbuffers.1.width,x
1297
+ lsr a
1298
+ lsr a
1299
+ and #$fffe
1300
+ clc
1301
+ adc.w mapadrrowlut, y
1302
+
1303
+ _oicmtstx13:
1304
+ tay
1305
+ clc
1306
+ adc maptile_L1d
1307
+ tax
1308
+ phb
1309
+ sep #$20
1310
+ lda maptile_L1b.b
1311
+ pha
1312
+ plb
1313
+ rep #$20
1314
+ lda 0,x
1315
+ plb
1316
+ and #$03FF ; to have only tile number (no flipx/y)
1317
+ asl a ; to have a 16 bit value for 8 pix
1318
+ tax
1319
+ lda metatilesprop, x
1320
+
1321
+ ldx objtmp2
1322
+ sta objbuffers.1.tilebprop,x
1323
+ lda objbuffers.1.tilebprop,x
1324
+ beq _oicmtstx14
1325
+ and #$ff00 ; keep only the high values for collision
1326
+ beq _oicmtstx14
1327
+
1328
+ lda objbuffers.1.xvel+1,x
1329
+ and #$00ff
1330
+ clc
1331
+ adc objbuffers.1.xpos+ 1,x
1332
+ clc
1333
+ adc objbuffers.1.xofs,x
1334
+ clc
1335
+ adc objbuffers.1.width,x
1336
+ inc a
1337
+ and #$fff8
1338
+ sec
1339
+ sbc objbuffers.1.xofs,x
1340
+ sec
1341
+ sbc objbuffers.1.width,x
1342
+ sta objbuffers.1.xpos+ 1,x
1343
+ stz objbuffers.1.xvel,x
1344
+ brl _oicmend
1345
+
1346
+ _oicmtstx14:
1347
+ tya ; go through all y available
1348
+ clc
1349
+ adc.l maprowsize
1350
+ dec objtmp1
1351
+ bne _oicmtstx13
1352
+ brl _oicmend
1353
+
1354
+ _oicmtstxn:
1355
+ clc ; moving left (xvel<0)
1356
+ adc objfriction
1357
+ bmi _oicmtstxna
1358
+ stz objbuffers.1.xvel,x ; currently it is not ok to go left
1359
+ brl _oicmend
1360
+
1361
+ _oicmtstxna:
1362
+ sta objbuffers.1.xvel,x
1363
+ lda objbuffers.1.ypos+1,x
1364
+ clc
1365
+ adc objbuffers.1.yofs,x
1366
+ bpl + ; if y<0, put it to 0 *FIX 20221201 */
1367
+ lda #0000
1368
+
1369
+ + pha
1370
+ and #$0007
1371
+ clc
1372
+ adc objbuffers.1.height,x
1373
+ dec a
1374
+ lsr a
1375
+ lsr a
1376
+ lsr a
1377
+ inc a
1378
+ sta objtmp1
1379
+
1380
+ pla
1381
+ lsr a
1382
+ lsr a
1383
+ and #$fffe
1384
+ tay
1385
+
1386
+ lda objbuffers.1.xvel+1,x
1387
+ ora #$ff00
1388
+ clc
1389
+ adc objbuffers.1.xpos+1,x
1390
+ clc
1391
+ adc objbuffers.1.xofs,x
1392
+
1393
+ bpl _oicmtstxnb ; if negative, don't bother to test, will change screen
1394
+ jmp _oicmend
1395
+
1396
+ _oicmtstxnb:
1397
+ lsr a
1398
+ lsr a
1399
+ and #$fffe
1400
+ clc
1401
+ adc.w mapadrrowlut, y
1402
+
1403
+ _oicmtstxnc:
1404
+ tay
1405
+ clc
1406
+ adc maptile_L1d ; get direct rom value
1407
+ tax
1408
+ phb
1409
+ sep #$20
1410
+ lda maptile_L1b.b
1411
+ pha
1412
+ plb
1413
+ rep #$20
1414
+ lda 0,x
1415
+ plb
1416
+ and #$03FF ; to have only tile number (no flipx/y)
1417
+ asl a ; to have a 16 bit value for 8 pix
1418
+ tax
1419
+ lda metatilesprop, x
1420
+
1421
+ ldx objtmp2
1422
+ sta objbuffers.1.tilebprop,x
1423
+ lda objbuffers.1.tilebprop,x
1424
+ beq _oicmtstxnd
1425
+
1426
+ and #$ff00 ; keep only the high values for collision
1427
+ beq _oicmtstxnd
1428
+
1429
+ lda objbuffers.1.xvel+1,x
1430
+ ora #$ff00
1431
+ clc
1432
+ adc objbuffers.1.xpos+ 1,x
1433
+ clc
1434
+ adc objbuffers.1.xofs,x
1435
+ clc
1436
+ adc #8
1437
+ and #$fff8
1438
+ sec
1439
+ sbc objbuffers.1.xofs,x
1440
+ sta objbuffers.1.xpos+ 1,x
1441
+ stz objbuffers.1.xvel,x
1442
+
1443
+ brl _oicmend
1444
+
1445
+ _oicmtstxnd:
1446
+ tya
1447
+ clc
1448
+ adc.l maprowsize
1449
+ dec objtmp1
1450
+ bne _oicmtstxnc ; go through all y available
1451
+
1452
+ _oicmend:
1453
+ ply
1454
+ plx
1455
+ plb
1456
+ plp
1457
+ rtl
1458
+
1459
+ .ENDS
1460
+
1461
+ .SECTION ".objects2_text" superfree
1462
+
1463
+ ;---------------------------------------------------------------------------------
1464
+ ; void objCollidMap1D(u16 objhandle)
1465
+ objCollidMap1D:
1466
+ php
1467
+ phb
1468
+
1469
+ phx
1470
+ phy
1471
+
1472
+ sep #$20 ; go to bank objects
1473
+ lda #$7e
1474
+ pha
1475
+ plb
1476
+
1477
+ rep #$20
1478
+ lda 10,s ; grad the index of object (5+1+2+2)
1479
+ asl a
1480
+ asl a
1481
+ asl a
1482
+ asl a
1483
+ asl a
1484
+ asl a
1485
+ tax
1486
+ sta objtmp2 ; to keep global handle for object
1487
+
1488
+ lda objbuffers.1.yvel,x ;-- TEST Y ---------
1489
+ bpl _oicm1d1 ; if yvel>=0 -> if object is moving down
1490
+ jmp _oicm1dtstyn
1491
+ _oicm1d1:
1492
+ xba ; compute ypos
1493
+ and #$00FF
1494
+ clc
1495
+ adc objbuffers.1.ypos+1,x
1496
+ clc
1497
+ adc objbuffers.1.yofs,x
1498
+ clc
1499
+ adc objbuffers.1.height,x
1500
+ bpl + ; if y<0, put it to 0
1501
+ lda #0000
1502
+
1503
+ + lsr a
1504
+ lsr a
1505
+ and #$FFFE
1506
+ tay
1507
+
1508
+ lda objbuffers.1.xpos+1,x
1509
+ clc
1510
+ adc objbuffers.1.xofs,x
1511
+ pha
1512
+
1513
+ and #$0007 ; compute the number of tiles to test
1514
+ clc
1515
+ adc objbuffers.1.width,x
1516
+ dec a
1517
+ lsr a
1518
+ lsr a
1519
+ lsr a
1520
+ inc a
1521
+ sta objtmp1
1522
+
1523
+ pla ; compute the offset line for y
1524
+ lsr a
1525
+ lsr a
1526
+ and #$FFFE
1527
+ clc
1528
+ adc.w mapadrrowlut, y
1529
+ tay
1530
+
1531
+ clc
1532
+ adc maptile_L1d ; get direct rom value
1533
+ tax
1534
+ phb
1535
+ sep #$20
1536
+ lda maptile_L1b.b
1537
+ pha
1538
+ plb
1539
+ rep #$20
1540
+ lda 0,x
1541
+ plb
1542
+ and #$03FF ; to have only tile number (no flipx/y)
1543
+ asl a ; to have a 16 bit value for 8 pix
1544
+ tax
1545
+ lda metatilesprop, x
1546
+ sta objtmp3
1547
+ bra _oicm1d21 ; speedup, saves some cycles
1548
+
1549
+ _oicm1d2:
1550
+ tya
1551
+ clc
1552
+ adc maptile_L1d ; get direct rom value
1553
+ tax
1554
+ phb
1555
+ sep #$20
1556
+ lda maptile_L1b.b
1557
+ pha
1558
+ plb
1559
+ rep #$20
1560
+ lda 0,x
1561
+ plb
1562
+ and #$03FF ; to have only tile number (no flipx/y)
1563
+ asl a ; to have a 16 bit value for 8 pix
1564
+ tax
1565
+ lda metatilesprop, x
1566
+ sta objtmp3
1567
+
1568
+ _oicm1d21:
1569
+ ldx objtmp2
1570
+ sta objbuffers.1.tilesprop,x
1571
+ lda objbuffers.1.tilesprop,x
1572
+ cmp #T_LADDER ; if ladder, well avoid doing stuffs
1573
+ beq _oicm1d3
1574
+ cmp #T_PLATE ; if on a plate, do same thing
1575
+ beq _oicm1d3
1576
+
1577
+ cmp #T_FIRES ; if fire, player is burning
1578
+ bne _oicm1d22
1579
+ lda #ACT_BURN ; player is now dying, no more checking
1580
+ sta objbuffers.1.action
1581
+ brl _oicm1dtstx
1582
+
1583
+ _oicm1d22:
1584
+ cmp #T_SPIKE ; if spike, player is dying too
1585
+ bne _oicm1d23
1586
+ lda #ACT_DIE
1587
+ sta objbuffers.1.action
1588
+ brl _oicm1dtstx
1589
+
1590
+ _oicm1d23:
1591
+ and #$ff00 ; keep only the high values for collision
1592
+ beq _oicm1d4
1593
+
1594
+ _oicm1d3:
1595
+ lda objtmp3
1596
+ sta objbuffers.1.tilestand,x ; store the tile we are standing on
1597
+
1598
+ lda objbuffers.1.yvel+1,x
1599
+ and #$00ff
1600
+ clc
1601
+ adc objbuffers.1.ypos+1,x
1602
+ clc
1603
+ adc objbuffers.1.yofs,x
1604
+ clc
1605
+ adc objbuffers.1.height,x
1606
+ inc a
1607
+
1608
+ and #$fff8
1609
+ sec
1610
+ sbc objbuffers.1.yofs,x
1611
+ sec
1612
+ sbc objbuffers.1.height,x
1613
+ sta objbuffers.1.ypos+1,x
1614
+ stz objbuffers.1.yvel,x
1615
+ jmp _oicm1dtstx
1616
+
1617
+ _oicm1d4:
1618
+ rep #$20 ; continue to test the tiles on x
1619
+ iny
1620
+ iny
1621
+ dec objtmp1
1622
+ beq _oicm1d5
1623
+ brl _oicm1d2
1624
+
1625
+ _oicm1d5:
1626
+ ldx objtmp2 ; not standing on anything or ladder, now falling if not climbing
1627
+ stz objbuffers.1.tilestand,x
1628
+
1629
+ lda objbuffers.1.tilesprop,x ; need again to verify if not tile standing
1630
+ beq _oicm1d61
1631
+ lda objbuffers.1.action,x ; if not climbing, well doing like if falling
1632
+ and #ACT_CLIMB
1633
+ beq _oicm1d61
1634
+ brl _oicm1dtstx
1635
+
1636
+ _oicm1d61:
1637
+ brl _oicm1dtstx ; test x now
1638
+
1639
+ _oicm1dtstyn:
1640
+ stz objbuffers.1.tilestand,x ; yvel<0, object is moving upwards
1641
+ xba
1642
+ ora #$FF00
1643
+ clc
1644
+ adc objbuffers.1.ypos+1,x
1645
+ clc
1646
+ adc objbuffers.1.yofs,x
1647
+ bpl + ; if y < 0, put it to 0
1648
+ lda #0000
1649
+
1650
+ + lsr a
1651
+ lsr a
1652
+ and #$FFFE
1653
+ tay
1654
+
1655
+ lda objbuffers.1.xpos+1,x
1656
+ clc
1657
+ adc objbuffers.1.xofs,x
1658
+ pha
1659
+
1660
+ and #$0007
1661
+ clc
1662
+ adc objbuffers.1.width,x
1663
+ dec a
1664
+ lsr a
1665
+ lsr a
1666
+ lsr a
1667
+ inc a
1668
+ sta objtmp1
1669
+
1670
+ pla
1671
+ lsr a
1672
+ lsr a
1673
+ and #$FFFE
1674
+ clc
1675
+ adc.w mapadrrowlut, y
1676
+ tay
1677
+
1678
+ clc
1679
+ adc maptile_L1d ; get direct rom value
1680
+ tax
1681
+ phb
1682
+ sep #$20
1683
+ lda maptile_L1b.b
1684
+ pha
1685
+ plb
1686
+ rep #$20
1687
+ lda 0,x
1688
+ plb
1689
+ and #$03FF ; to have only tile number (no flipx/y)
1690
+ asl a ; to have a 16 bit value for 8 pix
1691
+ tax
1692
+ lda metatilesprop, x
1693
+ bra _oicm1dtstyn2 ; speedup, saves some cycles
1694
+
1695
+ _oicm1dtstyn1:
1696
+ tya
1697
+ clc
1698
+ adc maptile_L1d ; get direct rom value
1699
+ tax
1700
+ phb
1701
+ sep #$20
1702
+ lda maptile_L1b.b
1703
+ pha
1704
+ plb
1705
+ rep #$20
1706
+ lda 0,x
1707
+ plb
1708
+ and #$03FF ; to have only tile number (no flipx/y)
1709
+ asl a ; to have a 16 bit value for 8 pix
1710
+ tax
1711
+ lda metatilesprop, x
1712
+
1713
+ _oicm1dtstyn2:
1714
+ ldx objtmp2
1715
+ sta objbuffers.1.tilesprop,x
1716
+ lda objbuffers.1.tilesprop,x
1717
+ cmp #T_LADDER ; if ladder, well avoid doing stuffs
1718
+ beq _oicm1dtstx
1719
+
1720
+ and #$ff00 ; keep only the high values for collision
1721
+ beq _oicm1dtstyn3
1722
+
1723
+ lda objbuffers.1.yvel+1,x
1724
+ ora #$ff00
1725
+ clc
1726
+ adc objbuffers.1.ypos+1,x
1727
+ clc
1728
+ adc objbuffers.1.yofs,x
1729
+ clc
1730
+ adc #8
1731
+ and #$fff8
1732
+ sec
1733
+ sbc objbuffers.1.yofs,x
1734
+ sta objbuffers.1.ypos+1,x
1735
+ stz objbuffers.1.yvel,x
1736
+ brl _oicm1dtstx
1737
+
1738
+ _oicm1dtstyn3:
1739
+ iny ; continue to test the tiles on x
1740
+ iny
1741
+ dec objtmp1
1742
+ bne _oicm1dtstyn1
1743
+
1744
+
1745
+ _oicm1dtstx: ;-- TEST X ---------------------------
1746
+ ldx objtmp2
1747
+ lda objbuffers.1.xvel,x ; if xvel>=0 -> moving right
1748
+ bne _oicm1dtstx1
1749
+ jmp _oicm1dend
1750
+ _oicm1dtstx1:
1751
+ bpl _oicm1dtstx11
1752
+ jmp _oicm1dtstxn
1753
+
1754
+ _oicm1dtstx11:
1755
+ lda objbuffers.1.ypos+1,x
1756
+ clc
1757
+ adc objbuffers.1.yofs,x
1758
+ bpl + ; if y < 0, put it to 0
1759
+ lda #0000
1760
+
1761
+ + pha
1762
+ and #$0007
1763
+ clc
1764
+ adc objbuffers.1.height,x
1765
+ dec a
1766
+ lsr a
1767
+ lsr a
1768
+ lsr a
1769
+ inc a
1770
+ sta objtmp1
1771
+
1772
+ pla
1773
+ lsr a
1774
+ lsr a
1775
+ and #$fffe
1776
+ tay
1777
+
1778
+ lda objbuffers.1.xvel+1,x
1779
+ and #$00ff
1780
+ clc
1781
+ adc objbuffers.1.xpos+1,x
1782
+ clc
1783
+ adc objbuffers.1.xofs,x
1784
+ clc
1785
+ adc objbuffers.1.width,x
1786
+ lsr a
1787
+ lsr a
1788
+ and #$fffe
1789
+ clc
1790
+ adc.w mapadrrowlut, y
1791
+
1792
+ _oicm1dtstx13:
1793
+ tay
1794
+ clc
1795
+ adc maptile_L1d
1796
+ tax
1797
+ phb
1798
+ sep #$20
1799
+ lda maptile_L1b.b
1800
+ pha
1801
+ plb
1802
+ rep #$20
1803
+ lda 0,x
1804
+ plb
1805
+ and #$03FF ; to have only tile number (no flipx/y)
1806
+ asl a ; to have a 16 bit value for 8 pix
1807
+ tax
1808
+ lda metatilesprop, x
1809
+
1810
+ ldx objtmp2
1811
+ sta objbuffers.1.tilebprop,x
1812
+ lda objbuffers.1.tilebprop,x
1813
+ beq _oicm1dtstx14
1814
+ and #$ff00 ; keep only the high values for collision
1815
+ beq _oicm1dtstx14
1816
+
1817
+ lda objbuffers.1.xvel+1,x
1818
+ and #$00ff
1819
+ clc
1820
+ adc objbuffers.1.xpos+ 1,x
1821
+ clc
1822
+ adc objbuffers.1.xofs,x
1823
+ clc
1824
+ adc objbuffers.1.width,x
1825
+ inc a
1826
+ and #$fff8
1827
+ sec
1828
+ sbc objbuffers.1.xofs,x
1829
+ sec
1830
+ sbc objbuffers.1.width,x
1831
+ sta objbuffers.1.xpos+ 1,x
1832
+ stz objbuffers.1.xvel,x
1833
+ brl _oicm1dend
1834
+
1835
+ _oicm1dtstx14:
1836
+ tya ; go through all y available
1837
+ clc
1838
+ adc.l maprowsize
1839
+ dec objtmp1
1840
+ bne _oicm1dtstx13
1841
+ brl _oicm1dend
1842
+
1843
+ _oicm1dtstxn:
1844
+ lda objbuffers.1.ypos+1,x
1845
+ clc
1846
+ adc objbuffers.1.yofs,x
1847
+ bpl + ; if y < 0, put it to 0
1848
+ lda #0000
1849
+
1850
+ + pha
1851
+
1852
+ and #$0007
1853
+ clc
1854
+ adc objbuffers.1.height,x
1855
+ dec a
1856
+ lsr a
1857
+ lsr a
1858
+ lsr a
1859
+ inc a
1860
+ sta objtmp1
1861
+
1862
+ pla
1863
+ lsr a
1864
+ lsr a
1865
+ and #$fffe
1866
+ tay
1867
+
1868
+ lda objbuffers.1.xvel+1,x
1869
+ ora #$ff00
1870
+ clc
1871
+ adc objbuffers.1.xpos+1,x
1872
+ clc
1873
+ adc objbuffers.1.xofs,x
1874
+
1875
+ bpl _oicm1dtstxnb ; if negative, don't bother to test, will change screen
1876
+ jmp _oicm1dend
1877
+
1878
+ _oicm1dtstxnb:
1879
+ lsr a
1880
+ lsr a
1881
+ and #$fffe
1882
+ clc
1883
+ adc.w mapadrrowlut, y
1884
+
1885
+ _oicm1dtstxnc:
1886
+ tay
1887
+ clc
1888
+ adc maptile_L1d ; get direct rom value
1889
+ tax
1890
+ phb
1891
+ sep #$20
1892
+ lda maptile_L1b.b
1893
+ pha
1894
+ plb
1895
+ rep #$20
1896
+ lda 0,x
1897
+ plb
1898
+ and #$03FF ; to have only tile number (no flipx/y)
1899
+ asl a ; to have a 16 bit value for 8 pix
1900
+ tax
1901
+ lda metatilesprop, x
1902
+
1903
+ ldx objtmp2
1904
+ sta objbuffers.1.tilebprop,x
1905
+ lda objbuffers.1.tilebprop,x
1906
+ beq _oicm1dtstxnd
1907
+
1908
+ and #$ff00 ; keep only the high values for collision
1909
+ beq _oicm1dtstxnd
1910
+
1911
+ lda objbuffers.1.xvel+1,x
1912
+ ora #$ff00
1913
+ clc
1914
+ adc objbuffers.1.xpos+ 1,x
1915
+ clc
1916
+ adc objbuffers.1.xofs,x
1917
+ clc
1918
+ adc #8
1919
+ and #$fff8
1920
+ sec
1921
+ sbc objbuffers.1.xofs,x
1922
+ sta objbuffers.1.xpos+ 1,x
1923
+ stz objbuffers.1.xvel,x
1924
+
1925
+ brl _oicm1dend
1926
+
1927
+ _oicm1dtstxnd:
1928
+ tya
1929
+ clc
1930
+ adc.l maprowsize
1931
+ dec objtmp1
1932
+ bne _oicm1dtstxnc ; go through all y available
1933
+
1934
+ _oicm1dend:
1935
+ ply
1936
+ plx
1937
+ plb
1938
+ plp
1939
+ rtl
1940
+
1941
+ .ENDS
1942
+
1943
+ .SECTION ".objects3_text" superfree
1944
+
1945
+ ;---------------------------------------------------------------------------------
1946
+ ; void objLoadObjects(u8 *sourceO)
1947
+ objLoadObjects:
1948
+ php
1949
+ phb
1950
+
1951
+ phx
1952
+ phy
1953
+
1954
+ sep #$20
1955
+ lda #$0
1956
+ pha
1957
+ plb
1958
+
1959
+ rep #$20 ; load objects in temporary buffer
1960
+ lda 10,s
1961
+ sta.l $4302 ; data offset of source
1962
+ lda #(OB_MAX*5)+1
1963
+ asl a
1964
+ sta.l $4305 ; 64*5+1 *2 values
1965
+ ldy #objtmpbuf.w ; data offset of destination
1966
+ sty $2181
1967
+
1968
+ sep #$20
1969
+ lda #$7e
1970
+ sta.l $2183 ; bank address of destination
1971
+ lda 12,s
1972
+ sta.l $4304 ; bank address of source
1973
+ ldx #$8000
1974
+ stx $4300
1975
+
1976
+ lda #$01
1977
+ sta $420B
1978
+
1979
+ sep #$20
1980
+ lda #$7e
1981
+ pha
1982
+ plb
1983
+
1984
+ rep #$20
1985
+ ldx #$0000
1986
+
1987
+ _oilo1:
1988
+ lda objtmpbuf,x ; if end , get out
1989
+ cmp #$ffff
1990
+ beq _oiloend
1991
+ lda objtmpbuf+8,x ; get maxx
1992
+ pha
1993
+ lda objtmpbuf+6,x ; get minx
1994
+ pha
1995
+ lda objtmpbuf+4,x ; get type
1996
+ pha
1997
+ lda objtmpbuf+2,x ; get y
1998
+ pha
1999
+ lda objtmpbuf,x ; get x
2000
+ pha
2001
+ lda objtmpbuf+4,x ; get type again
2002
+ asl a
2003
+ asl a
2004
+ tay ; because init function is for each type
2005
+ inx
2006
+ inx
2007
+ inx
2008
+ inx
2009
+ inx
2010
+ inx
2011
+ inx
2012
+ inx
2013
+ inx
2014
+ inx
2015
+ stx objcidx ; save x
2016
+ lda objfctinit,y ; get address of init function and call it
2017
+ sta objfctcall
2018
+ lda objfctinit+2,y
2019
+ sta objfctcallh
2020
+
2021
+ jsl jslcallfct
2022
+
2023
+ pla
2024
+ pla
2025
+ pla
2026
+ pla
2027
+ pla
2028
+ ldx objcidx ; get saved x
2029
+ bra _oilo1
2030
+
2031
+ _oiloend:
2032
+ ply
2033
+ plx
2034
+ plb
2035
+ plp
2036
+ rtl
2037
+
2038
+ .ENDS
2039
+
2040
+ .SECTION ".objects4_text" superfree
2041
+
2042
+ ;---------------------------------------------------------------------------------
2043
+ ; u16 objCollidObj(u16 objhandle1, u16 objhandle2);
2044
+ ; 5-6 7-8
2045
+ objCollidObj:
2046
+ php
2047
+ phb
2048
+
2049
+ phx
2050
+ phy
2051
+
2052
+ sep #$20 ; go to object bank
2053
+ lda #$7e
2054
+ pha
2055
+ plb
2056
+
2057
+ rep #$20
2058
+ stz.w tcc__r0 ; no collision yet
2059
+
2060
+ lda 12,s ; grad the index of object 2 (7+1+2+2)
2061
+ asl a
2062
+ asl a
2063
+ asl a
2064
+ asl a
2065
+ asl a
2066
+ asl a
2067
+ tay
2068
+ lda objbuffers.1.xpos+1,y
2069
+ clc
2070
+ adc objbuffers.1.xofs,y
2071
+ bmi _oicoend ; no collision checking if second is not on screen
2072
+ sta objtmp1
2073
+
2074
+ lda 10,s ; grad the index of object 1 (5+1+2+2)
2075
+ asl a
2076
+ asl a
2077
+ asl a
2078
+ asl a
2079
+ asl a
2080
+ asl a
2081
+ tax
2082
+ lda objbuffers.1.xpos+1,x ; same computation as object 2
2083
+ clc
2084
+ adc objbuffers.1.xofs,x
2085
+ bpl _oicor1 ; if negative, will be 0
2086
+ lda #$0000
2087
+ _oicor1:
2088
+ sta objtmp2
2089
+
2090
+ cmp objtmp1 ; objleft
2091
+ bcs _oicor2
2092
+ adc objbuffers.1.width,x
2093
+
2094
+ cmp objtmp1
2095
+ bmi _oicoend
2096
+ bra _oicor3
2097
+
2098
+ _oicor2:
2099
+ lda objtmp1
2100
+ clc
2101
+ adc objbuffers.1.width,y
2102
+ cmp objtmp2
2103
+ bmi _oicoend
2104
+
2105
+ _oicor3:
2106
+ lda objbuffers.1.ypos+1,y
2107
+ clc
2108
+ adc objbuffers.1.yofs,y
2109
+ sta objtmp3
2110
+
2111
+ lda objbuffers.1.ypos+1,x ; same computation
2112
+ clc
2113
+ adc objbuffers.1.yofs,x
2114
+ bpl _oicor4 ; if negative, will be 0
2115
+ lda #$0000
2116
+ _oicor4:
2117
+ sta objtmp4
2118
+
2119
+ cmp objtmp3
2120
+ bcs _oicor5
2121
+ adc objbuffers.1.height,x
2122
+ cmp objtmp3
2123
+ bmi _oicoend
2124
+
2125
+ _oicor5:
2126
+ lda objtmp3
2127
+ clc
2128
+ adc objbuffers.1.height,y
2129
+ cmp objtmp4
2130
+ bmi _oicoend
2131
+
2132
+ lda #$0001 ; here, we have collision
2133
+ sta.w tcc__r0
2134
+
2135
+ _oicoend:
2136
+
2137
+ ply
2138
+ plx
2139
+ plb
2140
+ plp
2141
+ rtl
2142
+
2143
+ .ENDS
2144
+
2145
+ .SECTION ".objects5_text" superfree
2146
+
2147
+ ;---------------------------------------------------------------------------------
2148
+ ; void objUpdateXY(u16 objhandle)
2149
+ objUpdateXY:
2150
+ php
2151
+ phb
2152
+
2153
+ phx
2154
+
2155
+ sep #$20 ; go to bank object
2156
+ lda #$7e
2157
+ pha
2158
+ plb
2159
+
2160
+ rep #$20
2161
+ lda 8,s ; grab the index of object (5+1+2)
2162
+ asl a
2163
+ asl a
2164
+ asl a
2165
+ asl a
2166
+ asl a
2167
+ asl a
2168
+ tax
2169
+
2170
+ clc
2171
+ lda objbuffers.1.xvel,x ; xvel is negative
2172
+ bpl _oicuxy2
2173
+
2174
+ adc objbuffers.1.xpos,x
2175
+ sta objbuffers.1.xpos,x
2176
+ bcs _oicuxy1
2177
+
2178
+ sep #$20
2179
+ dec objbuffers.1.xpos+2,x
2180
+ rep #$20
2181
+ brl _oicuxy1
2182
+
2183
+ _oicuxy2:
2184
+ adc objbuffers.1.xpos,x ; xvel is positive
2185
+ sta objbuffers.1.xpos,x
2186
+ bcc _oicuxy1
2187
+ sep #$20
2188
+ inc objbuffers.1.xpos+2,x
2189
+ rep #$20
2190
+
2191
+ _oicuxy1:
2192
+ clc
2193
+ lda objbuffers.1.yvel,x ; same thing for yvel
2194
+ bpl _oicuxy3 ; yvel is negative
2195
+
2196
+ adc objbuffers.1.ypos,x
2197
+ sta objbuffers.1.ypos,x
2198
+ bcs _oicuxyend
2199
+
2200
+ sep #$20
2201
+ dec objbuffers.1.ypos+2,x
2202
+ rep #$20
2203
+ brl _oicuxyend
2204
+
2205
+ _oicuxy3:
2206
+ adc objbuffers.1.ypos,x
2207
+ sta objbuffers.1.ypos,x
2208
+ bcc _oicuxyend
2209
+ sep #$20
2210
+ inc objbuffers.1.ypos+2,x
2211
+ rep #$20
2212
+
2213
+ _oicuxyend:
2214
+ plx
2215
+ plb
2216
+ plp
2217
+ rtl
2218
+
2219
+ .ENDS
2220
+
2221
+ .SECTION ".objects6_text" superfree
2222
+
2223
+ .accu 16
2224
+ .index 16
2225
+ .16bit
2226
+
2227
+ _lutcol: ; x - height lut for normal slopes
2228
+ .db $00,$01,$02,$03,$04,$05,$06,$07 ; 0020
2229
+ .db $07,$06,$05,$04,$03,$02,$01,$00 ; 0021
2230
+ .db $04,$04,$05,$05,$06,$06,$07,$07 ; 0022
2231
+ .db $07,$07,$06,$06,$05,$05,$04,$04 ; 0023
2232
+ .db $00,$00,$01,$01,$02,$02,$03,$03 ; 0024
2233
+ .db $03,$03,$02,$02,$01,$01,$00,$00 ; 0025
2234
+ _lutcolInv:; x - height lut for h-flipped slopes
2235
+ .db $07,$06,$05,$04,$03,$02,$01,$00 ; 0020
2236
+ .db $00,$01,$02,$03,$04,$05,$06,$07 ; 0021
2237
+ .db $07,$07,$06,$06,$05,$05,$04,$04 ; 0022
2238
+ .db $04,$04,$05,$05,$06,$06,$07,$07 ; 0024
2239
+ .db $03,$03,$02,$02,$01,$01,$00,$00 ; 0023
2240
+ .db $00,$00,$01,$01,$02,$02,$03,$03 ; 0025
2241
+
2242
+ ;note: objtmp1 ; tileCount
2243
+ ;note: objtmp2 ; object handle
2244
+ ;note: objtmp3 ; tileprop
2245
+ ;note: objtmp4 ; enable slope /
2246
+ ;note: tcc__r0 $00 ; centerX
2247
+ ;note: tcc__r1 $02 ; tile difference
2248
+ ;note: tcc__r2 $04 ; centerX relative to tile
2249
+ ;note: tcc__r3 $06 ; bottom spot
2250
+ ;note: tcc__r4 $08 ; tileFlipState
2251
+ ;note: tcc__r5 $0A ; slope correction value
2252
+
2253
+ ;---------------------------------------------------------------------------------
2254
+ ; Macro definition for slope management
2255
+
2256
+ .MACRO OE_SETVELOCYTY
2257
+ lda objbuffers.1.yvel,x
2258
+ clc
2259
+ adc #GRAVITY
2260
+ cmp #MAX_Y_VELOCITY+1
2261
+ bmi \1 ; add velocity regarding if we do not reach the maximum
2262
+ lda #MAX_Y_VELOCITY
2263
+ .ENDM
2264
+
2265
+ .MACRO OE_GETTILEPROP ; arg1 == 1 store flipstate, Accumulator must contain value from mapadrrowlut
2266
+ clc
2267
+ adc maptile_L1d ; get direct rom
2268
+ tax
2269
+ phb ; push current bank to stack
2270
+ sep #$20 ; 8bit mode
2271
+ lda maptile_L1b.b ; load rom bank address from maptile definitions
2272
+ pha ; push rom bank address to stack
2273
+ plb ; set net bank address
2274
+ rep #$20 ; 16 bit mode
2275
+ lda 0,x ; get maptile
2276
+ plb ; restore bank
2277
+ .if \1 == 1
2278
+ pha
2279
+ and #$C000 ; store flip state
2280
+ sta $08
2281
+ pla
2282
+ .endif
2283
+ and #$03FF ; to have only tile number (no flipx/y)
2284
+ asl a ; to have a 16 bit value for 8 pix
2285
+ tax ; maptile to x
2286
+ lda metatilesprop, x ; get tile type solid, empty...
2287
+ .ENDM
2288
+
2289
+ .MACRO OE_GETYOFFSETLUT ; A must contain some y coordinate
2290
+ bpl + ; if y<0, put it to 0 *FIX 221130 *
2291
+ lda #0000
2292
+ + lsr a
2293
+ lsr a
2294
+ and #$FFFE ; mask to wordsize
2295
+ .ENDM
2296
+
2297
+ .MACRO OE_SETCENTERXNEW
2298
+ OE_SETCENTERXOLD
2299
+
2300
+ lda objbuffers.1.xvel,x
2301
+ bpl +
2302
+ lda objbuffers.1.xvel+1,x
2303
+ ora #$FF00
2304
+ bra ++
2305
+ + lda objbuffers.1.xvel+1,x
2306
+ and #$00ff
2307
+ bne ++
2308
+ inc a ; fix pushback when walking right
2309
+ ++ clc
2310
+ adc $00 ; new hor center position
2311
+ sta $00 ; store centerX
2312
+ .ENDM
2313
+
2314
+ .MACRO OE_SETCENTERXOLD
2315
+ lda objbuffers.1.width,x ;load width
2316
+ lsr a ;half width to calc bottom tile on middle bottom position
2317
+ clc
2318
+ adc objbuffers.1.xpos+1,x
2319
+ clc
2320
+ adc objbuffers.1.xofs,x ; new Left position
2321
+
2322
+ sta $00 ; store centerX
2323
+ .ENDM
2324
+
2325
+
2326
+ .MACRO OE_CPTETILENUM ; arg 1 == 1 reduce 1 check, arg 2 width or height
2327
+ pha
2328
+ and #$0007 ; compute the number of tiles to test
2329
+ clc
2330
+ adc \2 ; add width or height for right or bottom side
2331
+ dec a ;
2332
+ lsr a ;
2333
+ lsr a ;
2334
+ lsr a ;
2335
+ inc a ;
2336
+
2337
+ .if \1 == 1
2338
+ sec ; if slope enabled reduce one horizonmtal check
2339
+ sbc objtmp4
2340
+ bpl +
2341
+ lda #$0000
2342
+ +:
2343
+ .endif
2344
+
2345
+ sta objtmp1 ; store tilecount for testing to objtmp1
2346
+ pla ; compute the offset line for y
2347
+ lsr a
2348
+ lsr a
2349
+ and #$FFFE
2350
+ .ENDM
2351
+
2352
+ .MACRO OE_SETYPOS ; arg == 1 bottom else 0 top
2353
+ lda objbuffers.1.yvel+1,x ; load vel y to a ;; calc new position
2354
+ .if \1 == 1 ; arg == 1 bottom else top
2355
+ and #$00ff
2356
+ .else
2357
+ ora #$ff00
2358
+ .endif
2359
+ clc
2360
+ adc objbuffers.1.ypos+1,x ;add pos to a
2361
+ clc ; clear carry \
2362
+ adc objbuffers.1.yofs,x ; add offset y to a | for avoid rounding errors
2363
+
2364
+ .if \1 == 1 ; arg == 1 bottom else 0 top
2365
+ clc ; clear carry |
2366
+ adc objbuffers.1.height,x ; add heigth to a /
2367
+ inc a ; a +=1
2368
+ .else
2369
+ clc
2370
+ adc #8
2371
+ .endif
2372
+
2373
+ and #$fff8 ; mask to blocksize
2374
+ sec ; set carry \
2375
+ sbc objbuffers.1.yofs,x ; subtract offset y from a | for avoid rounding errors
2376
+
2377
+ .if \1 == 1 ; arg == 1 bottom else 0 top
2378
+ sec ; set carry |
2379
+ sbc objbuffers.1.height,x ; subtract height y from a /
2380
+ .endif
2381
+ sta objbuffers.1.ypos+1,x
2382
+ stz objbuffers.1.yvel,x
2383
+ .ENDM
2384
+
2385
+ .MACRO OE_ADDX ; arg == 1 right else 0 left
2386
+ lda objbuffers.1.xvel+1,x ; load vel y to a ;; calc new position
2387
+ .if \1 == 1 ; arg == 1 right else 0 left
2388
+ and #$00ff
2389
+ .else
2390
+ ora #$ff00
2391
+ .endif
2392
+ clc
2393
+ adc objbuffers.1.xpos+1,x ;add pos to a
2394
+ clc ; clear carry \
2395
+ adc objbuffers.1.xofs,x ; add offset y to a | for avoid rounding errors
2396
+
2397
+ .if \1 == 1 ; arg == 1 right else 0 left
2398
+ clc ; clear carry |
2399
+ adc objbuffers.1.width,x ; add width to a /
2400
+ .endif
2401
+ .ENDM
2402
+
2403
+
2404
+ .MACRO OE_SETXPOS ; arg == 1 right else 0 left
2405
+ OE_ADDX \1
2406
+ .if \1 == 1
2407
+ inc a ; a +=1
2408
+ .else
2409
+ clc
2410
+ adc #8
2411
+ .endif
2412
+
2413
+ and #$fff8 ; mask to blocksize
2414
+ sec ; set carry \
2415
+ sbc objbuffers.1.xofs,x ; subtract offset y from a | for avoid rounding errors
2416
+
2417
+ .if \1 == 1 ; arg == 1 bottom else 0 top
2418
+ sec ; set carry |
2419
+ sbc objbuffers.1.width,x ; subtract width x from a /
2420
+ .endif
2421
+ sta objbuffers.1.xpos+1,x
2422
+ stz objbuffers.1.xvel,x
2423
+ .ENDM
2424
+
2425
+ .MACRO OE_SETOBJHANDLE_STK ; arg 1 = stackaddress
2426
+ lda \1,s ; grad the index of object (5+1+2+2)
2427
+ xba
2428
+ lsr a
2429
+ lsr a
2430
+ tax ; transfer obj index to X
2431
+ sta objtmp2
2432
+ .ENDM
2433
+
2434
+ ;---------------------------------------------------------------------------------
2435
+ ; void objCollidMapWithSlopes(u16 objhandle)
2436
+ objCollidMapWithSlopes:
2437
+ php
2438
+ phb
2439
+ phx
2440
+ phy
2441
+ sep #$20
2442
+ lda #$7e
2443
+ pha
2444
+ plb
2445
+ rep #$20 ; A 16 bits
2446
+ stz $0A
2447
+
2448
+ OE_SETOBJHANDLE_STK 10
2449
+ stz objtmp4 ; disable slope logic -> 0
2450
+
2451
+ _oicmsPrecheck
2452
+ ldx objtmp2 ; load objecthandle
2453
+ lda objbuffers.1.yvel,x ; yvel
2454
+ bpl _oicmsCheckSlopes1 ; branch positive Y check >=0 -> if object is falling
2455
+ jmp _oicmsCheckXvelNotZero ; continue without slopes
2456
+
2457
+ _oicmsCheckSlopes1 ; calculate Middlebottom
2458
+ stz objtmp1 ; zero out objtmp1 for
2459
+ OE_SETCENTERXOLD ; set center x
2460
+ lda objbuffers.1.ypos+1,x ; load y pos
2461
+ clc
2462
+ adc objbuffers.1.yofs,x ; add y offs
2463
+ clc
2464
+ adc objbuffers.1.height,x ; add height
2465
+ sta $06 ; store bottom spot
2466
+ dec a ; one pixel up
2467
+
2468
+ OE_GETYOFFSETLUT
2469
+ sta $02 ; presave tile difference
2470
+ tay ; transfer it to y
2471
+
2472
+ _oicmsCheckSlopes11
2473
+ lda $00 ; load centerX
2474
+ lsr a
2475
+ lsr a
2476
+ and #$FFFE
2477
+ clc
2478
+ adc.w mapadrrowlut, y
2479
+ tay
2480
+ OE_GETTILEPROP 0
2481
+ sta objtmp3
2482
+
2483
+ _oicmsCheckSlopes12
2484
+ and #T_SLOPES ; check if its slope
2485
+ beq ++ ; if not next try
2486
+
2487
+ ldx objtmp2 ; load object handle
2488
+ lda objtmp1
2489
+ bne + ; if 0 check if new Y pos is on same tile
2490
+ lda objbuffers.1.yvel+1,x ; load handle
2491
+ and #$00ff
2492
+ clc
2493
+ adc $06 ; add bottom spot
2494
+ dec a
2495
+ OE_GETYOFFSETLUT
2496
+ tay
2497
+ cmp $02 ; --\ if new Y Tile == old Y Tile
2498
+ beq _oicmsEnableResolveSlope ; | leave check
2499
+ lda objbuffers.1.yvel+1,x ; |
2500
+ and #$FF07 ; |
2501
+ stz objbuffers.1.yvel+1,x ; / otherwise zero yvel out
2502
+
2503
+ + bra _oicmsEnableResolveSlope ; enable resolve slopes
2504
+
2505
+ ++ lda objtmp1 ; load tilecount
2506
+ bne _oicmsCheckXvelNotZero ; tilecount is not 0
2507
+
2508
+ lda objbuffers.1.yvel+1,x
2509
+ and #$00ff
2510
+ clc
2511
+ adc $06 ; add bottomspot
2512
+ dec a
2513
+ OE_GETYOFFSETLUT
2514
+ tay
2515
+
2516
+ inc objtmp1
2517
+ brl _oicmsCheckSlopes11
2518
+
2519
+ _oicmsEnableResolveSlope: ; enable slope resolve
2520
+ inc objtmp4 ;
2521
+
2522
+ _oicmsCheckXvelNotZero: ; check xvel != 0
2523
+ ldx objtmp2 ; load objecthandle
2524
+ lda objbuffers.1.xvel,x ; if xvel>=0 -> moving right
2525
+ bne +
2526
+ brl _oicmsCheckYvelDirection ; branch 0
2527
+ + bpl _oicmsXRightReduceFriction ; xvel > 0 moving right
2528
+ jmp _oicmsXLeftReduceFriction
2529
+
2530
+ _oicmsXRightReduceFriction: ; moving right
2531
+ sec
2532
+ sbc objfriction ; reduce xvel by friction
2533
+ bpl _oicmststx12 ; xvel still > 0 ?
2534
+ stz objbuffers.1.xvel,x ;
2535
+ jmp _oicmsCheckYvelDirection
2536
+
2537
+ _oicmststx12: ; resolve
2538
+ sta objbuffers.1.xvel,x ; store new xvel with reduced objfriction
2539
+ lda objbuffers.1.ypos+1,x ; load y position
2540
+ clc
2541
+ adc objbuffers.1.yofs,x ; add y offset
2542
+ bpl + ; if y<0, put it to 0 *FIX 20221201 */
2543
+ lda #0000
2544
+
2545
+ + OE_CPTETILENUM 1 objbuffers.1.height,x
2546
+ bne +
2547
+ jmp _oicmsCheckYvelDirection;
2548
+
2549
+ + tay ; tile number to Y register
2550
+ ;Brain: CheckRight
2551
+ OE_ADDX 1
2552
+ lsr a
2553
+ lsr a
2554
+ and #$fffe
2555
+ clc
2556
+ adc.w mapadrrowlut, y
2557
+
2558
+ _oicmsXResolveColRight: ; Apply Collision Right
2559
+ tay
2560
+ OE_GETTILEPROP 0
2561
+
2562
+ ldx objtmp2 ; load objecthandle
2563
+ sta objbuffers.1.tilebprop,x
2564
+ lda objbuffers.1.tilebprop,x
2565
+ beq _oicmsXSelectNextTile
2566
+ and #$ff00 ; keep only the high values for collision
2567
+ beq _oicmsXSelectNextTile
2568
+
2569
+ OE_SETXPOS 1 ; arg == 1 resolve right collision
2570
+ brl _oicmsCheckYvelDirection
2571
+
2572
+ _oicmsXSelectNextTile:
2573
+ tya ; go through all y available
2574
+ clc
2575
+ adc.l maprowsize
2576
+ dec objtmp1
2577
+ bne _oicmsXResolveColRight
2578
+ brl _oicmsCheckYvelDirection
2579
+
2580
+ _oicmsXLeftReduceFriction: ; moving left (xvel<0)
2581
+ clc
2582
+ adc objfriction
2583
+ bmi _oicmststxna
2584
+ stz objbuffers.1.xvel,x ; currently it is not ok to go left
2585
+ brl _oicmsCheckYvelDirection
2586
+
2587
+ _oicmststxna:
2588
+ sta objbuffers.1.xvel,x
2589
+ lda objbuffers.1.ypos+1,x
2590
+ clc
2591
+ adc objbuffers.1.yofs,x
2592
+ bpl + ; if y<0, put it to 0 *FIX 20221201 */
2593
+ lda #0000
2594
+
2595
+ + OE_CPTETILENUM 1 objbuffers.1.height,x;
2596
+ ;Brain: CheckLeft
2597
+ tay
2598
+
2599
+ OE_ADDX 0
2600
+ bpl _oicmststxnb ; if negative, don't bother to test, will change screen
2601
+ jmp _oicmsCheckYvelDirection
2602
+
2603
+ _oicmststxnb:
2604
+ lsr a
2605
+ lsr a
2606
+ and #$fffe
2607
+ clc
2608
+ adc.w mapadrrowlut, y
2609
+
2610
+ _oicmststxnc: ; Apply Collision Left
2611
+ tay
2612
+ OE_GETTILEPROP 0
2613
+ ldx objtmp2 ; load objecthandle
2614
+ sta objbuffers.1.tilebprop,x
2615
+ lda objbuffers.1.tilebprop,x
2616
+ beq _oicmststxnd
2617
+
2618
+ and #$ff00 ; keep only the high values for collision
2619
+ beq _oicmststxnd
2620
+ OE_SETXPOS 0 ; arg == 0 resolve left collision
2621
+
2622
+ brl _oicmsCheckYvelDirection
2623
+
2624
+ _oicmststxnd:
2625
+ tya
2626
+ clc
2627
+ adc.l maprowsize
2628
+ dec objtmp1
2629
+ bne _oicmststxnc ; go through all y available
2630
+ brl _oicmsCheckYvelDirection
2631
+
2632
+ _oicmsResolveSlope1:
2633
+ lda objbuffers.1.yvel+1,x
2634
+ and #$00ff
2635
+ clc
2636
+ adc $06 ; add bottom spot
2637
+ dec a
2638
+ sta objtmp4
2639
+
2640
+ OE_GETYOFFSETLUT
2641
+ tay ; transfer it to y
2642
+ OE_SETCENTERXNEW ; calculate
2643
+ lsr a
2644
+ lsr a
2645
+ and #$FFFE
2646
+ clc
2647
+ adc.w mapadrrowlut, y
2648
+ tay
2649
+ OE_GETTILEPROP 1 ; arg1 == 1 store tile flipstate
2650
+ sta objtmp3
2651
+ cmp #$0030
2652
+ bcs _oicmsPrepYvelDown
2653
+ cmp #$0020
2654
+ bcc _oicmsPrepYvelDown
2655
+
2656
+ _oicmsResolveSlope2:
2657
+ lda $00 ; load centerX
2658
+ and #$0007
2659
+ sta $04 ; store centerX relative to tile
2660
+
2661
+ lda objtmp3 ; load tileprop index
2662
+ sec
2663
+ sbc #T_SLOPES ; set index of _lutcol 0-5
2664
+ asl a ; \
2665
+ asl a ; | offseting for _lutcol address
2666
+ asl a ; /
2667
+ adc $04 ; offsets to tileperfect
2668
+ tax ; transfer index _lutcol + tileoffset to x register
2669
+
2670
+ lda $08 ; load flip state
2671
+ sep #$20 ; set to 8 bit
2672
+ xba ; swap High to Low
2673
+ and #$40 ; Check if tile is horizontaly flipped
2674
+ beq +
2675
+ lda.l _lutcol,x ; get Slope y value on x pixel not flipped
2676
+ bra ++
2677
+ + lda.l _lutcolInv,x ; get Slope y value on x pixel flipped
2678
+ ++ sta $0A ; store slope correction value
2679
+
2680
+ _oicmsResolveSlope3:
2681
+ ldx objtmp2
2682
+ lda objtmp4 ; posY
2683
+
2684
+ and #$07
2685
+ cmp $0A ; compare to correction value
2686
+ rep #$20
2687
+ bcs +
2688
+ brl _oicms61
2689
+
2690
+ + lda objtmp3
2691
+ sta objbuffers.1.tilestand,x ; store the tile we are standing on
2692
+
2693
+ lda objtmp4
2694
+ and #$fff8
2695
+ sec ; set carry \
2696
+ sbc objbuffers.1.yofs,x ; subtract offset y from a | for avoid rounding errors
2697
+ sec ; set carry |
2698
+ sbc objbuffers.1.height,x ; subtract height y from a /
2699
+ sep #$20
2700
+ clc
2701
+ adc $0A ; slope correction value
2702
+ rep #$20
2703
+ inc a
2704
+
2705
+ sta objbuffers.1.ypos+1,x
2706
+ stz objbuffers.1.yvel,x
2707
+ ;jmp _oicmsend
2708
+ brl _oicmsend
2709
+
2710
+ _oicmsCheckYvelDirection:
2711
+ ldx objtmp2 ; restore object index to
2712
+ lda objtmp4 ; if slope resolve is set
2713
+ beq +
2714
+ brl _oicmsResolveSlope1
2715
+ + lda objbuffers.1.yvel,x
2716
+ bpl _oicms11 ; yvel > 0 moving down
2717
+ jmp _oicmststyn ; yvel moving up
2718
+
2719
+ _oicmsPrepYvelDown:
2720
+ rep #$20
2721
+ ldx objtmp2
2722
+ stz objtmp4
2723
+ lda objbuffers.1.yvel,x
2724
+
2725
+ _oicms11:
2726
+ xba
2727
+ and #$00FF
2728
+ clc
2729
+ adc objbuffers.1.ypos+1,x ; add y pos
2730
+ clc
2731
+ adc objbuffers.1.yofs,x ; add y offs
2732
+ clc
2733
+ adc objbuffers.1.height,x ; add ; a contains y velocity so enw ypos
2734
+ bpl + ; if y<0, put it to 0 *FIX 221130 *
2735
+ lda #0000
2736
+
2737
+ + lsr a
2738
+ lsr a
2739
+ and #$FFFE ; only even numbers
2740
+ tay ; transfer it to y
2741
+
2742
+ lda objbuffers.1.xpos+1,x ; load x pos
2743
+ clc
2744
+ adc objbuffers.1.xofs,x ; add offset (left edge of object)
2745
+ OE_CPTETILENUM 0 objbuffers.1.width,x
2746
+ clc
2747
+ adc.w mapadrrowlut, y ; add row
2748
+
2749
+ tay
2750
+ OE_GETTILEPROP 0
2751
+ sta objtmp3
2752
+ bra _oicms21 ; goto tile type check
2753
+
2754
+ _oicms2:
2755
+ tya
2756
+ OE_GETTILEPROP 0
2757
+ sta objtmp3
2758
+
2759
+ _oicms21:
2760
+ ldx objtmp2
2761
+ sta objbuffers.1.tilesprop,x
2762
+ lda objbuffers.1.tilesprop,x
2763
+ cmp #T_LADDER ; if ladder, well avoid doing stuffs
2764
+ beq _oicms3
2765
+ cmp #T_PLATE ; if on a plate, do same thing
2766
+ beq _oicms3
2767
+
2768
+ cmp #T_FIRES ; if fire, player is burning
2769
+ bne _oicms22
2770
+ lda #ACT_BURN ; player is now dying, no more checking
2771
+ sta objbuffers.1.action
2772
+ jmp _oicmsend
2773
+
2774
+ _oicms22:
2775
+ cmp #T_SPIKE ; if spike, player is dying too
2776
+ bne _oicms23
2777
+ lda #ACT_DIE
2778
+ sta objbuffers.1.action
2779
+ jmp _oicmsend
2780
+
2781
+ _oicms23: ; check tile collision
2782
+ and #$ff00 ; keep only the high values for collision
2783
+ beq _oicms4 ; if no collision
2784
+
2785
+ _oicms3: ; positioning on bottom collision
2786
+ lda objtmp3
2787
+ sta objbuffers.1.tilestand,x ; store the tile we are standing on
2788
+ OE_SETYPOS 1 ;
2789
+ jmp _oicmsend
2790
+
2791
+ _oicms4: ; increment Y-Register for next tile check on x-axis
2792
+ rep #$20 ; continue to test the tiles on x
2793
+ iny ; y +=1
2794
+ iny ; y +=1
2795
+ dec objtmp1 ; tilecount on x to check -= 1
2796
+ beq _oicms5
2797
+ brl _oicms2
2798
+
2799
+ _oicms5:
2800
+ ldx objtmp2 ; not standing on anything or ladder, now falling if not climbing
2801
+ stz objbuffers.1.tilestand,x
2802
+
2803
+ lda objbuffers.1.tilesprop,x ; need again to verify if not tile standing
2804
+ beq _oicms61
2805
+ lda objbuffers.1.action,x ; if not climbing, well doing like if falling
2806
+ and #ACT_CLIMB
2807
+ beq _oicms61
2808
+ brl _oicmsend
2809
+
2810
+ _oicms61:
2811
+ OE_SETVELOCYTY _oicms6
2812
+
2813
+ _oicms6:
2814
+ sta objbuffers.1.yvel,x
2815
+ brl _oicmsend
2816
+
2817
+ _oicmststyn: ; yvel<0, object is moving upwards----------------------------
2818
+ stz objbuffers.1.tilestand,x ; zero out "tilestand"
2819
+ xba
2820
+ ora #$FF00
2821
+ clc
2822
+ adc objbuffers.1.ypos+1,x
2823
+ clc
2824
+ adc objbuffers.1.yofs,x
2825
+ bpl + ; if y < 0, put it to 0 *FIX 221126*
2826
+
2827
+ lda #0000
2828
+ + lsr a
2829
+ lsr a
2830
+ and #$FFFE
2831
+ tay
2832
+
2833
+ lda objbuffers.1.xpos+1,x
2834
+ clc
2835
+ adc objbuffers.1.xofs,x
2836
+
2837
+ OE_CPTETILENUM 0 objbuffers.1.width
2838
+
2839
+ clc
2840
+ adc.w mapadrrowlut, y
2841
+ tay
2842
+
2843
+ OE_GETTILEPROP 0
2844
+ bra _oicmststyn2 ; speedup, saves some cycles
2845
+
2846
+ _oicmststyn1:
2847
+ tya
2848
+ OE_GETTILEPROP 0
2849
+
2850
+ _oicmststyn2:
2851
+ ldx objtmp2
2852
+ sta objbuffers.1.tilesprop,x
2853
+ lda objbuffers.1.tilesprop,x
2854
+ cmp #T_LADDER ; if ladder, well avoid doing stuffs
2855
+ beq _oicmststyn4
2856
+
2857
+ and #$ff00 ; keep only the high values for collision
2858
+ beq _oicmststyn3
2859
+
2860
+ OE_SETYPOS 0 ;arg 0 == top correction
2861
+ bra _oicmststyn4
2862
+
2863
+ _oicmststyn3: ; continue to test next tile on x axis
2864
+ iny ; increase Y Register for next
2865
+ iny
2866
+ dec objtmp1 ; decrease tilecount
2867
+ bne _oicmststyn1 ; if tilecount not 0 jump to _oicmststyn1 for next collision test
2868
+
2869
+ _oicmststyn4: ; not standing on anything, now falling by adding gravity
2870
+ ldx objtmp2 ; load objecthandle
2871
+ OE_SETVELOCYTY _oicmststyn5
2872
+ _oicmststyn5:
2873
+ sta objbuffers.1.yvel,x
2874
+
2875
+ _oicmsend:
2876
+ ply
2877
+ plx
2878
+ plb
2879
+ plp
2880
+ rtl
2881
+ .ENDS