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,4990 @@
1
+ /****************************************************************************
2
+ * __ *
3
+ * ____ ___ ____ __ ______ ___ ____ ____/ / *
4
+ * / __ `__ \/ __ `/ |/ / __ `__ \/ __ \/ __ / *
5
+ * / / / / / / /_/ /> </ / / / / / /_/ / /_/ / *
6
+ * /_/ /_/ /_/\__,_/_/|_/_/ /_/ /_/\____/\__,_/ *
7
+ * *
8
+ * Module Processing *
9
+ * *
10
+ * Copyright (c) 2008, Mukunda Johnson (mukunda@maxmod.org) *
11
+ * *
12
+ * Permission to use, copy, modify, and/or distribute this software for any *
13
+ * purpose with or without fee is hereby granted, provided that the above *
14
+ * copyright notice and this permission notice appear in all copies. *
15
+ * *
16
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES *
17
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF *
18
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR *
19
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES *
20
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN *
21
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *
22
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. *
23
+ ****************************************************************************/
24
+
25
+ #include "mp_format_mas.inc"
26
+ #include "mp_mas_structs.inc"
27
+ #include "mp_defs.inc"
28
+ #include "mp_macros.inc"
29
+
30
+ //-----------------------------------------------------------------------------
31
+ #ifdef SYS_GBA
32
+ //-----------------------------------------------------------------------------
33
+
34
+ #include "mp_mixer_gba.inc"
35
+ #include "swi_gba.inc"
36
+
37
+ //-----------------------------------------------------------------------------
38
+ #endif
39
+ //-----------------------------------------------------------------------------
40
+
41
+ //-----------------------------------------------------------------------------
42
+ #ifdef SYS_NDS
43
+ //-----------------------------------------------------------------------------
44
+ #include "mp_mixer_ds.inc"
45
+ #include "swi_nds.inc"
46
+ //-----------------------------------------------------------------------------
47
+ #endif
48
+ //-----------------------------------------------------------------------------
49
+
50
+
51
+ .equ S3M_FREQ_DIVIDER ,57268224 // (s3m,xm,it)
52
+ .equ MOD_FREQ_DIVIDER_PAL ,56750314 // (mod)
53
+ .equ MOD_FREQ_DIVIDER_NTSC ,57272724 // (---)
54
+
55
+
56
+
57
+ /******************************************************************************
58
+ *
59
+ * Memory
60
+ *
61
+ ******************************************************************************/
62
+
63
+
64
+
65
+ .BSS
66
+ .ALIGN 2
67
+
68
+ /******************************************************************************
69
+ * mmLayerMain
70
+ *
71
+ * Layer data for module playback.
72
+ ******************************************************************************/
73
+ .global mmLayerMain
74
+ mmLayerMain: .space MPL_SIZE
75
+
76
+ /******************************************************************************
77
+ * mmLayerSub
78
+ *
79
+ * Layer data for jingle playback.
80
+ ******************************************************************************/
81
+ .global mmLayerSub
82
+ mmLayerSub: .space MPL_SIZE
83
+
84
+ /******************************************************************************
85
+ * mpp_vars
86
+ *
87
+ * Holds intermediate data during the module processing.
88
+ ******************************************************************************/
89
+ .global mpp_vars
90
+ mpp_vars: .space MPV_SIZE
91
+
92
+ .ALIGN 2
93
+
94
+ /******************************************************************************
95
+ * mpp_layerp
96
+ *
97
+ * Pointer to layer data during processing.
98
+ ******************************************************************************/
99
+ .global mpp_layerp
100
+ mpp_layerp: .space 4
101
+
102
+ /******************************************************************************
103
+ * mpp_channels
104
+ *
105
+ * Pointer to channel array during processing
106
+ ******************************************************************************/
107
+ .global mpp_channels
108
+ mpp_channels: .space 4
109
+
110
+ /******************************************************************************
111
+ * mpp_resolution
112
+ *
113
+ * Speed divider for DS timing.
114
+ ******************************************************************************/
115
+
116
+ mpp_resolution: .space 4
117
+
118
+ /******************************************************************************
119
+ * mm_mastertempo
120
+ *
121
+ * Master tempo scaler.
122
+ ******************************************************************************/
123
+
124
+ mm_mastertempo: .space 4
125
+
126
+ /******************************************************************************
127
+ * mm_masterpitch
128
+ *
129
+ * Master pitch scaler.
130
+ ******************************************************************************/
131
+
132
+ mm_masterpitch: .space 4
133
+
134
+ /******************************************************************************
135
+ * mpp_nchannels
136
+ *
137
+ * Number of channels in layer
138
+ ******************************************************************************/
139
+ .global mpp_nchannels
140
+ mpp_nchannels: .space 1
141
+
142
+ /******************************************************************************
143
+ * mpp_clayer
144
+ *
145
+ * Layer selection, 0 = main, 1 = sub
146
+ ******************************************************************************/
147
+ .global mpp_clayer
148
+ mpp_clayer: .space 1
149
+
150
+ /******************************************************************************
151
+ * mm_achannels, mm_pchannels, mm_num_mch, mm_num_ach, mm_schannels
152
+ *
153
+ * Channel data/sizes, don't move these around--see mmInit first
154
+ ******************************************************************************/
155
+ .ALIGN 2
156
+
157
+ .global mm_achannels, mm_pchannels, mm_num_mch, mm_num_ach, mm_schannels
158
+
159
+ mm_achannels: .space 4
160
+ mm_pchannels: .space 4
161
+ mm_num_mch: .space 4
162
+ mm_num_ach: .space 4
163
+ mm_schannels: .space MP_SCHANNELS*MCH_SIZE
164
+
165
+
166
+
167
+ /******************************************************************************
168
+ *
169
+ * Macros
170
+ *
171
+ ******************************************************************************/
172
+
173
+
174
+ /******************************************************************************
175
+ * mpp_InstrumentPointer
176
+ *
177
+ * Calculate instrument address.
178
+ * Requires r8 = layer
179
+ * Returns in r0
180
+ * Trashes r1, r2
181
+ ******************************************************************************/
182
+ .macro mpp_InstrumentPointer
183
+ mov r1, r8
184
+ ldr r2,[r1,#MPL_SONGADR]
185
+ ldr r1,[r1,#MPL_INSTTABLE]
186
+ lsl r0, #2
187
+ ldr r0,[r1,r0]
188
+ add r0, r2
189
+ .endm
190
+
191
+ /******************************************************************************
192
+ * mpp_SamplePointer
193
+ *
194
+ * Calculate sample address.
195
+ * Requires r8 = layer
196
+ * Returns in r0
197
+ * Trashes r1, r2
198
+ ******************************************************************************/
199
+ .macro mpp_SamplePointer
200
+ mov r1, r8
201
+ ldr r2,[r1,#MPL_SONGADR]
202
+ ldr r1,[r1,#MPL_SAMPTABLE]
203
+ lsl r0, #2
204
+ ldr r0,[r1,r0]
205
+ add r0, r2
206
+ .endm
207
+
208
+
209
+
210
+ /******************************************************************************
211
+ *
212
+ * Program
213
+ *
214
+ ******************************************************************************/
215
+
216
+
217
+
218
+ .TEXT
219
+ .ALIGN 2
220
+
221
+ /******************************************************************************
222
+ * mpp_resetchannels(...)
223
+ *
224
+ * Reset channel data, and any active channels linked to the layer.
225
+ * Requires r5 = layer, r6 = channels, r7 = #channels
226
+ ******************************************************************************/
227
+ .thumb_func
228
+ mpp_resetchannels:
229
+
230
+ push {r4-r6}
231
+
232
+ mov r0, r6 // clear channel data to 0
233
+ mov r1, #MCH_SIZE/4 //
234
+ mul r1, r7 //
235
+ mov r2, #0 //
236
+ 1: stmia r0!, {r2} //
237
+ sub r1, #1 //
238
+ bne 1b //
239
+
240
+ mov r0, r6 // reset channel indexes
241
+ sub r0, #MCH_SIZE-MCH_ALLOC //
242
+ mov r1, #MCH_SIZE //
243
+ mul r1, r7 //
244
+ mov r2, #255 //
245
+ 1: strb r2, [r0, r1] //
246
+ sub r1, #MCH_SIZE //
247
+ bne 1b //
248
+
249
+ GET_MIXCH r4 // reset active channels linked to this layer
250
+ ldr r6,=mpp_clayer //
251
+ ldrb r6, [r6] //
252
+
253
+ #ifdef SYS_GBA // disabled status differs between systems
254
+ ldr r5,=1<<31 //
255
+ #endif //
256
+ #ifdef SYS_NDS //
257
+ mov r5, #0 //
258
+ #endif //
259
+
260
+ ldr r0,=mm_achannels // r0 = achannels
261
+ ldr r0, [r0] //
262
+ ldr r1,=mm_num_ach // r1 = #achannels
263
+ ldr r1, [r1] //
264
+ mov r2, #0 // r2 = 0 (for clearing)
265
+
266
+ .mpic_loop3:
267
+ ldrb r3, [r0, #MCA_FLAGS] // test if layer matches
268
+ lsr r3, #6 //
269
+ cmp r3, r6 //
270
+ bne .mpic_l3_skip //
271
+
272
+ mov r3, #MCA_SIZE-4 // clear achannel data to zero
273
+ .mpic_loop4: //
274
+ str r2, [r0, r3] //
275
+ sub r3, r3, #4 //
276
+ bpl .mpic_loop4 //
277
+
278
+ str r5, [r4] // disable mixer channel
279
+
280
+ .mpic_l3_skip:
281
+
282
+ add r0, #MCA_SIZE // increment stuff and loop
283
+ add r4, #MIXER_CHN_SIZE //
284
+ //
285
+ sub r1, #1 //
286
+ bne .mpic_loop3 //
287
+
288
+ pop {r4-r6}
289
+ bx lr
290
+
291
+ #ifdef SYS_NDS
292
+
293
+ /******************************************************************************
294
+ * mm_reset_channels()
295
+ *
296
+ * Reset all channels.
297
+ ******************************************************************************/
298
+ .global mm_reset_channels
299
+ .thumb_func
300
+ mm_reset_channels:
301
+
302
+ push {lr}
303
+
304
+ ldr r0,=mm_achannels // clear active channel data
305
+ ldr r0, [r0] //
306
+ mov r1, #0 //
307
+ ldr r2,=MCA_SIZE*32/4 //
308
+ //
309
+ 1: stmia r0!, {r1} //
310
+ sub r2, #1 //
311
+ bne 1b //
312
+
313
+ ldr r0,=mm_pchannels // reset channel allocation
314
+ ldr r0, [r0] //
315
+ mov r1, #255 //
316
+ mov r2, #32 //
317
+ //
318
+ 1: strb r1, [r0, #MCH_ALLOC] //
319
+ add r0, #MCH_SIZE //
320
+ sub r2, #1 //
321
+ bne 1b //
322
+
323
+ ldr r0,=mm_schannels // reset channel allocation
324
+ mov r2, #4 //
325
+ //
326
+ 1: strb r1, [r0, #MCH_ALLOC] //
327
+ add r0, #MCH_SIZE //
328
+ sub r2, #1 //
329
+ bne 1b //
330
+
331
+ bl mmResetEffects
332
+
333
+ pop {r3}
334
+ bx r3
335
+
336
+ #endif
337
+
338
+ /******************************************************************************
339
+ * mpp_suspend()
340
+ *
341
+ * Suspend main module and associated channels.
342
+ ******************************************************************************/
343
+ .thumb_func
344
+ mpp_suspend:
345
+
346
+ push {r4,lr}
347
+ ldr r0,=mm_achannels
348
+ ldr r0, [r0]
349
+ GET_MIXCH r1
350
+ ldr r2,=mm_num_ach
351
+ ldr r2, [r2]
352
+ mov r4, #0
353
+ .mpps_loop:
354
+ ldrb r3, [r0, #MCA_FLAGS]
355
+ lsr r3, #6
356
+ bne .mpps_next
357
+ #ifdef SYS_GBA
358
+ str r4, [r1, #MIXER_CHN_FREQ]
359
+ #else
360
+ strh r4, [r1, #MIXER_CHN_FREQ]
361
+ strh r4, [r1, #MIXER_CHN_VOL]
362
+ #endif
363
+
364
+ .mpps_next:
365
+ add r0, #MCA_SIZE
366
+ add r1, #MIXER_CHN_SIZE
367
+ sub r2, #1
368
+ bne .mpps_loop
369
+
370
+ pop {r4, pc}
371
+
372
+ /******************************************************************************
373
+ *
374
+ * NDS System
375
+ *
376
+ ******************************************************************************/
377
+
378
+ //-----------------------------------------------------------------------------
379
+ #ifdef SYS_NDS
380
+ //-----------------------------------------------------------------------------
381
+
382
+ /******************************************************************************
383
+ * mmStart( module_ID, mode )
384
+ *
385
+ * Start module playback.
386
+ *
387
+ * module_ID : Index of module.
388
+ * mode : Playback mode.
389
+ ******************************************************************************/
390
+ .global mmStart
391
+ .thumb_func
392
+ mmStart:
393
+
394
+ mov r2, #0
395
+ .mpps_backdoor:
396
+ lsl r0, #2
397
+ ldr r3,=mmModuleBank
398
+ ldr r3, [r3]
399
+ ldr r0, [r3, r0]
400
+
401
+ cmp r0, #0
402
+ beq 1f
403
+ add r0, #8
404
+ b mmPlayModule
405
+ 1: bx lr
406
+
407
+ /******************************************************************************
408
+ * mmJingle( module_ID )
409
+ *
410
+ * Play module as jingle.
411
+ *
412
+ * module_ID : Index of module
413
+ ******************************************************************************/
414
+ .global mmJingle
415
+ .thumb_func
416
+ mmJingle:
417
+
418
+ mov r2, #1
419
+ mov r1, #MPP_PLAY_ONCE
420
+ b .mpps_backdoor
421
+
422
+ //-----------------------------------------------------------------------------
423
+ #endif
424
+ //-----------------------------------------------------------------------------
425
+
426
+ /******************************************************************************
427
+ *
428
+ * GBA System
429
+ *
430
+ ******************************************************************************/
431
+
432
+ //-----------------------------------------------------------------------------
433
+ #ifdef SYS_GBA
434
+ //-----------------------------------------------------------------------------
435
+
436
+ /******************************************************************************
437
+ * mmStart( module_ID, mode )
438
+ *
439
+ * Start module playback
440
+ *
441
+ * module_ID : id of module
442
+ * mode : mode of playback
443
+ ******************************************************************************/
444
+ .global mmStart
445
+ .thumb_func
446
+ mmStart:
447
+
448
+ mov r2, #0
449
+ .mpps_backdoor:
450
+ push {r2}
451
+ ldr r2,=mp_solution @ resolve song address
452
+ ldr r2, [r2]
453
+ ldrh r3, [r2, #0]
454
+ lsl r3, #2
455
+ add r3, #12
456
+ add r3, r2
457
+ lsl r0, #2
458
+ add r0, r3
459
+ ldr r0, [r0]
460
+ add r0, r2
461
+
462
+ pop {r2}
463
+
464
+ add r0, #8
465
+
466
+ b mmPlayModule
467
+ 1: bx lr
468
+
469
+ /******************************************************************************
470
+ * mmJingle( module_ID )
471
+ *
472
+ * Start jingle playback
473
+ *
474
+ * module_ID : index of module
475
+ ******************************************************************************/
476
+ .global mmJingle
477
+ .thumb_func
478
+ mmJingle:
479
+
480
+ mov r2, #1
481
+ mov r1, #MPP_PLAY_ONCE
482
+ b .mpps_backdoor
483
+
484
+ //-----------------------------------------------------------------------------
485
+ #endif
486
+ //-----------------------------------------------------------------------------
487
+
488
+ /******************************************************************************
489
+ * mmPlayModule( address, mode, layer )
490
+ *
491
+ * Start playing module.
492
+ ******************************************************************************/
493
+ .global mmPlayModule
494
+ .thumb_func
495
+ mmPlayModule:
496
+
497
+ push {lr}
498
+ push {r4-r7}
499
+
500
+ ldr r3,=mpp_clayer
501
+ strb r2, [r3]
502
+
503
+ cmp r2, #0
504
+ bne 1f
505
+ ldr r5,=mmLayerMain
506
+ @ldr r6,=mpp_pchannels
507
+ ldr r6,=mm_pchannels
508
+ ldr r6,[r6]
509
+ @mov r7, #MP_MCHANNELS
510
+ ldr r7,=mm_num_mch
511
+ ldr r7,[r7]
512
+ b 2f
513
+ 1: ldr r5,=mmLayerSub
514
+ ldr r6,=mm_schannels
515
+ mov r7, #MP_SCHANNELS
516
+ 2:
517
+ // push {r2}
518
+
519
+ mov r2, #MPL_MODE
520
+ strb r1, [r5, r2]
521
+
522
+ mov r4, r0
523
+ str r4, [r5, #MPL_SONGADR]
524
+
525
+ bl mpp_resetchannels
526
+
527
+ ldrb r3, [r4, #C_MAS_INSTN]
528
+ ldrb r2, [r4, #C_MAS_SAMPN]
529
+ lsl r3, #2
530
+ lsl r2, #2
531
+
532
+ mov r0, r4
533
+ add r0, #255
534
+ add r0, #C_MAS_TABLES-255
535
+
536
+ str r0, [r5, #MPL_INSTTABLE] @ setup instrument table
537
+ add r0, r3
538
+ str r0, [r5, #MPL_SAMPTABLE] @ setup sample table
539
+ add r0, r2
540
+ str r0, [r5, #MPL_PATTTABLE] @ setup pattern table
541
+
542
+ mov r0, #0 @ set pattern to 0
543
+
544
+ @ldr r1,=mpp_setposition
545
+ @bl mpp_call_r1
546
+ bl mpp_setposition
547
+
548
+ ldrb r0, [r4, #C_MAS_TEMPO] @ load initial tempo
549
+
550
+ bl mpp_setbpm
551
+
552
+ ldrb r0, [r4, #C_MAS_GV] @ load initial global volume
553
+
554
+
555
+ strb r0, [r5, #MPL_GV]
556
+
557
+ ldrb r0, [r4, #C_MAS_FLAGS] @ read song flags
558
+ strb r0, [r5, #MPL_FLAGS] @ save
559
+
560
+ lsl r0, #32-2
561
+ lsr r0, #32-2+1
562
+ strb r0, [r5, #MPL_OLDEFFECTS]
563
+
564
+ ldrb r0, [r4, #C_MAS_SPEED] @ speed
565
+ strb r0, [r5, #MPL_SPEED] @ and set
566
+
567
+ mov r0, #1 // mpp_playing=true
568
+ strb r0, [r5, #MPL_ISPLAYING]
569
+
570
+ mov r1, #MPL_VALID // set valid flag
571
+ strb r0, [r5, r1] //
572
+
573
+ bl mpp_resetvars
574
+
575
+ @ setup channel volumes
576
+ mov r0, r6
577
+ add r0, #MCH_CVOLUME
578
+ mov r3, r7
579
+ add r4, #C_MAS_CHANVOL
580
+ .cvol_setup:
581
+ ldrb r1, [r4]
582
+ strb r1, [r0]
583
+ add r0, #MCH_SIZE
584
+ add r4, #1
585
+ sub r3, #1
586
+ bne .cvol_setup
587
+
588
+ add r4, #32
589
+ sub r4, r7
590
+
591
+ mov r0, r6
592
+ add r0, #MCH_PANNING
593
+ mov r3, r7
594
+ .cpan_setup:
595
+ ldrb r1, [r4]
596
+ strb r1, [r0]
597
+ add r0, #MCH_SIZE
598
+ add r4, #1
599
+ sub r3, #1
600
+ bne .cpan_setup
601
+
602
+ // pop {r2} @ <-- FIX.2 WHY WAS THIS PRESERVED
603
+
604
+ pop {r4-r7}
605
+ pop {r0} @ return
606
+
607
+ bx r0 @
608
+ .pool
609
+
610
+ /******************************************************************************
611
+ * mmPause()
612
+ *
613
+ * Pause module playback.
614
+ ******************************************************************************/
615
+ .global mmPause
616
+ .thumb_func
617
+ mmPause:
618
+
619
+ push {lr}
620
+ push {r5}
621
+
622
+ ldr r5,=mmLayerMain
623
+
624
+ mov r0, #MPL_VALID
625
+ ldrb r0, [r5, r0]
626
+ cmp r0, #0
627
+ beq 1f
628
+
629
+ mov r0, #0
630
+ strb r0, [r5, #MPL_ISPLAYING]
631
+
632
+ bl mpp_suspend
633
+
634
+ 1: pop {r5}
635
+ ret0
636
+
637
+ /******************************************************************************
638
+ * mmResume()
639
+ *
640
+ * Resume module playback.
641
+ ******************************************************************************/
642
+ .global mmResume
643
+ .thumb_func
644
+ mmResume:
645
+
646
+ ldr r1,=mmLayerMain
647
+ mov r0, #MPL_VALID
648
+ ldrb r0, [r1, r0]
649
+ cmp r0, #0
650
+ beq 1f
651
+
652
+ mov r0, #1
653
+ strb r0, [r1, #MPL_ISPLAYING]
654
+ 1: bx lr
655
+
656
+ /******************************************************************************
657
+ * mmActive()
658
+ *
659
+ * Returns true if module is playing.
660
+ ******************************************************************************/
661
+ .global mmActive
662
+ .thumb_func
663
+ mmActive:
664
+
665
+ ldr r0,=mmLayerMain
666
+ ldrb r0, [r0, #MPL_ISPLAYING]
667
+ bx lr
668
+
669
+ /******************************************************************************
670
+ * mmActiveSub()
671
+ *
672
+ * Returns true if a jingle is playing.
673
+ ******************************************************************************/
674
+ .global mmActiveSub
675
+ .thumb_func
676
+ mmActiveSub:
677
+
678
+ ldr r0,=mmLayerSub
679
+ ldrb r0, [r0, #MPL_ISPLAYING]
680
+ bx lr
681
+
682
+ /******************************************************************************
683
+ * mmSetModuleVolume( volume )
684
+ *
685
+ * Set master module volume.
686
+ *
687
+ * volume : 0->1024
688
+ ******************************************************************************/
689
+ .global mmSetModuleVolume
690
+ .thumb_func
691
+ mmSetModuleVolume:
692
+
693
+ @ clamp volume 0->1024
694
+ lsr r1, r0, #10
695
+ beq 1f
696
+ mov r0, #1
697
+ lsl r0, #10
698
+
699
+ @ set volume
700
+ 1: ldr r1,=mmLayerMain
701
+ mov r2, #MPL_VOLUME
702
+ strh r0, [r1, r2]
703
+ bx lr
704
+
705
+ /******************************************************************************
706
+ * mmSetJingleVolume( volume )
707
+ *
708
+ * Set master jingle volume.
709
+ *
710
+ * volume : 0->1024
711
+ ******************************************************************************/
712
+ .global mmSetJingleVolume
713
+ .thumb_func
714
+ mmSetJingleVolume:
715
+
716
+ @ clamp volume 0->1024
717
+ lsr r1, r0, #10
718
+ beq 1f
719
+ mov r0, #1
720
+ lsl r0, #10
721
+
722
+ @ set volume
723
+ 1: ldr r1,=mmLayerSub @mpp_layerB
724
+ mov r2, #MPL_VOLUME
725
+ strh r0, [r1, r2]
726
+ bx lr
727
+
728
+ /******************************************************************************
729
+ * mppStop() [[internal function]]
730
+ *
731
+ * Stop module playback.
732
+ ******************************************************************************/
733
+ .thumb_func
734
+ mppStop:
735
+
736
+ push {lr}
737
+
738
+ ldr r0,=mpp_clayer
739
+ ldrb r0, [r0]
740
+
741
+ cmp r0, #0
742
+ beq 1f
743
+ ldr r5,=mmLayerSub
744
+ ldr r6,=mm_schannels
745
+ mov r7, #MP_SCHANNELS
746
+ b 2f
747
+ 1: ldr r5,=mmLayerMain
748
+ @ldr r6,=mpp_pchannels
749
+ ldr r6,=mm_pchannels
750
+ ldr r6,[r6]
751
+ @mov r7, #MP_MCHANNELS
752
+ ldr r7,=mm_num_mch
753
+ ldr r7,[r7]
754
+ 2:
755
+
756
+ mov r0, #0
757
+ strb r0, [r5, #MPL_ISPLAYING]
758
+
759
+ mov r1, #MPL_VALID
760
+ strb r0, [r5, r1]
761
+
762
+ bl mpp_resetchannels
763
+ pop {r0}
764
+ bx r0
765
+
766
+ /******************************************************************************
767
+ * mmGetPositionTick()
768
+ *
769
+ * Get current number of elapsed ticks in the row being played.
770
+ ******************************************************************************/
771
+ .global mmGetPositionTick
772
+ .thumb_func
773
+ mmGetPositionTick:
774
+
775
+ ldr r0,=mmLayerMain
776
+ ldrb r0, [r0, #MPL_TICK]
777
+ bx lr
778
+
779
+ /******************************************************************************
780
+ * mmGetPositionRow()
781
+ *
782
+ * Get current row being played.
783
+ ******************************************************************************/
784
+ .global mmGetPositionRow
785
+ .thumb_func
786
+ mmGetPositionRow:
787
+
788
+ ldr r0,=mmLayerMain
789
+ ldrb r0, [r0, #MPL_ROW]
790
+ bx lr
791
+
792
+ /******************************************************************************
793
+ * mmGetPosition()
794
+ *
795
+ * Get current pattern order being played.
796
+ ******************************************************************************/
797
+ .global mmGetPosition
798
+ .thumb_func
799
+ mmGetPosition:
800
+
801
+ ldr r1,=mmLayerMain
802
+ ldrb r0, [r1, #MPL_POSITION]
803
+ bx lr
804
+
805
+ /******************************************************************************
806
+ * mmPosition( position )
807
+ *
808
+ * Set playback position
809
+ ******************************************************************************/
810
+ .global mmPosition
811
+ .thumb_func
812
+ mmPosition:
813
+
814
+ push {r4-r7,lr}
815
+ ldr r5,=mmLayerMain
816
+ ldr r6,=mm_pchannels
817
+ ldr r6,[r6]
818
+ ldr r7,=mm_num_mch
819
+ ldr r7, [r7]
820
+
821
+ push {r0}
822
+ // bl mpp_resetchannels
823
+
824
+ pop {r0}
825
+ bl mpp_setposition
826
+
827
+ pop {r4-r7}
828
+ pop {r3}
829
+ bx r3
830
+
831
+ /******************************************************************************
832
+ * mmSetModuleTempo( tempo )
833
+ *
834
+ * Set master tempo
835
+ *
836
+ * tempo : x.10 fixed point tempo, 0.5->2.0
837
+ ******************************************************************************/
838
+ .global mmSetModuleTempo
839
+ .thumb_func
840
+ mmSetModuleTempo:
841
+
842
+ push {r5,lr}
843
+
844
+ mov r1, #1 // clamp value: 512->2048
845
+ lsl r1, #11 //
846
+ cmp r0, r1 //
847
+ ble 1f //
848
+ mov r0, r1 //
849
+ 1: mov r1, #1 //
850
+ lsl r1, #9 //
851
+ cmp r0, r1 //
852
+ bge 1f //
853
+ mov r0, r1 //
854
+ 1:
855
+
856
+ ldr r1,=mm_mastertempo
857
+ str r0, [r1]
858
+
859
+ ldr r5,=mmLayerMain
860
+ ldr r0,=mpp_clayer
861
+ mov r1, #0
862
+ strb r1, [r0]
863
+
864
+ ldrb r0, [r5, #MPL_BPM]
865
+ cmp r0, #0
866
+ beq 1f
867
+ bl mpp_setbpm
868
+
869
+ 1: pop {r5}
870
+ pop {r3}
871
+ bx r3
872
+
873
+ /******************************************************************************
874
+ * mmSetModulePitch( pitch )
875
+ *
876
+ * Set master pitch
877
+ *
878
+ * pitch : x.10 fixed point value, range = 0.5->2.0
879
+ ******************************************************************************/
880
+ .global mmSetModulePitch
881
+ .thumb_func
882
+ mmSetModulePitch:
883
+ push {r5,lr}
884
+
885
+ mov r1, #1 // clamp value: 512->2048
886
+ lsl r1, #11 //
887
+ cmp r0, r1 //
888
+ ble 1f //
889
+ mov r0, r1 //
890
+ 1: mov r1, #1 //
891
+ lsl r1, #9 //
892
+ cmp r0, r1 //
893
+ bge 1f //
894
+ mov r0, r1 //
895
+ 1:
896
+
897
+ ldr r1,=mm_masterpitch
898
+ str r0, [r1]
899
+
900
+ 1: pop {r5}
901
+ pop {r3}
902
+ bx r3
903
+
904
+ .pool
905
+
906
+ //-----------------------------------------------------------------------------
907
+ #ifdef SYS_NDS7
908
+ //-----------------------------------------------------------------------------
909
+
910
+ /******************************************************************************
911
+ * mmSetResolution( divider )
912
+ *
913
+ * Set update resolution
914
+ ******************************************************************************/
915
+ .global mmSetResolution
916
+ .thumb_func
917
+ mmSetResolution:
918
+
919
+ push {r5, lr}
920
+
921
+ ldr r1,=mpp_resolution
922
+ str r0, [r1]
923
+
924
+ ldr r5,=mmLayerMain
925
+
926
+ ldr r0,=mpp_clayer
927
+ mov r1, #0
928
+ strb r1, [r0]
929
+
930
+ ldrb r0, [r5, #MPL_BPM]
931
+ cmp r0, #0
932
+ beq 1f
933
+ bl mpp_setbpm
934
+ 1: ldr r5,=mmLayerSub
935
+
936
+ ldr r0,=mpp_clayer
937
+ mov r1, #1
938
+ strb r1, [r0]
939
+
940
+ ldrb r0, [r5, #MPL_BPM]
941
+ cmp r0, #0
942
+ beq 1f
943
+ bl mpp_setbpm
944
+ 1: pop {r5}
945
+ pop {r3}
946
+ bx r3
947
+
948
+ #endif
949
+
950
+ /******************************************************************************
951
+ * mmStop()
952
+ *
953
+ * Stop module playback.
954
+ ******************************************************************************/
955
+ .global mmStop
956
+ .thumb_func
957
+ mmStop:
958
+
959
+ push {r4-r7,lr}
960
+ ldr r1,=mpp_clayer
961
+ mov r0, #0
962
+ strb r0, [r1]
963
+ bl mppStop
964
+ pop {r4-r7}
965
+ ret3
966
+
967
+ /******************************************************************************
968
+ * mpp_resetvars()
969
+ *
970
+ * Reset pattern variables
971
+ * Input r5 = layer
972
+ ******************************************************************************/
973
+ .thumb_func
974
+ mpp_resetvars:
975
+
976
+ mov r0, #255
977
+ strb r0, [r5, #MPL_PATTJUMP]
978
+ mov r0, #0
979
+ strb r0, [r5, #MPL_PATTJUMP_ROW]
980
+ bx lr
981
+
982
+ /******************************************************************************
983
+ * mpp_setbpm( bpm )
984
+ *
985
+ * Set BPM. bpm = 32..255
986
+ * Input r5 = layer
987
+ ******************************************************************************/
988
+ .thumb_func
989
+ mpp_setbpm:
990
+
991
+ strb r0, [r5, #MPL_BPM]
992
+
993
+ #ifdef SYS_GBA
994
+
995
+ ldr r1,=mpp_clayer
996
+ ldrb r1, [r1]
997
+ cmp r1, #0
998
+ bne 1f
999
+
1000
+ ldr r1,=mm_mastertempo // multiply by master tempo
1001
+ ldr r1, [r1] //
1002
+ mul r1, r0 //
1003
+ lsr r1, #10 //
1004
+
1005
+ ldr r0,=mm_bpmdv @ samples per tick ~= mixfreq / (bpm/2.5) ~= mixfreq*2.5/bpm
1006
+ ldr r0,[r0]
1007
+
1008
+ swi SWI_DIVIDE @ SWI 07h, divide r1/r0
1009
+ lsr r0, #1 @ multiple of two
1010
+ lsl r0, #1 @ ---------------
1011
+ mov r1, #MPL_TICKRATE
1012
+ strh r0, [r5, r1] @
1013
+ mov r1, #MPL_SAMPCOUNT
1014
+ // mov r0, #0
1015
+ // strh r0, [r5, r1]
1016
+ bx lr @ return
1017
+
1018
+ 1: @ SUB LAYER, time using vsync (rate = bpm/2.5 / 59.7)
1019
+
1020
+ lsl r0, #15
1021
+ mov r1, #149
1022
+ swi SWI_DIVIDE
1023
+ mov r1, #MPL_TICKRATE
1024
+ strh r0, [r5, r1]
1025
+ bx lr
1026
+
1027
+ #endif
1028
+
1029
+ #ifdef SYS_NDS
1030
+
1031
+ @ vsync = ~59.8261 HZ (says GBATEK)
1032
+ @ divider = hz * 2.5 * 64
1033
+
1034
+ ldr r1,=mpp_clayer
1035
+ ldrb r1, [r1]
1036
+ cmp r1, #0
1037
+ bne 1f
1038
+ ldr r1,=mm_mastertempo // multiply by master tempo
1039
+ ldr r1, [r1] //
1040
+ mul r0, r1 //
1041
+ // lsr r1, #10 //
1042
+
1043
+ lsl r0, #16+6-10
1044
+ b 2f
1045
+ 1:
1046
+ lsl r0, #16+6
1047
+ 2:
1048
+ @ using 60hz vsync for timing
1049
+ // lsl r0, #16+6
1050
+ ldr r1,=mpp_resolution
1051
+ ldr r1, [r1]
1052
+ swi SWI_DIVIDE
1053
+ lsr r0, #1
1054
+ mov r1, #MPL_TICKRATE
1055
+ strh r0, [r5, r1]
1056
+ bx lr
1057
+
1058
+ #endif
1059
+
1060
+ .pool
1061
+
1062
+ /******************************************************************************
1063
+ * mpp_setposition( position )
1064
+ *
1065
+ * Set sequence position.
1066
+ * Input r5 = layer
1067
+ ******************************************************************************/
1068
+ .thumb_func
1069
+ mpp_setposition:
1070
+
1071
+ push {lr}
1072
+
1073
+ mpp_setpositionA:
1074
+
1075
+ strb r0, [r5, #MPL_POSITION]
1076
+
1077
+ ldr r1, [r5, #MPL_SONGADR]
1078
+ mov r3, r1
1079
+ add r1, #C_MAS_ORDER @ get sequence entry
1080
+ ldrb r1, [r1, r0] @
1081
+
1082
+ cmp r1, #254
1083
+ bne .mpsp_skippatt
1084
+ add r0, #1
1085
+ b mpp_setpositionA
1086
+ .mpsp_skippatt:
1087
+
1088
+ cmp r1, #255
1089
+ bne .mpsp_endsong
1090
+
1091
+ @ END OF SONG!!! WOOPHEE!!!!
1092
+
1093
+
1094
+ mov r0, #MPL_MODE @mpp_playmode
1095
+ ldrb r0, [r5, r0]
1096
+
1097
+ cmp r0, #MPP_PLAY_ONCE
1098
+ bge 1f
1099
+ @ @ its looping:
1100
+ b 3f
1101
+
1102
+ 1: @ its playing once:
1103
+
1104
+ bl mppStop
1105
+ mov r0, #MPCB_SONGFINISHED
1106
+ ldr r2,=mmCallback
1107
+ ldr r2,[r2]
1108
+ cmp r2, #0
1109
+ beq 3f
1110
+ ldr r1,=mpp_clayer
1111
+ ldrb r1, [r1]
1112
+ bl mpp_call_r2
1113
+
1114
+ 3:
1115
+
1116
+ ldrb r0, [r5, #MPL_ISPLAYING]
1117
+ cmp r0, #0
1118
+ bne 1f
1119
+
1120
+ pop {pc}
1121
+
1122
+ 1:
1123
+ ldr r0, [r5, #MPL_SONGADR] @ set position to 'restart'
1124
+ ldrb r0, [r0, #C_MAS_REP]
1125
+ b mpp_setpositionA
1126
+ .mpsp_endsong:
1127
+
1128
+ mov r0, r1
1129
+
1130
+ ldr r1, [r5, #MPL_PATTTABLE]
1131
+ lsl r0, #2
1132
+
1133
+ @ r1 = pattern address( in table )
1134
+
1135
+ ldr r1, [r1, r0]
1136
+ add r1, r3 @ add song address
1137
+
1138
+ @ r1 = pattern address
1139
+
1140
+ ldrb r2, [r1] @ set pattern size
1141
+ strb r2, [r5, #MPL_NROWS] @
1142
+
1143
+ mov r2, #0 @ reset tick/row
1144
+ strh r2, [r5, #MPL_TICK]
1145
+ strb r2, [r5, #MPL_FPATTDELAY]
1146
+ strb r2, [r5, #MPL_PATTDELAY]
1147
+
1148
+ mov r0, #MPL_PATTREAD
1149
+ add r1, #1
1150
+ str r1, [r5, r0] @ store pattern data address
1151
+
1152
+ mov r0, #MPL_PLOOP_ADR @ reset pattern loop
1153
+ str r1, [r5, r0]
1154
+ mov r0, #0
1155
+ strb r0, [r5, #MPL_PLOOP_ROW]
1156
+ strb r0, [r5, #MPL_PLOOP_TIMES]
1157
+
1158
+ pop {pc}
1159
+
1160
+ //-----------------------------------------------------------------------------
1161
+ #ifdef SYS_NDS
1162
+ //-----------------------------------------------------------------------------
1163
+
1164
+ /******************************************************************************
1165
+ * mppUpdateLayer( layer )
1166
+ *
1167
+ * Update module layer
1168
+ ******************************************************************************/
1169
+ .thumb_func
1170
+ mppUpdateLayer:
1171
+
1172
+ push {lr}
1173
+ ldr r1,=mpp_layerp
1174
+ str r0, [r1]
1175
+ mov r1, #MPL_TICKRATE
1176
+ ldrh r1, [r0, r1]
1177
+ mov r2, #MPL_TICKFRAC
1178
+ ldrh r3, [r0, r2]
1179
+ lsl r1, #1
1180
+ add r3, r1
1181
+ strh r3, [r0, r2]
1182
+ lsr r3, #16
1183
+ beq 1f
1184
+ 2: push {r3}
1185
+
1186
+ bl mppProcessTick
1187
+ pop {r3}
1188
+ sub r3, #1
1189
+ bne 2b
1190
+ 1: pop {pc}
1191
+
1192
+ /******************************************************************************
1193
+ * mmPulse()
1194
+ *
1195
+ * NDS Work Routine
1196
+ ******************************************************************************/
1197
+ .global mmPulse
1198
+ .thumb_func
1199
+ mmPulse:
1200
+
1201
+ push {lr}
1202
+
1203
+ ldr r0,=mpp_channels // update main layer
1204
+ ldr r1,=mm_pchannels //
1205
+ ldr r1,[r1] //
1206
+ str r1, [r0] //
1207
+ ldr r0,=mpp_nchannels //
1208
+ ldr r1,=mm_num_mch //
1209
+ ldr r1,[r1] //
1210
+ strb r1, [r0] //
1211
+ ldr r0,=mpp_clayer //
1212
+ mov r1, #0 //
1213
+ strb r1, [r0] //
1214
+ //
1215
+ ldr r0,=mmLayerMain //
1216
+ bl mppUpdateLayer //
1217
+
1218
+ ldr r0,=mpp_channels // update sub layer
1219
+ ldr r1,=mm_schannels //
1220
+ str r1, [r0] //
1221
+ ldr r0,=mpp_nchannels //
1222
+ mov r1, #MP_SCHANNELS //
1223
+ strb r1, [r0] //
1224
+ ldr r0,=mpp_clayer //
1225
+ mov r1, #1 //
1226
+ strb r1, [r0] //
1227
+ //
1228
+ ldr r0,=mmLayerSub //
1229
+ bl mppUpdateLayer //
1230
+
1231
+ pop {pc}
1232
+
1233
+ //-----------------------------------------------------------------------------
1234
+ #endif
1235
+ //-----------------------------------------------------------------------------
1236
+
1237
+ //-----------------------------------------------------------------------------
1238
+ #ifdef SYS_GBA
1239
+ //-----------------------------------------------------------------------------
1240
+
1241
+ /******************************************************************************
1242
+ * mppUpdateSub()
1243
+ *
1244
+ * Update sub-module/jingle, this is bad for some reason...
1245
+ ******************************************************************************/
1246
+ .global mppUpdateSub
1247
+ .thumb_func
1248
+ mppUpdateSub:
1249
+
1250
+ ldr r0,=mmLayerSub
1251
+ ldrb r0, [r0, #MPL_ISPLAYING]
1252
+ cmp r0, #0
1253
+ bne .mppus_update
1254
+ bx lr
1255
+ .mppus_update:
1256
+
1257
+ ldr r0,=mpp_channels
1258
+ ldr r1,=mm_schannels
1259
+ str r1, [r0]
1260
+ ldr r0,=mpp_nchannels
1261
+ mov r1, #MP_SCHANNELS
1262
+ strb r1, [r0]
1263
+ ldr r0,=mpp_clayer
1264
+ mov r1, #1
1265
+ strb r1, [r0]
1266
+
1267
+ push {lr}
1268
+ ldr r0,=mmLayerSub
1269
+ ldr r1,=mpp_layerp
1270
+ str r0, [r1]
1271
+
1272
+ mov r1, #MPL_TICKRATE
1273
+ ldrh r1, [r0, r1]
1274
+ mov r2, #MPL_TICKFRAC
1275
+ ldrh r3, [r0, r2]
1276
+ lsl r1, #1
1277
+ add r3, r1
1278
+ strh r3, [r0, r2]
1279
+ lsr r3, #16
1280
+ beq 1f
1281
+ 2: push {r3}
1282
+ ldr r1,=mppProcessTick
1283
+ bl mpp_call_r1
1284
+ pop {r3}
1285
+ sub r3, #1
1286
+ bgt 2b
1287
+ 1: pop {pc}
1288
+
1289
+ //-----------------------------------------------------------------------------
1290
+ #endif
1291
+ //-----------------------------------------------------------------------------
1292
+
1293
+ .pool
1294
+
1295
+ //-----------------------------------------------------------------------------
1296
+ // IWRAM CODE
1297
+ //-----------------------------------------------------------------------------
1298
+ #ifdef USE_IWRAM
1299
+ .SECTION ".iwram", "ax", %progbits
1300
+ .ALIGN 2
1301
+ #endif
1302
+ //-----------------------------------------------------------------------------
1303
+
1304
+ /******************************************************************************
1305
+ * mppProcessTick()
1306
+ *
1307
+ * Process module tick.
1308
+ ******************************************************************************/
1309
+ .global mppProcessTick @@@@@@@@@@@@@@@@@@
1310
+ .thumb_func @@@@ @@@ @@
1311
+ @@@ @@ @@@@@@ @@
1312
+ mppProcessTick: @@ @@@ @ @@
1313
+ @@ @@@@@@@ @@@
1314
+ @@@@@@@@@@@@@@@@@
1315
+
1316
+ add r0,pc,#0 // switch to ARM to preserve regs
1317
+ bx r0 //
1318
+ .arm //
1319
+ stmfd sp!, {lr} //
1320
+ stmfd sp!, {r4-r10} //
1321
+
1322
+ add r0,pc,#1 // switch back to THUMB
1323
+ bx r0
1324
+ .thumb
1325
+
1326
+ ldr r0,=mpp_layerp // test if module is playing
1327
+ ldr r0, [r0] //
1328
+ mov r8, r0 //
1329
+ ldrb r1, [r0, #MPL_ISPLAYING] //
1330
+ cmp r1, #0 //
1331
+ bne 1f //
1332
+ ldr r1,=.mppt_exit //
1333
+ mov pc,r1 //
1334
+ 1:
1335
+
1336
+ @---------------------------------------------------
1337
+ @ read pattern data
1338
+ @---------------------------------------------------
1339
+
1340
+ ldrb r1, [r0, #MPL_PATTDELAY]
1341
+ cmp r1, #0
1342
+ bne .mpp_pt_skippatternread
1343
+ ldrb r0, [r0, #MPL_TICK]
1344
+ cmp r0, #0
1345
+ bne .mpp_pt_skippatternread
1346
+
1347
+ PROF_START
1348
+ fjump2 mmReadPattern
1349
+ //bl mpp_ReadPattern
1350
+ PROF_END 4
1351
+
1352
+ @-----------------------------------------
1353
+ .mpp_pt_skippatternread:
1354
+
1355
+ mov r0, r8
1356
+ mov r4, #MPL_MCH_UPDATE
1357
+ ldr r4, [r0, r4]
1358
+
1359
+ @---------------------------------------------------
1360
+ @ loop through module channels
1361
+ @---------------------------------------------------
1362
+
1363
+ ldr r7,=mpp_channels
1364
+ ldr r7, [r7]
1365
+ mov r0, #0
1366
+ mov r10, r0 @ use r10 as channel counter
1367
+ mov r0, r8
1368
+ ldrb r0, [r0, #MPL_TICK]
1369
+ cmp r0, #0
1370
+ bne pchannel_loop_other
1371
+
1372
+ @---------------------------------------------------
1373
+ pchannel_loop_first:
1374
+ @---------------------------------------------------
1375
+ lsr r4, #1
1376
+ bcc pchannel_empty
1377
+ fjump2 mmUpdateChannel_T0
1378
+ pchannel_empty:
1379
+ mov r0, #1
1380
+ add r10, r0
1381
+ add r7, #MCH_SIZE
1382
+ cmp r4, #0
1383
+ bne pchannel_loop_first
1384
+ b pchannel_loop_finished
1385
+
1386
+ @---------------------------------------------------
1387
+ pchannel_loop_other:
1388
+ @---------------------------------------------------
1389
+ lsr r4, #1
1390
+ bcc pchannel_empty2
1391
+ #ifdef FOO_UC
1392
+ bl mpp_Update_Channel
1393
+ #else
1394
+ fjump2 mmUpdateChannel_TN
1395
+ #endif
1396
+
1397
+ pchannel_empty2:
1398
+ mov r0, #1
1399
+ add r10, r0
1400
+ add r7, #MCH_SIZE
1401
+ cmp r4, #0
1402
+ bne pchannel_loop_other
1403
+
1404
+ pchannel_loop_finished:
1405
+
1406
+ @---------------------------------------------------
1407
+ @ loop through active channels
1408
+ @---------------------------------------------------
1409
+ PROF_START
1410
+ ldr r6,=mm_achannels
1411
+ ldr r6, [r6]
1412
+ @ldr r6,=mpp_achannels
1413
+ mov r4, #0
1414
+
1415
+ @---------------------------------------------------
1416
+ .mpp_pt_achn_loop:
1417
+ @---------------------------------------------------
1418
+
1419
+ ldrb r0, [r6, #MCA_TYPE]
1420
+ cmp r0, #ACHN_DISABLED
1421
+ beq .mpp_pt_achn_disabled
1422
+ ldr r0,=mpp_clayer
1423
+ ldrb r0, [r0]
1424
+ ldrb r1, [r6, #MCA_FLAGS]
1425
+ lsr r1, #6
1426
+ cmp r1, r0
1427
+ bne .mpp_pt_achn_next
1428
+
1429
+ ldr r1,=mpp_vars
1430
+ ldrb r0, [r6, #MCA_VOLUME]
1431
+ strb r0, [r1, #MPV_AFVOL]
1432
+ mov r0, #0
1433
+ strh r0, [r1, #MPV_PANPLUS]
1434
+
1435
+ ldr r5, [r6, #MCA_PERIOD]
1436
+
1437
+ bl mpp_Update_ACHN
1438
+
1439
+ b .mpp_pt_achn_next
1440
+
1441
+ @---------------------------------------------------
1442
+ .mpp_pt_achn_disabled:
1443
+ @ mov r0, r4
1444
+ @ bl mp_Mixer_StopChannel
1445
+
1446
+ @---------------------------------------------------
1447
+ .mpp_pt_achn_next:
1448
+ @---------------------------------------------------
1449
+
1450
+ ldrb r0, [r6, #MCA_FLAGS]
1451
+ mov r1, #MCAF_UPDATED
1452
+ bic r0, r1
1453
+ strb r0, [r6, #MCA_FLAGS]
1454
+ add r6, #MCA_SIZE
1455
+ add r4, #1
1456
+ ldr r0,=mm_num_ach
1457
+ ldr r0,[r0]
1458
+
1459
+ cmp r4, r0
1460
+ @ cmp r4, #MP_NCHANNELS
1461
+ bne .mpp_pt_achn_loop
1462
+ @---------------------------------------------------
1463
+ PROF_END 6
1464
+
1465
+
1466
+
1467
+ ldr r1,=mppProcessTick_incframe
1468
+ mov pc,r1
1469
+
1470
+ .pool
1471
+
1472
+ //-----------------------------------------------------------------------------
1473
+ // TEXT Code
1474
+ //-----------------------------------------------------------------------------
1475
+ .TEXT
1476
+ .THUMB
1477
+ .ALIGN 2
1478
+ //-----------------------------------------------------------------------------
1479
+
1480
+ /******************************************************************************
1481
+ * mppProcessTick_incframe [[internal]]
1482
+ ******************************************************************************/
1483
+ .thumb_func
1484
+ mppProcessTick_incframe:
1485
+
1486
+ @---------------------------------------------------
1487
+ @ update tick/row/position
1488
+ @---------------------------------------------------
1489
+
1490
+ mov r5, r8 @ get tick#
1491
+ ldrb r1, [r5, #MPL_TICK] @ ..
1492
+ add r1, #1 @ increment
1493
+
1494
+ ldrb r2, [r5, #MPL_SPEED] @ compare with speed
1495
+ cmp r1, r2 @ ..
1496
+ blt .mppt_continuerow @ if less than, continue this row
1497
+
1498
+ ldrb r2, [r5, #MPL_FPATTDELAY]
1499
+ cmp r2, #0
1500
+ beq .mppt_nofpd
1501
+ sub r2, #1
1502
+ strb r2, [r5, #MPL_FPATTDELAY]
1503
+ b .mppt_continuerow
1504
+ .mppt_nofpd:
1505
+
1506
+ mov r1, #0 @ .. otherwise clear tick count
1507
+ b .mppt_nextrow @ and advance to next row
1508
+
1509
+ .mppt_continuerow: @ continue current row:
1510
+ strb r1, [r5, #MPL_TICK] @ save tick#
1511
+ b .mppt_exit @ exit
1512
+
1513
+ .mppt_nextrow: @ advance row
1514
+
1515
+ ldrb r2, [r5, #MPL_PATTDELAY]
1516
+ cmp r2, #0
1517
+ beq .mppt_nopd
1518
+ sub r2, #1
1519
+ strb r2, [r5, #MPL_PATTDELAY]
1520
+ beq .mppt_nopd
1521
+ b .mppt_continuerow
1522
+ .mppt_nopd:
1523
+
1524
+ strb r1, [r5, #MPL_TICK] @ save tick# (0)
1525
+ ldrb r1, [r5, #MPL_PATTJUMP]
1526
+ cmp r1, #255
1527
+ beq .mppt_no_pj
1528
+
1529
+ mov r2, #255
1530
+ strb r2, [r5, #MPL_PATTJUMP]
1531
+ mov r0, r1
1532
+ bl mpp_setposition
1533
+
1534
+ ldrb r1, [r5, #MPL_PATTJUMP_ROW]
1535
+ cmp r1, #0
1536
+ beq .mppt_pj_no_offset
1537
+ mov r2, #0
1538
+ strb r2, [r5, #MPL_PATTJUMP_ROW]
1539
+ bl mpph_FastForward
1540
+ .mppt_pj_no_offset:
1541
+
1542
+ b .mppt_exit
1543
+
1544
+ .mppt_no_pj:
1545
+
1546
+ mov r3, #MPL_PLOOP_JUMP
1547
+ ldrb r1, [r5, r3]
1548
+ cmp r1, #0
1549
+ beq .mppt_no_ploop
1550
+ mov r1, #0
1551
+ strb r1, [r5, r3]
1552
+ ldrb r1, [r5, #MPL_PLOOP_ROW]
1553
+ strb r1, [r5, #MPL_ROW]
1554
+ mov r3, #MPL_PLOOP_ADR
1555
+ ldr r1, [r5, r3]
1556
+
1557
+ mov r3, #MPL_PATTREAD
1558
+ str r1, [r5, r3]
1559
+ b .mppt_exit
1560
+ .mppt_no_ploop:
1561
+ ldrb r1, [r5, #MPL_ROW] @ ..
1562
+ add r1, #1 @ increment
1563
+ ldrb r2, [r5, #MPL_NROWS] @
1564
+ add r2, #1
1565
+ cmp r1, r2 @ check with #rows for pattern
1566
+ bne .mppt_continuepattern @ if !=, then continue playing this pattern
1567
+
1568
+ .mppt_nextposition: @ advance position
1569
+
1570
+ ldrb r0, [r5, #MPL_POSITION] @ increment position
1571
+ add r0, #1
1572
+
1573
+ bl mpp_setposition
1574
+ b .mppt_exit
1575
+
1576
+ .mppt_continuepattern:
1577
+
1578
+ strb r1, [r5, #MPL_ROW] @ save row count
1579
+
1580
+ .thumb_func
1581
+ .mppt_exit:
1582
+
1583
+ @ switch to arm
1584
+ ldr r0,=.mppt_exita
1585
+ bx r0
1586
+ .arm
1587
+ .align 2
1588
+ .mppt_exita:
1589
+
1590
+ ldmfd sp!, {r4-r10}
1591
+ ldmfd sp!, {r0}
1592
+ bx r0
1593
+ .thumb
1594
+
1595
+ .pool
1596
+
1597
+ //-----------------------------------------------------------------------------
1598
+ // IWRAM CODE
1599
+ //-----------------------------------------------------------------------------
1600
+ #ifdef USE_IWRAM
1601
+ .SECTION ".iwram", "ax", %progbits
1602
+ .ALIGN 2
1603
+ #endif
1604
+ //-----------------------------------------------------------------------------
1605
+
1606
+ /******************************************************************************
1607
+ * mpp_Channel_NewNote()
1608
+ *
1609
+ * Process new note.
1610
+ * Input r7 = pchannel address
1611
+ ******************************************************************************/
1612
+ .global mpp_Channel_NewNote
1613
+ .thumb_func
1614
+ mpp_Channel_NewNote:
1615
+
1616
+ @ r7 = pchannel address
1617
+ push {r4,lr}
1618
+
1619
+ ldrb r0, [r7, #MCH_INST] @ get instrument#
1620
+ sub r0, #1
1621
+ bcc .mppt_skipnna
1622
+
1623
+ bl mpp_Channel_GetACHN
1624
+ cmp r6, #0
1625
+ beq .mppt_alloc_channel
1626
+
1627
+ ldrb r0, [r7, #MCH_INST] @ get instrument#
1628
+ sub r0, #1
1629
+
1630
+ mpp_InstrumentPointer
1631
+
1632
+ ldrb r1, [r7, #MCH_BFLAGS] @ fetch NNA
1633
+ lsr r1, #6
1634
+
1635
+ beq .mppt_NNA_CUT @ skip if zero
1636
+
1637
+ ldrb r1, [r0, #C_MASI_DCT] @ otherwise check duplicate check type
1638
+ lsl r1, #32-2
1639
+ lsr r1, #32-2
1640
+ lsl r1, #1 @ jump to mppt_DCT_TABLE[dct]
1641
+ add r1, pc
1642
+ mov pc, r1
1643
+
1644
+ .mppt_DCT_TABLE:
1645
+ b .mppt_DCNA
1646
+ b .mppt_DCT_NOTE
1647
+ b .mppt_DCT_SAMP
1648
+ b .mppt_DCT_INST
1649
+ .mppt_DCT_NOTE: @ DCT note ---------------------
1650
+ ldrb r1, [r7, #MCH_PNOTE] @ get pattern note
1651
+ lsl r1, #1 @ translate to real note
1652
+ add r1, #C_MASI_MAP @ with note/sample map
1653
+ ldrb r1, [r0, r1] @ r1 = real note
1654
+ ldrb r2, [r7, #MCH_NOTE] @ compare with last note
1655
+ cmp r1, r2 @
1656
+ beq .mppt_DCA @ equal? perform DCA
1657
+ b .mppt_DCNA @ otherwise skip
1658
+
1659
+ .mppt_DCT_SAMP: @ DCT sample -------------------
1660
+
1661
+ // **WARNING: code not functional with new instrument table
1662
+ ldrb r1, [r7, #MCH_PNOTE] @ get pattern note
1663
+ lsl r1, #1 @ translate to sample#
1664
+ add r1, #C_MASI_MAP+1 @ with note/sample map
1665
+ ldrb r1, [r0, r1] @ r1 = sample#
1666
+ ldrb r2, [r6, #MCA_SAMPLE] @ compare with achn's sample
1667
+ cmp r1, r2 @
1668
+ beq .mppt_DCA @ equal? perform DCA
1669
+ b .mppt_DCNA @ otherwise skip
1670
+
1671
+ .mppt_DCT_INST: @ DCT instrument ---------------
1672
+ ldrb r1, [r7, #MCH_INST] @ load instrument
1673
+ ldrb r2, [r6, #MCA_INST] @ compare with active inst
1674
+ cmp r1, r2 @
1675
+ bne .mppt_DCNA @ not equal? skip DCA
1676
+
1677
+ .mppt_DCA: @ DUPLICATE CHECK ACTION -------
1678
+ ldrb r1, [r0, #C_MASI_DCA] @ read type
1679
+ cmp r1, #IT_DCA_CUT @ cut?
1680
+ beq .mppt_NNA_CUT @ branch
1681
+ cmp r1, #IT_DCA_OFF @ note-off?
1682
+ beq .mppt_NNA_OFF @ branch
1683
+ b .mppt_NNA_FADE @ note-fade otherwise
1684
+
1685
+ .mppt_DCNA:
1686
+
1687
+ ldrb r1, [r7, #MCH_BFLAGS]
1688
+ lsr r1, #6 @ get NNA
1689
+ lsl r1, #1 @ and jump to
1690
+ add r1, pc @ NNA_TABLE[NNA]
1691
+ mov pc, r1
1692
+ .mppt_NNA_TABLE:
1693
+ b .mppt_NNA_CUT
1694
+ b .mppt_NNA_CONTINUE
1695
+ b .mppt_NNA_OFF
1696
+ b .mppt_NNA_FADE
1697
+
1698
+ @---------------------------------------------------------------------------------
1699
+ .mppt_NNA_CUT:
1700
+ @---------------------------------------------------------------------------------
1701
+
1702
+ #ifdef SYS_NDS // nds supports volume ramping
1703
+
1704
+ ldrb r1, [r6, #MCA_TYPE]
1705
+ cmp r1, #0
1706
+ BEQ .mppt_samechannel
1707
+ mov r1, #ACHN_BACKGROUND
1708
+ strb r1, [r6, #MCA_TYPE]
1709
+ mov r1, #0
1710
+ strb r1, [r6, #MCA_VOLUME]
1711
+ b .mppt_NNA_FINISHED
1712
+
1713
+ #else
1714
+ b .mppt_samechannel
1715
+ #endif
1716
+
1717
+ @---------------------------------------------------------------------------------
1718
+ .mppt_NNA_CONTINUE:
1719
+ @---------------------------------------------------------------------------------
1720
+
1721
+ mov r1, #ACHN_BACKGROUND @ use different channel
1722
+ strb r1, [r6, #MCA_TYPE] @ set active channel to "background"
1723
+ b .mppt_NNA_FINISHED @ finished
1724
+
1725
+ @---------------------------------------------------------------------------------
1726
+ .mppt_NNA_OFF:
1727
+ @---------------------------------------------------------------------------------
1728
+
1729
+ ldrb r1, [r6, #MCA_FLAGS] @ clear KEYON in flags byte
1730
+ mov r2, #MCAF_KEYON
1731
+ bic r1, r2
1732
+
1733
+ strb r1, [r6, #MCA_FLAGS]
1734
+ mov r1, #ACHN_BACKGROUND @ set type to "background"
1735
+ strb r1, [r6, #MCA_TYPE]
1736
+ b .mppt_NNA_FINISHED @ finished
1737
+
1738
+ @---------------------------------------------------------------------------------
1739
+ .mppt_NNA_FADE:
1740
+ @---------------------------------------------------------------------------------
1741
+
1742
+ ldrb r1, [r6, #MCA_FLAGS] @ set NOTE FADE in flags byte
1743
+ mov r2, #MCAF_FADE
1744
+ orr r1, r2
1745
+ strb r1, [r6, #MCA_FLAGS]
1746
+ mov r1, #ACHN_BACKGROUND @ set type to "background"
1747
+ strb r1, [r6, #MCA_TYPE] @
1748
+
1749
+ .mppt_NNA_FINISHED:
1750
+
1751
+ .mppt_alloc_channel:
1752
+
1753
+ mov r4, r6
1754
+
1755
+ ldr r1,=mmAllocChannel
1756
+ jump1 @ find new active channel
1757
+ strb r0, [r7, #MCH_ALLOC] @ save number
1758
+
1759
+ #ifdef SYS_NDS
1760
+
1761
+ cmp r4, #0
1762
+ beq .mppt_samechannel
1763
+
1764
+ mov r1, #MCA_SIZE @ copy data from previous channel
1765
+ mul r0, r1 @ (for volume ramping wierdness)
1766
+ ldr r1,=mm_achannels @
1767
+ ldr r1,[r1] @
1768
+ add r0, r1 @
1769
+ @
1770
+ mov r2, #MCA_SIZE/4
1771
+ 1: ldmia r4!, {r1}
1772
+ stmia r0!, {r1}
1773
+ sub r2, #1
1774
+ bne 1b
1775
+
1776
+ /* ldr r1, [r4, #MCA_FADE] @
1777
+ str r1, [r0, #MCA_FADE] @
1778
+ ldr r1, [r4, #MCA_ENVC_PAN] @
1779
+ str r1, [r0, #MCA_ENVC_PAN] @
1780
+ ldr r1, [r4, #MCA_AVIB_DEP] @
1781
+ str r1, [r0, #MCA_AVIB_DEP] @
1782
+ ldrb r1, [r4, #MCA_FLAGS] @
1783
+ strb r1, [r0, #MCA_FLAGS] @
1784
+ ldrb r1, [r4, #MCA_VOLUME]
1785
+ strb r1, [r0, #MCA_VOLUME]
1786
+ ldrb r1, [r4, #MCA_PANNING]
1787
+ strb r1, [r0, #MCA_PANNING]
1788
+ ldrb r1, [r4, #MCA_SAMPLE]
1789
+ strb r1, [r0, #MCA_SAMPLE]
1790
+ ldrb r1, [r4, #MCA_INST]
1791
+ strb r1, [r0, #MCA_INST]*/
1792
+
1793
+ #endif
1794
+
1795
+ .mppt_samechannel:
1796
+
1797
+ .mppt_skipnna:
1798
+ pop {r4}
1799
+ pop {r3}
1800
+ bx r3
1801
+
1802
+ .pool
1803
+
1804
+ .align 2
1805
+ .thumb_func
1806
+ @------------------------------------------------------------------------------------------------------
1807
+ mpp_Channel_GetACHN:
1808
+ @------------------------------------------------------------------------------------------------------
1809
+
1810
+ @ gets the active channel pointer
1811
+ @ and stores in r6
1812
+ @ gives 0 if N/A
1813
+
1814
+ ldrb r0, [r7, #MCH_ALLOC]
1815
+ cmp r0, #255
1816
+ bge 1f
1817
+ ldr r6,=mm_achannels
1818
+ ldr r6,[r6]
1819
+ mov r1, #MCA_SIZE
1820
+ mul r0, r1
1821
+ add r6, r0
1822
+ bx lr
1823
+
1824
+ 1: mov r6, #0
1825
+ bx lr
1826
+ .pool
1827
+
1828
+ .align 2
1829
+ .thumb_func
1830
+ @----------------------------------------------------------------------------------------------------
1831
+ mpp_Update_ACHN:
1832
+ @----------------------------------------------------------------------------------------------------
1833
+
1834
+ @ r5 = affected period
1835
+ @ r6 = achannel address
1836
+
1837
+ push {lr} @ enter subroutine
1838
+
1839
+ @ check updated flag & exit if already updated
1840
+
1841
+ ldrb r0, [r6, #MCA_FLAGS]
1842
+ mov r1, #MCAF_UPDATED
1843
+ tst r0, r1
1844
+ beq .mpp_achn_update
1845
+ pop {pc}
1846
+
1847
+ @--------------------------------------------
1848
+
1849
+ .global mpp_Update_ACHN_notest
1850
+ .thumb_func
1851
+ @----------------------------------------------------------------------------------------------------
1852
+ mpp_Update_ACHN_notest:
1853
+ @----------------------------------------------------------------------------------------------------
1854
+ push {lr}
1855
+
1856
+ .mpp_achn_update:
1857
+
1858
+ @------------------------------------------------------------------------
1859
+ @ Envelope Processing
1860
+ @------------------------------------------------------------------------
1861
+
1862
+ ldrb r0, [r6, #MCA_INST]
1863
+ sub r0, #1
1864
+ bCS 1f
1865
+ b .mppt_achn_noinst
1866
+ 1: mpp_InstrumentPointer
1867
+
1868
+ @ get envelope flags
1869
+
1870
+ mov r1, r0
1871
+ ldrb r2, [r1, #C_MASI_ENVFLAGS]
1872
+ add r1, #C_MASI_ENVELOPES
1873
+
1874
+ lsr r2, #1 @ shift out volume envelope bit
1875
+ bcc .mppt_no_volenv
1876
+
1877
+ ldrb r3, [r6, #MCA_FLAGS]
1878
+ lsr r3, #6
1879
+
1880
+ bcs .mppt_achn_ve_enabled
1881
+ ldrb r0, [r1]
1882
+ add r1, r0
1883
+ b .mppt_no_volenv
1884
+ .mppt_achn_ve_enabled:
1885
+
1886
+ push {r1, r2}
1887
+
1888
+ ldrh r0, [r6, #MCA_ENVC_VOL]
1889
+ mov r2, r1
1890
+ ldrb r1, [r6, #MCA_ENVN_VOL]
1891
+ bl mpph_ProcessEnvelope
1892
+ strb r1, [r6, #MCA_ENVN_VOL]
1893
+ strh r0, [r6, #MCA_ENVC_VOL]
1894
+ mov r1, r3
1895
+
1896
+ cmp r2, #1
1897
+ bne .mpph_volenv_notend
1898
+ ldrb r0, [r6, #MCA_FLAGS]
1899
+
1900
+ mov r3, r8 @ stupid xm doesn't fade out at envelope end
1901
+ ldrb r3, [r3, #MPL_FLAGS]
1902
+ lsr r3, #C_FLAGS_XS
1903
+
1904
+ mov r3, #MCAF_ENVEND
1905
+ bcs 1f
1906
+ mov r3, #MCAF_ENVEND+MCAF_FADE
1907
+ 1:
1908
+ orr r0, r3
1909
+ strb r0, [r6, #MCA_FLAGS]
1910
+ .mpph_volenv_notend:
1911
+
1912
+ cmp r2, #1
1913
+ blt .mpph_volenv_normal
1914
+
1915
+ @ check keyon and turn on fade...
1916
+ ldrb r0, [r6, #MCA_FLAGS]
1917
+ mov r2, #MCAF_KEYON
1918
+ tst r0, r2
1919
+ bne .mpph_volenv_normal
1920
+ .mpph_volenv_notefade:
1921
+ mov r2, #MCAF_FADE
1922
+ orr r0, r2
1923
+ strb r0, [r6, #MCA_FLAGS]
1924
+
1925
+ .mpph_volenv_normal:
1926
+
1927
+ ldr r0,=mpp_vars
1928
+ ldrb r2, [r0, #MPV_AFVOL]
1929
+ mul r2, r1
1930
+ lsr r2, #6+6
1931
+ strb r2, [r0, #MPV_AFVOL]
1932
+ pop {r1, r2}
1933
+ ldrb r0, [r1]
1934
+ add r1, r0
1935
+ b .mppt_has_volenv
1936
+ .mppt_no_volenv:
1937
+
1938
+ ldrb r0, [r6, #MCA_FLAGS]
1939
+ mov r3, #MCAF_ENVEND
1940
+ orr r0, r3
1941
+ mov r3, #MCAF_KEYON
1942
+ tst r0, r3
1943
+ bne .mppt_has_volenv
1944
+ mov r3, #MCAF_FADE
1945
+ orr r0, r3
1946
+ strb r0, [r6, #MCA_FLAGS]
1947
+
1948
+ mov r0, r8 @ check XM MODE and cut note
1949
+ ldrb r0, [r0, #MPL_FLAGS]
1950
+ lsr r0, #C_FLAGS_XS
1951
+ bcc .mppt_has_volenv
1952
+ mov r0, #0
1953
+ strh r0, [r6, #MCA_FADE]
1954
+ .mppt_has_volenv:
1955
+
1956
+ lsr r2, #1
1957
+ bcc .mppt_no_panenv
1958
+ push {r1, r2}
1959
+ ldrh r0, [r6, #MCA_ENVC_PAN]
1960
+ mov r2, r1
1961
+ ldrb r1, [r6, #MCA_ENVN_PAN]
1962
+ bl mpph_ProcessEnvelope
1963
+ strb r1, [r6, #MCA_ENVN_PAN]
1964
+ strh r0, [r6, #MCA_ENVC_PAN]
1965
+ mov r1, r3
1966
+
1967
+ ldr r0,=mpp_vars
1968
+ mov r3, #MPV_PANPLUS
1969
+ ldrsh r2, [r0,r3]
1970
+ lsr r1, #4
1971
+ sub r1, #128
1972
+ add r2, r1
1973
+ strh r2, [r0,r3]
1974
+ pop {r1, r2}
1975
+ .mppt_no_panenv:
1976
+
1977
+ lsr r2, #1
1978
+ bcc .mppt_no_pitchenv
1979
+ ldrb r0, [r1, #C_MASIE_FILTER]
1980
+ cmp r0, #0
1981
+ bne .mppt_no_pitchenv
1982
+ push {r1, r2}
1983
+ ldrh r0, [r6, #MCA_ENVC_PIC]
1984
+ mov r2, r1
1985
+ ldrb r1, [r6, #MCA_ENVN_PIC]
1986
+ bl mpph_ProcessEnvelope
1987
+ strb r1, [r6, #MCA_ENVN_PIC]
1988
+ strh r0, [r6, #MCA_ENVC_PIC]
1989
+ mov r1, r3
1990
+ lsr r1, #3
1991
+ sub r1, #255
1992
+ mov r0, r5
1993
+ sub r1, #1
1994
+ bmi .mppt_pitchenv_minus
1995
+ #ifdef USE_IWRAM
1996
+ ldr r2,=mpph_LinearPitchSlide_Up
1997
+ jump2
1998
+ #else
1999
+ bl mpph_LinearPitchSlide_Up
2000
+ #endif
2001
+ b .mppt_pitchenv_plus
2002
+ .mppt_pitchenv_minus:
2003
+ neg r1, r1
2004
+ #ifdef USE_IWRAM
2005
+ ldr r2,=mpph_LinearPitchSlide_Down
2006
+ jump2
2007
+ #else
2008
+ bl mpph_LinearPitchSlide_Down
2009
+ #endif
2010
+ .mppt_pitchenv_plus:
2011
+ mov r5, r0
2012
+ pop {r1, r2}
2013
+ .mppt_no_pitchenv:
2014
+
2015
+ ldrb r0, [r6, #MCA_FLAGS]
2016
+ mov r1, #MCAF_FADE
2017
+ tst r0, r1
2018
+ beq .mppt_achn_nofade
2019
+ ldrb r0, [r6, #MCA_INST]
2020
+ sub r0, #1
2021
+
2022
+ mpp_InstrumentPointer
2023
+ ldrb r0, [r0, #C_MASI_FADE]
2024
+
2025
+ ldrh r1, [r6, #MCA_FADE]
2026
+
2027
+ sub r1, r0
2028
+ bcs .mppt_achn_fadeout_clip
2029
+ mov r1, #0
2030
+ .mppt_achn_fadeout_clip:
2031
+ strh r1, [r6, #MCA_FADE]
2032
+
2033
+ .mppt_achn_nofade:
2034
+
2035
+ .mppt_achn_keyon:
2036
+
2037
+
2038
+ @----------------------------------------------------------------------------------
2039
+ @ *** PROCESS AUTO VIBRATO
2040
+ @----------------------------------------------------------------------------------
2041
+
2042
+ ldrb r0, [r6, #MCA_SAMPLE]
2043
+ sub r0, #1
2044
+ bcc .mppt_achn_nostart @ no sample!!
2045
+
2046
+ @bl mpp_SamplePointer
2047
+ mpp_SamplePointer
2048
+ ldrh r1, [r0, #C_MASS_VIR] @ get av-rate
2049
+ cmp r1, #0 @ 0?
2050
+ beq .mppt_av_disabled @ if 0 then its disabled
2051
+ ldrh r2, [r6, #MCA_AVIB_DEP] @ get depth counter
2052
+ add r2, r1 @ add rate
2053
+ lsr r1, r2, #15 @ check for 15-bit overflow
2054
+ beq .mppt_av_depclip @ ..
2055
+
2056
+ ldr r2,=32768 @ and clamp to 32768
2057
+ .mppt_av_depclip:
2058
+ strh r2, [r6, #MCA_AVIB_DEP] @ save depth counter
2059
+ ldrb r1, [r0, #C_MASS_VID] @ get av-depth
2060
+ mul r1, r2 @ multiply
2061
+
2062
+ ldrb r3, [r6, #MCA_AVIB_POS] @ get table position
2063
+ ldrb r2, [r0, #C_MASS_VIS] @ get av-speed
2064
+ add r3, r2 @ add to position
2065
+ lsl r3, #32-8 @ wrap position to 0->255
2066
+ lsr r3, #32-8 @ ..
2067
+ strb r3, [r6, #MCA_AVIB_POS] @ save position
2068
+ ldr r2,=mpp_TABLE_FineSineData @ get table pointer
2069
+ ldrsb r2, [r2, r3] @ load table value at position
2070
+ mul r2, r1 @ multiply with depth
2071
+ asr r2, #23 @ shift value
2072
+ bmi .mppt_av_minus @ and perform slide...
2073
+ .mppt_av_plus: @ --slide up
2074
+ mov r1, r2 @ r1 = slide value
2075
+ mov r0, r5 @ r0 = frequency
2076
+ #ifdef USE_IWRAM
2077
+ fjump2 mpph_PitchSlide_Up
2078
+ #else
2079
+ bl mpph_PitchSlide_Up @ pitch slide
2080
+ #endif
2081
+ b .mppt_av_finished @
2082
+ .mppt_av_minus: @ --slide down
2083
+ neg r1, r2 @ r1 = slide value
2084
+ mov r0, r5 @ r0 = frequency
2085
+ #ifdef USE_IWRAM
2086
+ ldr r2,=mpph_PitchSlide_Down
2087
+ jump2
2088
+ #else
2089
+ bl mpph_PitchSlide_Down @ pitch slide
2090
+ #endif
2091
+
2092
+ .mppt_av_finished:
2093
+ mov r5, r0 @ affect frequency
2094
+ .mppt_av_disabled:
2095
+
2096
+ @---------------------------------------------------------------------------------
2097
+
2098
+ .mppt_achn_noinst:
2099
+
2100
+ push {r4}
2101
+ mov r0, #MIXER_CHN_SIZE
2102
+ mul r4, r0
2103
+ @ldr r0,=mp_channels
2104
+ @ ldr r0,=mm_mixchannels
2105
+ @ ldr r0,[r0]
2106
+ GET_MIXCH r0
2107
+ add r4, r0
2108
+
2109
+ @ *** UPDATE MIXING INFORMATION
2110
+
2111
+ ldrb r0, [r6, #MCA_FLAGS] @ read flags
2112
+ mov r1, #MCAF_START @ test start bit
2113
+ tst r0, r1 @ ..
2114
+ beq .mppt_achn_nostart @
2115
+ .mppt_achn_start: @ START NOTE
2116
+ bic r0, r1 @ clear bit
2117
+ strb r0, [r6, #MCA_FLAGS] @ save flags
2118
+ ldrb r0, [r6, #MCA_SAMPLE] @ get sample #
2119
+
2120
+ sub r0, #1 @ ..
2121
+ bcc .mppt_achn_nostart @ quit if invalid
2122
+ @bl mpp_SamplePointer @ get sample address
2123
+ mpp_SamplePointer
2124
+
2125
+ ldrh r3, [r0, #C_MASS_MSLID]
2126
+
2127
+ add r1,r3,#1 @ msl id == 0xFFFF?
2128
+ lsr r1, #17
2129
+
2130
+ bcc .mppt_achn_msl_sample
2131
+
2132
+ .mppt_achn_direct_sample: @ then sample follows
2133
+
2134
+ add r0, #12
2135
+
2136
+ //------------------------------------------------
2137
+ #ifdef SYS_GBA
2138
+ // ldr r1, [r0,#C_SAMPLE_LEN] @ setup mixer (GBA)
2139
+ // lsl r1, #MP_SAMPFRAC
2140
+ // str r1, [r4,#MIXER_CHN_LEN]
2141
+ // ldr r1, [r0,#C_SAMPLE_LOOP]
2142
+ // str r1, [r4,#MIXER_CHN_LOOP]
2143
+ add r0, #C_SAMPLE_DATA
2144
+ str r0, [r4,#MIXER_CHN_SRC]
2145
+
2146
+ #else
2147
+ //-------------------------------------------
2148
+
2149
+ ldr r1,=0x2000000
2150
+ sub r0, r1
2151
+ str r0, [r4, #MIXER_CHN_SAMP]
2152
+ ldrb r1, [r4, #MIXER_CHN_CNT]
2153
+ mov r0, #MIXER_CF_START
2154
+ orr r1, r0
2155
+ strb r1, [r4, #MIXER_CHN_CNT]
2156
+
2157
+ #endif
2158
+ //-------------------
2159
+
2160
+ b .mppt_achn_gotsample
2161
+ .mppt_achn_msl_sample: @ otherwise get from solution
2162
+
2163
+ #ifdef SYS_GBA
2164
+
2165
+ ldr r2,=mp_solution
2166
+ ldr r2, [r2]
2167
+ mov r1, r2
2168
+ add r1, #12
2169
+ lsl r3, #2
2170
+ ldr r1, [r1, r3]
2171
+ add r1, #8
2172
+ add r0, r1, r2
2173
+
2174
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NOTICE, USE LDM HERE
2175
+
2176
+ // ldr r1, [r0,#C_SAMPLE_LEN] @ setup mixer (GBA)
2177
+ // lsl r1, #MP_SAMPFRAC
2178
+ // str r1, [r4,#MIXER_CHN_LEN]
2179
+ // ldr r1, [r0,#C_SAMPLE_LOOP]
2180
+ // str r1, [r4,#MIXER_CHN_LOOP]
2181
+ add r0, #C_SAMPLE_DATA
2182
+ str r0, [r4,#MIXER_CHN_SRC]
2183
+
2184
+ #endif
2185
+
2186
+ #ifdef SYS_NDS
2187
+
2188
+ ldr r2,=mmSampleBank @ get samplebank pointer
2189
+ ldr r2, [r2]
2190
+ lsl r3, #2 @ add msl_id *4
2191
+ ldr r1, [r2, r3]
2192
+
2193
+ lsl r1, #8 @ mask out counter value
2194
+ lsr r1, #8
2195
+ add r1, #8
2196
+
2197
+ str r1, [r4,#MIXER_CHN_SAMP]
2198
+ ldrb r1, [r4,#MIXER_CHN_CNT] // read control **CNT was cleared, no need to read it
2199
+ mov r0, #MIXER_CF_START // set start bit
2200
+ orr r1, r0
2201
+ strb r1, [r4,#MIXER_CHN_CNT] // save control
2202
+
2203
+ #endif
2204
+
2205
+ .mppt_achn_gotsample:
2206
+ ldr r1,=mpp_vars
2207
+ ldrb r1, [r1, #MPV_SAMPOFF]
2208
+ #ifdef SYS_GBA
2209
+ lsl r1, #MP_SAMPFRAC+8
2210
+ str r1, [r4, #MIXER_CHN_READ]
2211
+ #else
2212
+ str r1, [r4, #MIXER_CHN_READ]
2213
+ #endif
2214
+
2215
+ .mppt_achn_nostart:
2216
+ @ set pitch
2217
+
2218
+ ldrb r0, [r6, #MCA_SAMPLE] @ get sample#
2219
+ sub r0, #1 @ ..
2220
+ bcc .mppt_achn_setvolumeA
2221
+ @bl mpp_SamplePointer @ quit if invalid
2222
+ mpp_SamplePointer
2223
+ push {r0}
2224
+
2225
+ mov r1, r8
2226
+ ldrb r1, [r1, #MPL_FLAGS]
2227
+ lsr r1, #C_FLAGS_SS
2228
+ bcc .mppt_achn_amigafreqs
2229
+ .mppt_achn_linearfreqs:
2230
+
2231
+ ldrh r0, [r0, #C_MASS_FREQ] @ get C5SPEED
2232
+ LSL R0, #2
2233
+ lsr r1, r5, #8 @ do some stuff...
2234
+ mul r1, r0 @ ... period * freq?
2235
+
2236
+ lsr r1, #8
2237
+
2238
+ ldr r0,=mpp_clayer
2239
+ ldrb r0, [r0]
2240
+ cmp r0, #0
2241
+ bne 1f
2242
+ ldr r0,=mm_masterpitch
2243
+ ldr r0, [r0]
2244
+ mul r1, r0
2245
+ lsr r1, #10
2246
+ 1:
2247
+
2248
+ #ifdef SYS_GBA
2249
+
2250
+
2251
+ // ldr r0,=mm_freqscalar
2252
+ // ldr r0, [r0]
2253
+ ldr r0,=(4096*65536)/15768
2254
+ mul r0, r1
2255
+ lsr r0, #16
2256
+ str r0, [r4, #MIXER_CHN_FREQ]
2257
+
2258
+ #else
2259
+
2260
+ ldr r0,=MIXER_SCALE
2261
+ mul r0, r1
2262
+ lsr r0, #16+1
2263
+ strh r0, [r4, #MIXER_CHN_FREQ]
2264
+
2265
+ //strh r1, [r4, #MIXER_CHN_FREQ]
2266
+ #endif
2267
+
2268
+ b .mppt_achn_setvolume
2269
+
2270
+ .mppt_achn_amigafreqs:
2271
+ ldr r0,=MOD_FREQ_DIVIDER_PAL
2272
+ movs r1, r5
2273
+
2274
+ beq .mppt_achn_setvolume @ 0 is a bad period
2275
+ swi SWI_DIVIDE
2276
+
2277
+ ldr r1,=mpp_clayer
2278
+ ldrb r1, [r1]
2279
+ cmp r1, #0
2280
+ bne 1f
2281
+ ldr r1,=mm_masterpitch
2282
+ ldr r1, [r1]
2283
+ mul r0, r1
2284
+ lsr r0, #10
2285
+ 1:
2286
+
2287
+ #ifdef SYS_GBA
2288
+
2289
+ // ldr r1,=mm_freqscalar
2290
+ // ldr r1,[r1]
2291
+ ldr r1,=(4096*65536)/15768
2292
+ mul r0, r1
2293
+ lsr r0, #16
2294
+
2295
+ str r0, [r4, #MIXER_CHN_FREQ]
2296
+ #else
2297
+ // mov r1, r0
2298
+ // ldr r0,=16756991 @ calculate ds mixer timing
2299
+ // swi SWI_DIVIDE
2300
+ // neg r0,r0
2301
+ //lsr r0, #5
2302
+ ldr r1,=MIXER_SCALE
2303
+ mul r0, r1
2304
+ lsr r0, #16+1
2305
+ strh r0, [r4, #MIXER_CHN_FREQ]
2306
+ #endif
2307
+
2308
+ @----------------------------------------------------------------------------------------------------
2309
+ .mppt_achn_setvolume:
2310
+ @----------------------------------------------------------------------------------------------------
2311
+
2312
+ @ set volume
2313
+
2314
+ pop {r0}
2315
+ @ <-- stepped oct 28, 3:27pm
2316
+ ldrb r3, [r0, #C_MASS_GV] @ SV, 6-bit
2317
+ ldrb r0, [r6, #MCA_INST]
2318
+ sub r0, #1
2319
+ bcs 1f
2320
+
2321
+ .thumb_func
2322
+ .mppt_achn_setvolumeA:
2323
+ mov r1, #0
2324
+ b .mppt_achn_badinstrument
2325
+ 1:
2326
+ mpp_InstrumentPointer
2327
+ ldrb r0, [r0, #C_MASI_GVOL] @ IV, 7-bit
2328
+ mul r3, r0
2329
+
2330
+ ldr r1,=mpp_vars
2331
+ ldrb r0, [r1, #MPV_AFVOL] @ ((CV*VOL)/32*VEV/64) 7-bit
2332
+
2333
+ mul r3, r0
2334
+
2335
+ mov r1, r8 @ get global vollume
2336
+ ldrb r0, [r1, #MPL_FLAGS]
2337
+ lsr r0, #4
2338
+ ldrb r0, [r1, #MPL_GV] @ .. 7-bit
2339
+
2340
+ bcc 1f
2341
+ lsl r0, #1 @ xm mode global volume is only 0->64, shift to 0->128
2342
+
2343
+ 1: mul r3, r0 @ multiply
2344
+
2345
+ lsr r3, #10
2346
+
2347
+ ldrh r0, [r6, #MCA_FADE]
2348
+
2349
+
2350
+ mul r3, r0
2351
+
2352
+ lsr r3, r3, #10
2353
+
2354
+ mov r0, r8
2355
+ mov r1, #MPL_VOLUME
2356
+ ldrh r0, [r0, r1]
2357
+ mul r3, r0
2358
+
2359
+ //------------------------------------------------
2360
+ #ifdef SYS_NDS
2361
+ lsr r1, r3, #19-3-5 ///#19-3 (new 16-bit levels!)
2362
+ ldr r3,=65535 //2047
2363
+ cmp r1, r3 @ clip values over 255
2364
+ blt 1f
2365
+ mov r1, r3
2366
+ 1:
2367
+ .mppt_achn_badinstrument:
2368
+ // lsr r3, r1, #3 (new 16-bit levels!)
2369
+ lsr r3, r1, #8
2370
+ strb r3, [r6, #MCA_FVOL]
2371
+
2372
+ #else
2373
+
2374
+ lsr r1, r3, #19
2375
+ cmp r1, #255 @ clip values over 255
2376
+ blt 1f
2377
+ mov r1, #255
2378
+ 1:
2379
+ .mppt_achn_badinstrument:
2380
+ strb r1, [r6, #MCA_FVOL]
2381
+
2382
+ #endif
2383
+
2384
+ cmp r1, #0
2385
+ bne .mppt_achn_audible
2386
+
2387
+ #ifdef SYS_NDS // nds has volume ramping!
2388
+
2389
+ ldrb r3, [r6, #MCA_TYPE]
2390
+ cmp r3, #ACHN_BACKGROUND
2391
+ bne 1f
2392
+ ldrb r3, [r6, #MCA_VOLUME]
2393
+ cmp r3, #0
2394
+ bne 1f
2395
+ ldrh r3, [r4, #MIXER_CHN_CVOL]
2396
+ cmp r3, #0
2397
+ beq .mppt_achn_not_audible
2398
+ #endif
2399
+
2400
+ 1: ldrb r3, [r6, #MCA_FLAGS]
2401
+ mov r2, #MCAF_ENVEND
2402
+ tst r3, r2
2403
+ beq .mppt_achn_audible
2404
+ mov r2, #MCAF_KEYON
2405
+ tst r3, r2
2406
+ bne .mppt_achn_audible
2407
+
2408
+ // #ifdef SYS_NDS
2409
+ // ldrh r3, [r4, #MIXER_CHN_CVOL] // nds has volume ramping!!
2410
+ // cmp r3, #0
2411
+ // bne .mppt_achn_audible
2412
+ // #endif
2413
+
2414
+ .mppt_achn_not_audible:
2415
+ @ STOP CHANNEL
2416
+
2417
+ #ifdef SYS_GBA
2418
+ ldr r0,=1<<31
2419
+ str r0,[r4,#MIXER_CHN_SRC] @ stop mixer channel
2420
+ #else
2421
+ mov r0,#0
2422
+ str r0,[r4,#MIXER_CHN_SAMP] @ stop mixer channel
2423
+ #endif
2424
+
2425
+ ldrb r3, [r6, #MCA_TYPE]
2426
+ cmp r3, #ACHN_FOREGROUND
2427
+ bne .mpp_achn_noparent
2428
+ ldrb r1, [r6, #MCA_PARENT]
2429
+ mov r3, #MCH_SIZE
2430
+ mul r1, r3
2431
+ ldr r0,=mpp_channels
2432
+ ldr r0, [r0]
2433
+ add r0, r1
2434
+ mov r1, #255
2435
+ strb r1, [r0, #MCH_ALLOC]
2436
+ .mpp_achn_noparent:
2437
+
2438
+ mov r1, #ACHN_DISABLED
2439
+ strb r1, [r6, #MCA_TYPE]
2440
+ b .mpp_achn_updated
2441
+ .mppt_achn_audible:
2442
+
2443
+ #ifdef SYS_NDS
2444
+
2445
+ strh r1, [r4, #MIXER_CHN_VOL]
2446
+
2447
+ #else
2448
+
2449
+ strb r1, [r4, #MIXER_CHN_VOL]
2450
+
2451
+ #endif
2452
+
2453
+ #ifdef SYS_GBA // check if mixer channel has ended
2454
+
2455
+ ldr r0, [r4, #MIXER_CHN_SRC]
2456
+ asr r0, #31
2457
+ beq 1f
2458
+
2459
+ #else
2460
+
2461
+ ldr r0, [r4, #MIXER_CHN_SAMP]
2462
+ lsl r0, #8
2463
+ bne 1f
2464
+
2465
+ #endif
2466
+
2467
+ ldrb r3, [r6, #MCA_TYPE]
2468
+ cmp r3, #ACHN_FOREGROUND
2469
+ bne 2f
2470
+
2471
+ ldrb r1, [r6, #MCA_PARENT] // stop channel if channel ended
2472
+ mov r3, #MCH_SIZE
2473
+ mul r1, r3
2474
+ ldr r0,=mpp_channels
2475
+ ldr r0, [r0]
2476
+ add r0, r1
2477
+ mov r1, #255
2478
+ strb r1, [r0, #MCH_ALLOC]
2479
+ 2:
2480
+
2481
+ #ifdef SYS_GBA
2482
+ ldr r0,=1<<31
2483
+ str r0,[r4,#MIXER_CHN_SRC] @ stop mixer channel
2484
+ #else
2485
+ mov r0,#0
2486
+ str r0,[r4,#MIXER_CHN_SAMP] @ stop mixer channel
2487
+ #endif
2488
+
2489
+ mov r1, #ACHN_DISABLED
2490
+ strb r1, [r6, #MCA_TYPE]
2491
+ b .mpp_achn_updated
2492
+
2493
+ @ set panning
2494
+ 1: ldr r1,=mpp_vars
2495
+ mov r3, #MPV_PANPLUS
2496
+ ldrsh r0, [r1,r3]
2497
+ ldrb r1, [r6, #MCA_PANNING]
2498
+
2499
+ add r1, r0
2500
+
2501
+ cmp r1, #0
2502
+ bge .mpp_achn_clippan1
2503
+ mov r1, #0
2504
+ .mpp_achn_clippan1:
2505
+ cmp r1, #255
2506
+ ble .mpp_achn_clippan2
2507
+ mov r1, #255
2508
+ .mpp_achn_clippan2:
2509
+
2510
+ #ifdef SYS_NDS
2511
+ lsr r1, #1
2512
+ ldrb r0, [r4, #MIXER_CHN_CNT]
2513
+ lsr r0, #7
2514
+ lsl r0, #7
2515
+ orr r0, r1
2516
+ strb r0, [r4, #MIXER_CHN_CNT]
2517
+ #endif
2518
+
2519
+ #ifdef SYS_GBA
2520
+ strb r1, [r4, #MIXER_CHN_PAN]
2521
+ #endif
2522
+
2523
+
2524
+ .mpp_achn_updated:
2525
+ pop {r4}
2526
+ pop {r0}
2527
+ bx r0
2528
+ //pop {pc} @ exit
2529
+ .pool
2530
+
2531
+ .align 2
2532
+ .thumb_func
2533
+ @-------------------------------------------------------------------------
2534
+ mpph_ProcessEnvelope: @ params={count,node,address}
2535
+ @-------------------------------------------------------------------------
2536
+
2537
+ @ processes the envelope at <address>
2538
+ @ returns:
2539
+ @ r0=count
2540
+ @ r1=node
2541
+ @ r2=exit_code
2542
+ @ r3=value*64
2543
+
2544
+ push {r4,r5}
2545
+
2546
+ @ get node and base
2547
+ lsl r4, r1, #2
2548
+ add r4, #C_MASIE_NODES
2549
+ add r4, r2
2550
+
2551
+ ldrh r3, [r4, #2]
2552
+ lsl r3, #32-7
2553
+ lsr r3, #32-7-6
2554
+
2555
+ @ check for zero count
2556
+
2557
+ cmp r0, #0
2558
+ bne .mpph_pe_between
2559
+ .mpph_pe_new:
2560
+
2561
+ @ process envelope loop
2562
+
2563
+ ldrb r5, [r2, #C_MASIE_LEND]
2564
+ cmp r1, r5
2565
+ bne 1f
2566
+ ldrb r1, [r2, #C_MASIE_LSTART]
2567
+ mov r2, #2
2568
+ b .mpph_pe_exit
2569
+
2570
+ @ process envelope sustain loop
2571
+
2572
+ 1: ldrb r5, [r6, #MCA_FLAGS]
2573
+ lsr r5, #1 @ locked
2574
+ bcc 1f
2575
+ ldrb r5, [r2, #C_MASIE_SEND]
2576
+ cmp r1, r5
2577
+ bne 1f
2578
+ ldrb r1, [r2, #C_MASIE_SSTART]
2579
+ mov r2, #0
2580
+ b .mpph_pe_exit
2581
+
2582
+ @ check for end
2583
+
2584
+ 1: ldrb r5, [r2, #C_MASIE_NODEC]
2585
+ sub r5, #1
2586
+ cmp r1, r5
2587
+ bne .mpph_count
2588
+ mov r2, #2
2589
+ b .mpph_pe_exit
2590
+
2591
+ .mpph_pe_between:
2592
+
2593
+ @ delta * count
2594
+ @ formula : y = base*2^6 + -----------------
2595
+ @ 2^3
2596
+ mov r5, #0
2597
+ ldrsh r5, [r4,r5]
2598
+ mul r5, r0
2599
+ asr r5, #3
2600
+ add r3, r5
2601
+
2602
+ .mpph_count:
2603
+
2604
+ @ increment count and check if == read count
2605
+
2606
+ add r0, #1
2607
+ ldrh r5, [r4, #2]
2608
+ lsr r5, #7
2609
+ cmp r0, r5
2610
+ bne .mpph_pe_exit
2611
+
2612
+ @ increment node and reset counter
2613
+
2614
+ mov r0, #0
2615
+ add r1, #1
2616
+
2617
+ .mpph_pe_exit:
2618
+
2619
+ pop {r4,r5}
2620
+ bx lr
2621
+ .pool
2622
+
2623
+ /*
2624
+ .align 2
2625
+ .thumb_func
2626
+ @--------------------------------------------------------------------------------------------
2627
+ mpp_Alloc_Channel:
2628
+ @--------------------------------------------------------------------------------------------
2629
+
2630
+ @ find a channel to use
2631
+ @ returns invalid channel if none available
2632
+ push {r4,r5} @ preserve reg(s)
2633
+ ldr r5,=mm_ch_mask
2634
+ ldr r5, [r5]
2635
+
2636
+ @ldr r1,=mpp_achannels @ load pointer
2637
+ ldr r1,=mm_achannels
2638
+ ldr r1,[r1]
2639
+ mov r0, #0 @ load counter
2640
+ mov r2, #255 @ r2 = MAXVOL+1 (highest)
2641
+ add r2, #1
2642
+ mov r3, #255 @ r3 = 255 (none found)
2643
+ b .mppac_start
2644
+
2645
+ .mppac_next:
2646
+ add r1, #MCA_SIZE @ change pointer
2647
+ add r0, #1 @ count
2648
+ .mppac_start:
2649
+ lsr r5, #1
2650
+ bcs .mppac_check
2651
+ bne .mppac_next
2652
+ .mppac_end:
2653
+ mov r0, r3 @ if no disabled channels are found, use lowest volume channel
2654
+ .mppac_found:
2655
+
2656
+ pop {r4,r5}
2657
+ bx lr
2658
+
2659
+ .mppac_check:
2660
+ ldrb r4, [r1, #MCA_TYPE] @ check active channel type
2661
+ cmp r4, #ACHN_DISABLED @ disabled?
2662
+ beq .mppac_found @ if so, use this channel
2663
+ cmp r4, #ACHN_BACKGROUND @ check if its a background channel
2664
+ bne .mppac_next
2665
+
2666
+ ldrb r4, [r1, #MCA_FVOL] @ compare volumes
2667
+ cmp r4, r2 @
2668
+ bge .mppac_next
2669
+ mov r3, r0 @ save channel#
2670
+ mov r2, r4 @ and volume
2671
+ b .mppac_next
2672
+ */
2673
+
2674
+ .pool
2675
+
2676
+ @........................................................................................
2677
+
2678
+ .thumb_func
2679
+ mpp_PatternPointer:
2680
+ mov r1, r8
2681
+ ldr r2,[r1,#MPL_SONGADR]
2682
+ ldr r1,[r1,#MPL_PATTTABLE]
2683
+ lsl r0, #2
2684
+ ldr r0,[r1,r0]
2685
+ add r0, r2
2686
+ bx lr
2687
+ .pool
2688
+ #ifdef FOO_UC
2689
+ .align 2
2690
+ .thumb_func
2691
+ mpp_GetPeriod:
2692
+ @ r0 = note
2693
+ @ r2 = tuning
2694
+ @ CLOBBERS R1,R3
2695
+ @ RETURN
2696
+ @ r0 = IT/S3M PERIOD
2697
+
2698
+ mov r1, r8
2699
+ ldrb r1, [r1, #MPL_FLAGS]
2700
+ lsr r1, #C_FLAGS_SS
2701
+ bcs .mpp_gp_linear
2702
+ .mpp_gp_amiga:
2703
+
2704
+ mov r3, r0
2705
+ ldr r0,=note_table_mod
2706
+ ldrb r1, [r0, r3]
2707
+ sub r0, #3*10
2708
+ lsr r3, #2
2709
+ ldrb r0, [r0, r3]
2710
+
2711
+ @ r0 = octave
2712
+ @ r1 = note
2713
+ lsl r1, #1
2714
+ ldr r3,=ST3_FREQTABLE
2715
+ ldrh r1, [r3, r1]
2716
+
2717
+ ldr r3,=133808
2718
+ mul r1, r3
2719
+ lsr r1, r0
2720
+
2721
+ lsr r0, r1, #3
2722
+ mov r1, r2
2723
+
2724
+ swi SWI_DIVIDE
2725
+ lsl r0, #3
2726
+
2727
+ bx lr
2728
+
2729
+ .mpp_gp_linear:
2730
+ ldr r1,=IT_PitchTable
2731
+ lsl r0, #2
2732
+ ldr r0, [r1, r0]
2733
+
2734
+ bx lr
2735
+
2736
+ #endif
2737
+
2738
+ @=============================================================================
2739
+ @ EFFECT MEMORY
2740
+ @=============================================================================
2741
+
2742
+ .text
2743
+
2744
+ mpp_effect_memmap_xm:
2745
+ .byte 0,0,0,0,2,3,4,0,0,5,0,6,7,0,0,8,9,10,11,0,0,0,0,12,0,0,0,0,0,0,13
2746
+ @ /,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q, R, S,T,U,V,W, X,Y,Z,0,1,2,3
2747
+
2748
+ .equ MPP_XM_VFX_MEM_VS, 12 @ $ud
2749
+ .equ MPP_XM_VFX_MEM_FVS, 13 @ $ud
2750
+ .equ MPP_XM_VFX_MEM_GLIS, 14 @ $0x
2751
+ .equ MPP_XM_VFX_MEM_PANSL, 7 @ $lr
2752
+
2753
+ mpp_effect_memmap_it:
2754
+ .byte 0,0,0,0,2,3,3,0,0,4,5,2,2,0,6,7,8,9,10,11,12,0,0,13,0,14,0
2755
+ @ /,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R, S, T, U,V,W, X,Y, Z
2756
+ mpp_veffect_memmap_it:
2757
+
2758
+ .equ MPP_IT_VFX_MEM, 14
2759
+ .equ MPP_GLIS_MEM, 0
2760
+ .equ MPP_IT_PORTAMEM, 2
2761
+
2762
+
2763
+ @ 0 means custom behavior, or disabled
2764
+
2765
+ .align 2
2766
+ .thumb_func
2767
+ @-----------------------------------------------------------------------------
2768
+ mpp_Channel_ExchangeMemory:
2769
+ @-----------------------------------------------------------------------------
2770
+
2771
+ @ r0 = effect#
2772
+ @ r1 = param
2773
+
2774
+ @ check flags for XM mode
2775
+
2776
+ mov r2, r8
2777
+ ldrb r2, [r2, #MPL_FLAGS]
2778
+ lsr r2, #C_FLAGS_XS
2779
+ bcs 1f
2780
+
2781
+ @ IT effects
2782
+
2783
+ ldr r2,=mpp_effect_memmap_it
2784
+ b 2f
2785
+
2786
+ 1:
2787
+ @ XM effects
2788
+
2789
+ ldr r2,=mpp_effect_memmap_xm
2790
+ 2: ldrb r2, [r2, r0]
2791
+ sub r2, #1
2792
+ bcc 3f
2793
+
2794
+ @ if param=0 then load memory value, otherwise save param to memory
2795
+
2796
+ add r2, #MCH_MEMORY
2797
+ cmp r1, #0
2798
+ bne 1f
2799
+ ldrb r1, [r7, r2]
2800
+ strb r1, [r7, #MCH_PARAM]
2801
+ 1: strb r1, [r7, r2]
2802
+
2803
+ 3: bx lr
2804
+
2805
+ @----------------------------------------------------------
2806
+ mpp_Channel_ExchangeGxx:
2807
+ @----------------------------------------------------------
2808
+
2809
+ @ r1 = param
2810
+
2811
+
2812
+
2813
+ /******************************************************************************
2814
+ *
2815
+ * Volume Commands
2816
+ *
2817
+ ******************************************************************************/
2818
+
2819
+
2820
+
2821
+ /******************************************************************************
2822
+ * mpp_Process_VolumeCommand()
2823
+ *
2824
+ * Process volume command
2825
+ ******************************************************************************/
2826
+ .global mpp_Process_VolumeCommand
2827
+ .thumb_func
2828
+ mpp_Process_VolumeCommand:
2829
+
2830
+ mov r0, r8
2831
+ ldrb r2, [r0, #MPL_TICK]
2832
+ ldr r0, [r0, #MPL_SONGADR]
2833
+ ldrb r0, [r0, #C_MAS_FLAGS]
2834
+ lsr r0, #4
2835
+ ldrb r0, [r7, #MCH_VOLCMD]
2836
+ bcc .mppuv_it
2837
+ b .mppuv_xm
2838
+ .mppuv_it:
2839
+
2840
+ @ determine which command to use
2841
+
2842
+ cmp r0, #64
2843
+ ble .mppuv_setvol
2844
+ cmp r0, #84
2845
+ ble .mppuv_fvol
2846
+ cmp r0, #104
2847
+ ble .mppuv_volslide
2848
+ cmp r0, #124
2849
+ ble .mppuv_porta
2850
+ cmp r0, #192
2851
+ ble .mppuv_panning
2852
+ cmp r0, #202
2853
+ ble .mppuv_glissando
2854
+ cmp r0, #212
2855
+ ble .mppuv_vibrato
2856
+ .mppuv_exit1:
2857
+ bx lr
2858
+
2859
+ .align 2
2860
+ @-----------------------------------------------------------------------------------
2861
+ .mppuv_setvol: @ SET VOLUME
2862
+ @-----------------------------------------------------------------------------------
2863
+
2864
+ @ sets volume on tick0
2865
+
2866
+ cmp r2, #0
2867
+ bne .mppuv_setvol_exit
2868
+ strb r0, [r7, #MCH_VOLUME]
2869
+ .mppuv_setvol_exit:
2870
+ bx lr @ exit
2871
+
2872
+ .align 2
2873
+ @-----------------------------------------------------------------------------------
2874
+ .mppuv_fvol: @ FINE VOLUME SLIDE UP/DOWN
2875
+ @-----------------------------------------------------------------------------------
2876
+
2877
+ cmp r2, #0 @ only slide on tick0
2878
+ bne .mppuv_exit1 @ ..
2879
+ ldrb r1, [r7, #MCH_VOLUME] @ load channel volume
2880
+ mov r2, #MCH_MEMORY+MPP_IT_VFX_MEM
2881
+ cmp r0, #75 @ check slide direction
2882
+ bge .mppuv_fvoldown @ jump to slide down if value is 75+ (75-84 is slide down)
2883
+ .mppuv_fvolup: @ ------ slide up ----------
2884
+ sub r0, #65 @ 65->74 , 0->9
2885
+ .mppuv_volup: @ ** entry for volume slide up
2886
+ bne 1f @ is value 0?
2887
+ ldrb r0, [r7, r2] @ then fetch value from memory
2888
+ 1: strb r0, [r7, r2] @ save value
2889
+ .mppuv_volupA:
2890
+ add r1, r0 @ add to volume
2891
+ cmp r1, #64 @ clamp to 0->64
2892
+ blt .mppuv_fvol_exit @ ..
2893
+ mov r1, #64 @ ..
2894
+ b .mppuv_fvol_exit @ ..
2895
+ .mppuv_fvoldown: @ ------ slide down --------
2896
+ sub r0, #75 @ 75->84 , 0->9
2897
+ .mppuv_voldown: @ ** entry for volume slide down
2898
+ bne 1f @ is value 0?
2899
+ ldrb r0, [r7, r2] @ then fetch value from memory
2900
+ 1: strb r0, [r7, r2] @ save value
2901
+ .mppuv_voldownA:
2902
+ sub r1, r0 @ subtract from volume
2903
+ bcs .mppuv_fvol_exit @ check overflow and clamp
2904
+ mov r1, #0 @ ..
2905
+ .mppuv_fvol_exit: @ ..
2906
+ strb r1, [r7, #MCH_VOLUME] @ store volume
2907
+ .mppuv_exit2:
2908
+ bx lr @ exit function
2909
+
2910
+ .align 2
2911
+ @----------------------------------------------------------------------------------
2912
+ .mppuv_volslide: @ VOLUME SLIDE UP/DOWN
2913
+ @----------------------------------------------------------------------------------
2914
+
2915
+ cmp r2, #0 @ only slide on other ticks
2916
+ beq .mppuv_exit1 @ ..
2917
+ ldrb r1, [r7, #MCH_VOLUME] @ get volume
2918
+ cmp r0, #95 @ check slide direction
2919
+ bge .mppuv_vs_down
2920
+ .mppuv_vs_up: @ slide up...
2921
+ mov r2, #MCH_MEMORY+MPP_IT_VFX_MEM
2922
+ sub r0, #85 @ 85->94 , 0->9
2923
+ b .mppuv_volup @ branch to function (use fvol code)
2924
+
2925
+ .mppuv_vs_down: @ slide down...
2926
+ mov r2, #MCH_MEMORY+MPP_IT_VFX_MEM
2927
+ sub r0, #95 @ 95->104 , 0->9
2928
+ b .mppuv_voldown @ branch to function (use fvol code)
2929
+
2930
+ .align 2
2931
+ @---------------------------------------------------------------------------------------
2932
+ .mppuv_porta: @ PORTAMENTO UP/DOWN
2933
+ @---------------------------------------------------------------------------------------
2934
+
2935
+ cmp r2, #0 @ only slide on other ticks
2936
+ beq .mppuv_exit2
2937
+
2938
+ push {lr} @ save return address
2939
+ mov r1, r0 @ get period value
2940
+ mov r0, #MCH_PERIOD
2941
+ ldr r0, [r7, r0]
2942
+
2943
+ cmp r1, #115 @ check slide direction
2944
+ bge .mppuv_porta_up
2945
+ .mppuv_porta_down:
2946
+ sub r1, #105 @ map value 0->9
2947
+ lsl r1, #2 @ volume command slides are
2948
+ bne 1f
2949
+ ldrb r1, [r7, #MCH_MEMORY+MPP_IT_PORTAMEM]
2950
+ 1: strb r1, [r7, #MCH_MEMORY+MPP_IT_PORTAMEM]
2951
+ bl mpph_PitchSlide_Down @ equal to normal slides *4
2952
+ b .mppuv_porta_set
2953
+
2954
+ .mppuv_porta_up:
2955
+ sub r1, #115 @ slide up...
2956
+ lsl r1, #2
2957
+ bne 1f
2958
+ ldrb r1, [r7, #MCH_MEMORY+MPP_IT_PORTAMEM]
2959
+ 1: strb r1, [r7, #MCH_MEMORY+MPP_IT_PORTAMEM]
2960
+ bl mpph_PitchSlide_Up
2961
+
2962
+ .mppuv_porta_set:
2963
+ mov r2, #MCH_PERIOD @ store new period
2964
+ ldr r1, [r7, r2]
2965
+ str r0, [r7, r2]
2966
+ sub r0, r1 @ and edit temp period
2967
+ add r5, r0
2968
+
2969
+ pop {r0}
2970
+ bx r0
2971
+ // pop {pc} @ exit
2972
+
2973
+ .align 2
2974
+ @---------------------------------------------------------------------------------------
2975
+ .mppuv_panning: @ SET PANNING
2976
+ @---------------------------------------------------------------------------------------
2977
+
2978
+ cmp r2, #0 @ only set on tick 0
2979
+ bne .mppuv_exit1 @ ..
2980
+ sub r0, #128 @ map to 0->64
2981
+ lsl r0, #2
2982
+ cmp r0, #255
2983
+ blt .mppuv_p_store
2984
+ mov r0, #255
2985
+ .mppuv_p_store:
2986
+ strb r0, [r7, #MCH_PANNING] @ save to active channel
2987
+ .mppuv_p_exit:
2988
+ bx lr @ exit
2989
+
2990
+ .align 2
2991
+ @---------------------------------------------------------------------------------------
2992
+ .mppuv_glissando: @ GLISSANDO
2993
+ @---------------------------------------------------------------------------------------
2994
+
2995
+ cmp r2, #0
2996
+ beq .mppuv_p_exit
2997
+
2998
+ sub r0, #193
2999
+ ldr r1,=vcmd_glissando_table
3000
+ ldrb r0, [r1, r0]
3001
+
3002
+ mov r1, r8
3003
+ ldrb r1, [r1, #MPL_FLAGS]
3004
+ lsr r1, #C_FLAGS_GS
3005
+ bcs 2f
3006
+ @ single gxx
3007
+
3008
+ cmp r0, #0
3009
+ beq 1f
3010
+ ldrb r0, [r7, #MCH_MEMORY+MPP_GLIS_MEM]
3011
+ 1: strb r0, [r7, #MCH_MEMORY+MPP_GLIS_MEM]
3012
+ b .mppe_glis_ot
3013
+
3014
+ 2: @ shared gxx
3015
+
3016
+ cmp r0, #0
3017
+ beq 1f
3018
+ ldrb r0, [r7, #MCH_MEMORY+MPP_IT_PORTAMEM]
3019
+ 1: strb r0, [r7, #MCH_MEMORY+MPP_IT_PORTAMEM]
3020
+ strb r0, [r7, #MCH_MEMORY+MPP_GLIS_MEM]
3021
+
3022
+ b .mppe_glis_ot
3023
+ .pool
3024
+
3025
+ vcmd_glissando_table:
3026
+ .byte 0,1,4,8,16,32,64,96,128,255
3027
+
3028
+ .align 2
3029
+ @---------------------------------------------------------------------------------------
3030
+ .mppuv_vibrato: @ VIBRATO (SPEED)
3031
+ @---------------------------------------------------------------------------------------
3032
+
3033
+ @ vibrato... sets speed
3034
+ cmp r2, #0
3035
+ beq .mppuv_vib_exit
3036
+ sub r0, #203
3037
+ beq 1f
3038
+ lsl r0, #2
3039
+ strb r0, [r7, #MCH_VIBSPD]
3040
+ 1: b mppe_DoVibrato
3041
+ .mppuv_vib_exit:
3042
+ bx lr
3043
+
3044
+
3045
+
3046
+ /******************************************************************************
3047
+ *
3048
+ * XM Volume Commands
3049
+ *
3050
+ ******************************************************************************/
3051
+
3052
+
3053
+
3054
+ .align 2
3055
+ .thumb_func
3056
+ @---------------------------------------------------------------------------------------
3057
+ .mppuv_xm:
3058
+ @---------------------------------------------------------------------------------------
3059
+
3060
+ @ determine command type
3061
+
3062
+ cmp r0, #0 @ 0 = none
3063
+ beq .mppuv_exit4
3064
+ cmp r0, #0x50
3065
+ ble .mppuv_xm_setvol
3066
+ cmp r0, #0x80
3067
+ blt .mppuv_xm_volslide
3068
+ cmp r0, #0xA0
3069
+ blt .mppuv_xm_fvolslide
3070
+ cmp r0, #0xC0
3071
+ blt .mppuv_xm_vibrato
3072
+ cmp r0, #0xD0
3073
+ blt .mppuv_xm_panning
3074
+ cmp r0, #0xF0
3075
+ blt .mppuv_xm_panslide
3076
+ b .mppuv_xm_toneporta
3077
+
3078
+ .align 2
3079
+ .thumb_func
3080
+ @----------------------------------------------------------------------------------------
3081
+ .mppuv_xm_setvol: @ Set Volume
3082
+ @----------------------------------------------------------------------------------------
3083
+
3084
+ cmp R2, #0
3085
+ bne .mppuv_exit4
3086
+ sub r0, #0x10
3087
+ strb r0, [r7, #MCH_VOLUME]
3088
+ .mppuv_exit4:
3089
+ bx lr
3090
+
3091
+ .align 2
3092
+ .thumb_func
3093
+ @----------------------------------------------------------------------------------------
3094
+ .mppuv_xm_volslide: @ Volume Slide
3095
+ @----------------------------------------------------------------------------------------
3096
+
3097
+ cmp r2, #0
3098
+ beq .mppuv_exit2
3099
+ ldrb r1, [r7, #MCH_VOLUME]
3100
+ mov r3, #MCH_MEMORY+MPP_XM_VFX_MEM_VS
3101
+ ldrb r2, [r7, r3]
3102
+ cmp r0, #0x70
3103
+ bge .mppuv_xm_volslide_up
3104
+ sub r0, #0x60
3105
+ .mppuv_xm_volslide_dn_check:
3106
+ bne 1f
3107
+ mov r0, r2
3108
+ lsl r0, #32-4
3109
+ lsr r0, #32-4
3110
+ b 2f
3111
+ 1: lsr r2, #4
3112
+ lsl r2, #4
3113
+ orr r2, r0
3114
+ strb r2, [r7, r3]
3115
+ 2: b .mppuv_voldownA
3116
+
3117
+ .mppuv_xm_volslide_up:
3118
+ sub r0, #0x70
3119
+ .mppuv_xm_volslide_up_check:
3120
+ bne 1f
3121
+ mov r0, r2
3122
+ lsr r0, #4
3123
+ b 2f
3124
+ 1: lsl r2, #32-4
3125
+ lsr r2, #32-4
3126
+ lsl r0, #4
3127
+ orr r2, r0
3128
+ lsr r0, #4
3129
+ strb r2, [r7, r3]
3130
+ 2: b .mppuv_volupA
3131
+
3132
+ .align 2
3133
+ .thumb_func
3134
+ @----------------------------------------------------------------------------------------
3135
+ .mppuv_xm_fvolslide: @ Fine Volume Slide
3136
+ @----------------------------------------------------------------------------------------
3137
+
3138
+ cmp r2, #0
3139
+ bne .mppuv_exit4
3140
+ ldrb r1, [r7, #MCH_VOLUME]
3141
+ mov r3, #MCH_MEMORY+MPP_XM_VFX_MEM_FVS
3142
+ ldrb r2, [r7, r3]
3143
+ cmp r0, #0x90
3144
+ bge .mppuv_xm_fvolslide_up
3145
+ sub r0, #0x80
3146
+ b .mppuv_xm_volslide_dn_check
3147
+ .mppuv_xm_fvolslide_up:
3148
+ sub r0, #0x90
3149
+ b .mppuv_xm_volslide_up_check
3150
+
3151
+ .align 2
3152
+ .thumb_func
3153
+ @----------------------------------------------------------------------------------------
3154
+ .mppuv_xm_vibrato: @ Vibrato
3155
+ @----------------------------------------------------------------------------------------
3156
+
3157
+ @ xm vibrato
3158
+ @ sets speed or depth
3159
+
3160
+ cmp r2, #0
3161
+ beq .mppuv_xm_vibexit
3162
+ cmp r0, #0xB0
3163
+ bge .mppuv_xm_vibdepth
3164
+
3165
+ .mppuv_xm_vibspd:
3166
+ sub r0, #0xA0
3167
+ lsl r0, #2
3168
+ beq 1f
3169
+ strb r0, [r7, #MCH_VIBSPD]
3170
+ 1: b mppe_DoVibrato
3171
+
3172
+ .mppuv_xm_vibdepth:
3173
+ sub r0, #0xB0
3174
+ lsl r0, #3
3175
+ beq 1f
3176
+ strb r0, [r7, #MCH_VIBDEP]
3177
+ 1: b mppe_DoVibrato
3178
+
3179
+ .mppuv_xm_vibexit:
3180
+ bx lr
3181
+
3182
+ .align 2
3183
+ .thumb_func
3184
+ @----------------------------------------------------------------------------------------
3185
+ .mppuv_xm_panning: @ Panning
3186
+ @----------------------------------------------------------------------------------------
3187
+
3188
+ cmp r2, #0
3189
+ bne .mppuv_exit3
3190
+ sub r0, #0xC0
3191
+ lsl r0, #4
3192
+ cmp r0, #240
3193
+ beq .mppuv_xm_panhack
3194
+ strb r0, [r7, #MCH_PANNING]
3195
+ bx lr
3196
+ .mppuv_xm_panhack:
3197
+ mov r0, #255
3198
+ strb r0, [r7, #MCH_PANNING]
3199
+ .mppuv_exit3:
3200
+ bx lr
3201
+
3202
+ .align 2
3203
+ .thumb_func
3204
+ @----------------------------------------------------------------------------------------
3205
+ .mppuv_xm_panslide: @ Panning Slide
3206
+ @----------------------------------------------------------------------------------------
3207
+
3208
+ cmp r2, #0
3209
+ beq .mppuv_exit3
3210
+ ldrb r2, [r7, #MCH_PANNING]
3211
+ ldrb r3, [r7, #MCH_MEMORY + MPP_XM_VFX_MEM_PANSL]
3212
+ cmp r0, #0xE0
3213
+ bge .mppuv_xm_panslide_right
3214
+ sub r0, #0xD0
3215
+ bne 1f
3216
+ lsr r0, r3, #4
3217
+ b 2f
3218
+ 1: lsl r3, #32-4
3219
+ lsr r3, #32-4
3220
+ lsl r0, #4
3221
+ orr r3, r0
3222
+ lsr r0, #4
3223
+ strb r3, [r7, #MCH_MEMORY + MPP_XM_VFX_MEM_PANSL]
3224
+
3225
+ 2: lsl r0, #2
3226
+ sub r2, r0
3227
+ bcs .mppuv_xm_panslide_set
3228
+ mov r2, #0
3229
+ b .mppuv_xm_panslide_set
3230
+ .mppuv_xm_panslide_right:
3231
+ sub r0, #0xE0
3232
+ bne 1f
3233
+ lsl r0, r3, #32-4
3234
+ lsr r0, #32-4
3235
+ b 2f
3236
+ 1: lsr r3, #4
3237
+ lsl r3, #4
3238
+ orr r3, r0
3239
+ strb r3, [r7, #MCH_MEMORY + MPP_XM_VFX_MEM_PANSL]
3240
+ 2: lsl r0, #2
3241
+ add r2, r0
3242
+ cmp r2, #255
3243
+ blt .mppuv_xm_panslide_set
3244
+ mov r2, #255
3245
+ .mppuv_xm_panslide_set:
3246
+ strb r2, [r7, #MCH_PANNING]
3247
+ bx lr
3248
+
3249
+ .align 2
3250
+ .thumb_func
3251
+ @-------------------------------------------------------------------------------------
3252
+ .mppuv_xm_toneporta: @ Glissando
3253
+ @-------------------------------------------------------------------------------------
3254
+
3255
+ @ glissando...
3256
+ @ on nonzero ticks, do a regular glissando slide at speed * 16
3257
+ cmp r2, #0
3258
+ beq 1f
3259
+
3260
+ sub r0, #0xF0
3261
+ lsl r0, #4
3262
+ beq 2f
3263
+ mov r1, #MCH_MEMORY+MPP_XM_VFX_MEM_GLIS
3264
+ strb r0, [r7, r1]
3265
+ 2: ldrb r0, [r7, r1]
3266
+ mov r1, r0
3267
+
3268
+ b .mppe_glis_backdoor
3269
+
3270
+ 1: bx lr
3271
+
3272
+
3273
+
3274
+ /******************************************************************************
3275
+ *
3276
+ * Module Effects
3277
+ *
3278
+ ******************************************************************************/
3279
+
3280
+
3281
+
3282
+ /******************************************************************************
3283
+ * mpp_ProcessEffect()
3284
+ *
3285
+ * Process pattern effect.
3286
+ ******************************************************************************/
3287
+ .global mpp_Process_Effect
3288
+ .thumb_func
3289
+ mpp_Process_Effect:
3290
+
3291
+ push {lr}
3292
+ ldrb r0, [r7, #MCH_EFFECT] @ get effect#
3293
+ ldrb r1, [r7, #MCH_PARAM] @ r1 = param
3294
+ bl mpp_Channel_ExchangeMemory
3295
+
3296
+ lsl r0, #1
3297
+
3298
+ pop {r2}
3299
+ mov lr, r2
3300
+
3301
+ mov r2, r8
3302
+ ldrb r2, [r2, #MPL_TICK] @ r2 = tick#
3303
+
3304
+ cmp r2, #0 @ Z flag = tick0 :)
3305
+ add r0, pc
3306
+ mov pc, r0
3307
+
3308
+ b mppe_todo
3309
+ b mppe_SetSpeed
3310
+ b mppe_PositionJump
3311
+ b mppe_PatternBreak
3312
+ b mppe_VolumeSlide
3313
+ b mppe_Portamento
3314
+ b mppe_Portamento
3315
+ b mppe_Glissando
3316
+ b mppe_Vibrato
3317
+ b mppe_todo
3318
+ b mppe_Arpeggio
3319
+ b mppe_VibratoVolume
3320
+ b mppe_PortaVolume
3321
+ b mppe_ChannelVolume
3322
+ b mppe_ChannelVolumeSlide
3323
+ b mppe_SampleOffset
3324
+ b mppe_todo
3325
+ b mppe_Retrigger
3326
+ b mppe_Tremolo @ tremolo
3327
+ b mppe_Extended
3328
+ b mppe_SetTempo
3329
+ b mppe_FineVibrato
3330
+ b mppe_SetGlobalVolume
3331
+ b mppe_GlobalVolumeSlide
3332
+ b mppe_SetPanning
3333
+ b mppe_Panbrello
3334
+ b mppe_ZXX
3335
+ b mppe_SetVolume
3336
+ b mppe_KeyOff
3337
+ b mppe_EnvelopePos
3338
+ b mppe_OldTremor
3339
+ .pool
3340
+
3341
+ .align 2
3342
+ .thumb_func
3343
+ @---------------------------------------------------------------------------------
3344
+ mppe_SetSpeed: @ EFFECT Axy: SET SPEED
3345
+ @---------------------------------------------------------------------------------
3346
+
3347
+ bne .mppe_ss_exit @ dont set on nonzero ticks
3348
+ cmp r1, #0
3349
+ beq .mppe_ss_exit
3350
+ mov r0, r8
3351
+
3352
+ strb r1, [r0, #MPL_SPEED]
3353
+ .mppe_ss_exit:
3354
+ .thumb_func
3355
+ mppe_todo:
3356
+ bx lr @ exit
3357
+
3358
+ .align 2
3359
+ .thumb_func
3360
+ @---------------------------------------------------------------------------------
3361
+ mppe_PositionJump: @ EFFECT Bxy: SET POSITION
3362
+ @---------------------------------------------------------------------------------
3363
+
3364
+ bne .mppe_pj_exit @ skip nonzero ticks
3365
+ mov r0, r8
3366
+ strb r1, [r0, #MPL_PATTJUMP]
3367
+ .mppe_pj_exit:
3368
+ bx lr @ exit
3369
+ .pool
3370
+
3371
+ .align 2
3372
+ .thumb_func
3373
+ @---------------------------------------------------------------------------------
3374
+ mppe_PatternBreak: @ EFFECT Cxy: PATTERN BREAK
3375
+ @---------------------------------------------------------------------------------
3376
+ bne .mppe_pb_exit @ skip nonzero ticks
3377
+ mov r0, r8 @ get variables
3378
+ strb r1, [r0, #MPL_PATTJUMP_ROW] @ save param to row value
3379
+ ldrb r1, [r0, #MPL_PATTJUMP] @ check if pattjump=empty
3380
+ cmp r1, #255 @ 255=empty
3381
+ bne .mppe_pb_exit @ ...
3382
+ ldrb r1, [r0, #MPL_POSITION] @ if empty, set pattjump=position+1
3383
+ add r1, #1
3384
+ strb r1, [r0, #MPL_PATTJUMP]
3385
+ .mppe_pb_exit:
3386
+ bx lr @ finished
3387
+ .pool
3388
+
3389
+ .align 2
3390
+ .thumb_func
3391
+ @------------------------------------------------------------------------------------------
3392
+ mppe_VolumeSlide: @ EFFECT Dxy: VOLUME SLIDE
3393
+ @------------------------------------------------------------------------------------------
3394
+
3395
+ push {lr}
3396
+ ldrb r0, [r7, #MCH_VOLUME] @ load volume
3397
+
3398
+ bl mpph_VolumeSlide64
3399
+
3400
+ strb r0, [r7, #MCH_VOLUME] @ save volume
3401
+ .mppe_vs_zt:
3402
+ pop {r0}
3403
+ bx r0
3404
+ // pop {pc} @ exit
3405
+
3406
+ .align 2
3407
+ .thumb_func
3408
+ @----------------------------------------------------------------------------------
3409
+ mppe_Portamento: @ EFFECT Exy/Fxy: Portamento
3410
+ @----------------------------------------------------------------------------------
3411
+
3412
+ push {lr}
3413
+
3414
+ .mppe_pd_ot:
3415
+ mov r3, #0
3416
+ mov r0, r1
3417
+ lsr r0, #4 @ test for Ex param (Extra fine slide)
3418
+ cmp r0, #0xE @ ..
3419
+ .mppe_pd_checkE: @ ..
3420
+ bne .mppe_pd_checkF @ ..
3421
+ cmp r2, #0 @ Extra fine slide: only slide on tick0
3422
+ bne .mppe_pd_exit @ ..
3423
+ lsl r1, #32-4 @ mask out slide value
3424
+ lsr r1, #32-4 @ ..
3425
+ mov r3, #1
3426
+ b .mppe_pd_otherslide @ skip the *4 multiplication
3427
+ .mppe_pd_checkF: @ ------------------------------------
3428
+ cmp r0, #0xF @ test for Fx param (Fine slide)
3429
+ bne .mppe_pd_regslide @ ..
3430
+ cmp r2, #0 @ Fine slide: only slide on tick0
3431
+ bne .mppe_pd_exit @ ..
3432
+ lsl r1, #32-4 @ mask out slide value
3433
+ lsr r1, #32-4 @ ..
3434
+ b .mppe_pd_otherslide
3435
+ .mppe_pd_regslide:
3436
+ cmp r2, #0
3437
+ beq .mppe_pd_exit
3438
+ .mppe_pd_otherslide:
3439
+
3440
+ ldrb r0, [r7, #MCH_EFFECT] @ check slide direction
3441
+ mov r2, #MCH_PERIOD
3442
+ cmp r0, #5 @ .. (5 = portamento down)
3443
+ ldr r0, [r7, r2] @ get period
3444
+
3445
+ bne .mppe_pd_slideup @ branch to function
3446
+ .mppe_pd_slidedown: @ -------SLIDE DOWN-------
3447
+
3448
+ cmp r3, #0
3449
+ bne .mppe_pd_fineslidedown
3450
+ bl mpph_PitchSlide_Down
3451
+
3452
+ b .mppe_pd_store @ store & exit
3453
+
3454
+ .mppe_pd_fineslidedown:
3455
+ bl mpph_FinePitchSlide_Down
3456
+ b .mppe_pd_store
3457
+
3458
+ .mppe_pd_slideup: @ ---------SLIDE UP---------
3459
+
3460
+ cmp r3, #0
3461
+ bne .mppe_pd_fineslideup
3462
+ bl mpph_PitchSlide_Up
3463
+ b .mppe_pd_store
3464
+ .mppe_pd_fineslideup:
3465
+ bl mpph_FinePitchSlide_Up
3466
+
3467
+ .mppe_pd_store:
3468
+ mov r2, #MCH_PERIOD
3469
+ ldr r1, [r7, #MCH_PERIOD]
3470
+ str r0, [r7, #MCH_PERIOD]
3471
+ sub r0, r1
3472
+ add r5, r0
3473
+ .mppe_pd_exit:
3474
+ pop {r0}
3475
+ bx r0 @ exit
3476
+
3477
+ .align 2
3478
+ .thumb_func
3479
+ @---------------------------------------------------------------------------------
3480
+ mppe_Glissando: @ EFFECT Gxy: Glissando
3481
+ @---------------------------------------------------------------------------------
3482
+
3483
+ bne .mppe_glis_ot
3484
+
3485
+ mov r0, r8
3486
+ ldrb r0, [r0, #MPL_FLAGS]
3487
+ lsr r0, #C_FLAGS_GS
3488
+ bcc 2f
3489
+ @ gxx is shared, IT MODE ONLY!!
3490
+ cmp r1, #0
3491
+ bne 3f
3492
+ ldrb r1, [r7, #MCH_MEMORY+MPP_IT_PORTAMEM]
3493
+ strb r1, [r7, #MCH_PARAM]
3494
+ 3: strb r1, [r7, #MCH_MEMORY+MPP_IT_PORTAMEM]
3495
+ strb r1, [r7, #MCH_MEMORY+MPP_GLIS_MEM] @ for simplification later
3496
+ b .mppe_glis_ot
3497
+
3498
+ 2: @ gxx is separate
3499
+ cmp r1, #0
3500
+ bne 3f
3501
+
3502
+ ldrb r1, [r7, #MCH_MEMORY+MPP_GLIS_MEM]
3503
+ strb r1, [r7, #MCH_PARAM]
3504
+ 3: strb r1, [r7, #MCH_MEMORY+MPP_GLIS_MEM]
3505
+
3506
+ bx lr
3507
+ // b .mppe_glis_exit
3508
+ .mppe_glis_ot:
3509
+
3510
+ push {lr} // save return address
3511
+
3512
+ ldrb r1, [r7, #MCH_MEMORY+MPP_GLIS_MEM]
3513
+
3514
+ .mppe_glis_backdoor:
3515
+
3516
+ push {r1}
3517
+
3518
+ cmp r6, #0 // exit if no active channel
3519
+ bne 1f //
3520
+ pop {r1,r3} //
3521
+ bx r3 //
3522
+ 1: //
3523
+
3524
+ ldrb r0, [r6, #MCA_SAMPLE] // get target period
3525
+ sub r0, #1 //
3526
+ mpp_SamplePointer //
3527
+ ldrh r1, [r0, #C_MASS_FREQ] //
3528
+ LSL R1, #2 //
3529
+ ldrb r2, [r7, #MCH_NOTE] //
3530
+ ldr r3,=mmGetPeriod //
3531
+ bl mpp_call_r3 //
3532
+
3533
+ pop {r1} // r1 = parameter
3534
+ push {r0} //
3535
+
3536
+ mov r3, r0 // r3 = target period
3537
+ mov r2, #MCH_PERIOD // r0 = current period
3538
+ ldr r0, [r7, r2] //
3539
+ mov r2, r8 // test S flag
3540
+ ldrb r2, [r2, #MPL_FLAGS] //
3541
+ lsr r2, #C_FLAGS_SS //
3542
+ bCC .mppe_glis_amiga
3543
+ cmp r0, r3
3544
+ blt .mppe_glis_slideup
3545
+ bgt .mppe_glis_slidedown
3546
+ .mppe_glis_noslide:
3547
+ pop {r0}
3548
+ pop {r3}
3549
+ bx r3
3550
+
3551
+ .mppe_glis_slideup:
3552
+ bl mpph_PitchSlide_Up
3553
+ pop {r1}
3554
+
3555
+ cmp r0, r1
3556
+ blt .mppe_glis_store
3557
+ mov r0, r1
3558
+ b .mppe_glis_store
3559
+ .mppe_glis_slidedown:
3560
+ bl mpph_PitchSlide_Down
3561
+ pop {r1}
3562
+ cmp r0, r1
3563
+ bgt .mppe_glis_store
3564
+ mov r0, r1
3565
+ .mppe_glis_store:
3566
+
3567
+ mov r2, #MCH_PERIOD
3568
+ ldr r1, [r7, r2] @#MCA_PERIOD]
3569
+ str r0, [r7, r2] @#MCA_PERIOD]
3570
+ sub r0, r1
3571
+ add r5, r0
3572
+
3573
+ .mppe_glis_exit:
3574
+ pop {r3}
3575
+ bx r3
3576
+
3577
+
3578
+ //bx lr
3579
+
3580
+ .mppe_glis_amiga:
3581
+
3582
+ cmp r0, r3
3583
+ blt .mppe_glis_amiga_up
3584
+ bgt .mppe_glis_amiga_down
3585
+ pop {r0}
3586
+ pop {r3}
3587
+ bx r3
3588
+
3589
+ .mppe_glis_amiga_down:
3590
+ bl mpph_PitchSlide_Up
3591
+ pop {r1}
3592
+ cmp r0, r1
3593
+ bgt .mppe_glis_store
3594
+ mov r0, r1
3595
+ b .mppe_glis_store
3596
+ .mppe_glis_amiga_up:
3597
+ bl mpph_PitchSlide_Down
3598
+ pop {r1}
3599
+ cmp r0, r1
3600
+ blt .mppe_glis_store
3601
+ mov r0, r1
3602
+ b .mppe_glis_store
3603
+
3604
+ .align 2
3605
+ .thumb_func
3606
+ @---------------------------------------------------------------------------------
3607
+ mppe_Vibrato: @ EFFECT Hxy: Vibrato
3608
+ @---------------------------------------------------------------------------------
3609
+
3610
+ bne .mppe_v_ot
3611
+ lsr r0, r1, #4 @ if (x != 0) {
3612
+ beq .mppe_v_nospd @ speed = 4*x;
3613
+ lsl r0, #2 @ ..
3614
+ strb r0, [r7, #MCH_VIBSPD] @ ..
3615
+ .mppe_v_nospd:
3616
+
3617
+ lsl r0, r1, #32-4 @ if (y != 0) {
3618
+ beq .mppe_v_nodep @ ..
3619
+ lsr r0, #32-6 @ depth = y * 4;
3620
+ mov r1, r8
3621
+ ldrb r1, [r1, #MPL_OLDEFFECTS] @ if(OldEffects)
3622
+ lsl r0, r1 @ depth <<= 1;
3623
+ strb r0, [r7, #MCH_VIBDEP] @
3624
+ b mppe_DoVibrato
3625
+ .mppe_v_nodep:
3626
+ BX LR
3627
+
3628
+ .align 2
3629
+ .thumb_func
3630
+ @-------------------------------------------------------
3631
+ mppe_DoVibrato:
3632
+ @-------------------------------------------------------
3633
+
3634
+ .mppe_v_ot:
3635
+ mov r0, r8
3636
+ ldrb r1, [r0, #MPL_TICK]
3637
+ ldrb r0, [r0, #MPL_OLDEFFECTS]
3638
+
3639
+ cmp r0, #0
3640
+ beq .mppe_dv_update
3641
+ cmp r1, #0
3642
+ bne .mppe_dv_update
3643
+
3644
+ push {lr}
3645
+ ldrb r1, [r7, #MCH_VIBPOS]
3646
+ b .mppe_dv_notupdate
3647
+ .mppe_dv_update:
3648
+ push {lr}
3649
+ ldrb r0, [r7, #MCH_VIBSPD]
3650
+ ldrb r1, [r7, #MCH_VIBPOS]
3651
+ add r1, r0
3652
+ lsl r1, #32-8
3653
+ lsr r1, #32-8
3654
+ strb r1, [r7, #MCH_VIBPOS]
3655
+ .mppe_dv_notupdate:
3656
+ ldr r2,=mpp_TABLE_FineSineData
3657
+ ldrsb r1, [r2, r1]
3658
+ ldrb r0, [r7, #MCH_VIBDEP]
3659
+ mul r1, r0
3660
+ asr r1, #8
3661
+ mov r0, r5
3662
+ cmp r1, #0
3663
+ blt .mppe_dv_negative
3664
+ bl mpph_PitchSlide_Up
3665
+ b .mppe_dv_store
3666
+ .mppe_dv_negative:
3667
+ neg r1, r1
3668
+ bl mpph_PitchSlide_Down
3669
+ .mppe_dv_store:
3670
+ mov r5, r0
3671
+ pop {r0}
3672
+ bx r0
3673
+ // pop {pc} @ return THUMB
3674
+ .pool
3675
+
3676
+ .align 2
3677
+ .thumb_func
3678
+ @---------------------------------------------------------------------------------
3679
+ mppe_Tremor: @ EFFECT Ixy: Tremor
3680
+ @---------------------------------------------------------------------------------
3681
+ bx lr
3682
+
3683
+ .align 2
3684
+ .thumb_func
3685
+ @---------------------------------------------------------------------------------
3686
+ mppe_Arpeggio: @ EFFECT Jxy: Arpeggio
3687
+ @---------------------------------------------------------------------------------
3688
+
3689
+ bne .mppe_arp_ot
3690
+
3691
+ mov r0, #0
3692
+ strb r0, [r7, #MCH_FXMEM]
3693
+ .mppe_arp_ot:
3694
+ cmp r6, #0
3695
+ beq 1f
3696
+ ldrb r0, [r7, #MCH_FXMEM]
3697
+ // ldrb r3, [r6, #MCA_SAMPLE] ? ???
3698
+ cmp r0, #1
3699
+ bgt .mppe_arp_2
3700
+ beq .mppe_arp_1
3701
+ .mppe_arp_0:
3702
+ mov r0, #1
3703
+ strb r0, [r7, #MCH_FXMEM]
3704
+ @ do nothing! :)
3705
+ 1: bx lr
3706
+
3707
+ .mppe_arp_1:
3708
+
3709
+ mov r0, #2 @ set next tick to '2'
3710
+ strb r0, [r7, #MCH_FXMEM] @ save...
3711
+ mov r0, r5
3712
+ lsr r1, #4 @ mask out high nibble of param
3713
+ .mppe_arp_others:
3714
+ mov r2, r5
3715
+ cmp r1, #12 @ see if its >= 12
3716
+ blt .mppea1_12 @ ..
3717
+ add r2, r5 @ add period if so... (octave higher)
3718
+ .mppea1_12: @ ..
3719
+ lsl r1, #4 @ *16*hword
3720
+
3721
+ mov r0, r5
3722
+ push {lr}
3723
+ bl mpph_LinearPitchSlide_Up
3724
+
3725
+ mov r5, r0
3726
+ pop {r0}
3727
+ bx r0
3728
+ // pop {pc}
3729
+
3730
+ .mppe_arp_2:
3731
+ mov r0, #0
3732
+ strb r0, [r7, #MCH_FXMEM]
3733
+ mov r0, r5
3734
+ lsl r1, #32-4
3735
+ lsr r1, #32-4
3736
+ b .mppe_arp_others
3737
+
3738
+ .align 2
3739
+ .thumb_func
3740
+ @---------------------------------------------------------------------------------
3741
+ mppe_VibratoVolume: @ EFFECT Kxy: Vibrato+Volume Slide
3742
+ @---------------------------------------------------------------------------------
3743
+
3744
+ push {lr}
3745
+ push {r1,r2}
3746
+ bl mppe_DoVibrato
3747
+ pop {r1,r2}
3748
+ cmp r2, #0
3749
+ bl mppe_VolumeSlide
3750
+ pop {r0}
3751
+ bx r0
3752
+ // pop {pc}
3753
+
3754
+ .align 2
3755
+ .thumb_func
3756
+ @---------------------------------------------------------------------------------
3757
+ mppe_PortaVolume: @ EFFECT Lxy: Portamento+Volume Slide
3758
+ @---------------------------------------------------------------------------------
3759
+
3760
+ push {lr}
3761
+ push {r1,r2}
3762
+ ldrb r1, [r7, #MCH_MEMORY+MPP_GLIS_MEM]
3763
+ bl mppe_Glissando
3764
+ pop {r1, r2}
3765
+ cmp r2, #0
3766
+ bl mppe_VolumeSlide
3767
+ pop {r0}
3768
+ bx r0
3769
+ // pop {pc}
3770
+
3771
+ .align 2
3772
+ .thumb_func
3773
+ @---------------------------------------------------------------------------------
3774
+ mppe_ChannelVolume: @ EFFECT Mxy: Set Channel Volume
3775
+ @---------------------------------------------------------------------------------
3776
+
3777
+ bne .mppe_cv_exit @ quite simple...
3778
+ cmp r1, #0x40
3779
+ bgt .mppe_cv_exit @ ignore command if parameter is > 0x40
3780
+ strb r1, [r7, #MCH_CVOLUME]
3781
+ .mppe_cv_exit:
3782
+ bx lr
3783
+
3784
+ .align 2
3785
+ .thumb_func
3786
+ @------------------------------------------------------------------------------------
3787
+ mppe_ChannelVolumeSlide: @ EFFECT Nxy: Channel Volume Slide
3788
+ @------------------------------------------------------------------------------------
3789
+
3790
+ push {lr}
3791
+
3792
+ ldrb r0, [r7, #MCH_CVOLUME] @ load volume
3793
+ bl mpph_VolumeSlide64
3794
+
3795
+ strb r0, [r7, #MCH_CVOLUME] @ save volume
3796
+ pop {r0}
3797
+ bx r0
3798
+ // pop {pc} @ exit
3799
+
3800
+ .align 2
3801
+ .thumb_func
3802
+ @----------------------------------------------------------------------------------
3803
+ mppe_SampleOffset: @ EFFECT Oxy Sample Offset
3804
+ @----------------------------------------------------------------------------------
3805
+
3806
+ bne .mppe_so_exit @ skip on other ticks
3807
+
3808
+ ldr r0,=mpp_vars
3809
+ strb r1, [r0, #MPV_SAMPOFF] @ set offset
3810
+ .mppe_so_exit:
3811
+ bx lr
3812
+ .pool
3813
+
3814
+ .align 2
3815
+ .thumb_func
3816
+ @---------------------------------------------------------------------------------
3817
+ mppe_PanningSlide: @ EFFECT Pxy Panning Slide
3818
+ @---------------------------------------------------------------------------------
3819
+
3820
+ push {lr}
3821
+
3822
+ mov r0, #255
3823
+ push {r0}
3824
+ ldrb r0, [r7, #MCH_PANNING] @ load panning
3825
+
3826
+ bl mpph_VolumeSlide
3827
+
3828
+ strb r0, [r7, #MCH_PANNING] @ save panning
3829
+ pop {r0}
3830
+ bx r0
3831
+ // pop {pc} @ exit
3832
+
3833
+ .align 2
3834
+ .thumb_func
3835
+ @---------------------------------------------------------------------------------
3836
+ mppe_Retrigger: @ EFFECT Qxy Retrigger Note
3837
+ @---------------------------------------------------------------------------------
3838
+
3839
+ ldrb r0, [r7, #MCH_FXMEM]
3840
+ cmp r0, #0
3841
+ bne .mppe_retrig_refillN
3842
+ .mppe_retrig_refill:
3843
+ lsl r0, r1, #32-4
3844
+ lsr r0, #32-4
3845
+ add r0, #1
3846
+ .mppe_retrig_exitcount:
3847
+ strb r0, [r7, #MCH_FXMEM]
3848
+ bx lr
3849
+ .mppe_retrig_refillN:
3850
+ sub r0, #1
3851
+ cmp r0, #1
3852
+ bne .mppe_retrig_exitcount
3853
+ .mppe_retrig_fire:
3854
+
3855
+ ldrb r2, [r7, #MCH_VOLUME]
3856
+ lsr r0, r1, #4
3857
+ beq .mppe_retrig_v_change0
3858
+ cmp r0, #5
3859
+ ble .mppe_retrig_v_change_sub
3860
+ cmp r0, #6
3861
+ beq .mppe_retrig_v_change_23
3862
+ cmp r0, #7
3863
+ beq .mppe_retrig_v_change_12
3864
+ cmp r0, #8
3865
+ beq .mppe_retrig_v_change0
3866
+ cmp r0, #0xD
3867
+ ble .mppe_retrig_v_change_add
3868
+ cmp r0, #0xE
3869
+ beq .mppe_retrig_v_change_32
3870
+ cmp r0, #0xF
3871
+ beq .mppe_retrig_v_change_21
3872
+ .mppe_retrig_v_change_21:
3873
+ lsl r2, #1
3874
+ cmp r2, #64
3875
+ blt .mppe_retrig_finish
3876
+ mov r2, #64
3877
+ .mppe_retrig_v_change0:
3878
+ b .mppe_retrig_finish
3879
+ .mppe_retrig_v_change_sub:
3880
+ sub r0, #1
3881
+ mov r3, #1
3882
+ lsl r3, r0
3883
+ sub r2, r3
3884
+ bcs .mppe_retrig_finish
3885
+ mov r2, #0
3886
+ b .mppe_retrig_finish
3887
+ .mppe_retrig_v_change_23:
3888
+ mov r0, #171
3889
+ mul r2, r0
3890
+ lsr r2, #8
3891
+ b .mppe_retrig_finish
3892
+ .mppe_retrig_v_change_12:
3893
+ lsr r2, #1
3894
+ b .mppe_retrig_finish
3895
+ .mppe_retrig_v_change_add:
3896
+ sub r0, #9
3897
+ mov r3, #1
3898
+ lsl r3, r0
3899
+ add r2, r3
3900
+ cmp r2, #64
3901
+ blt .mppe_retrig_finish
3902
+ mov r2, #64
3903
+ b .mppe_retrig_finish
3904
+ .mppe_retrig_v_change_32:
3905
+ mov r0, #192
3906
+ mul r2, r0
3907
+ lsr r2, #7
3908
+ .mppe_retrig_finish:
3909
+ strb r2, [r7, #MCH_VOLUME]
3910
+ cmp r6, #0
3911
+ beq .mppe_retrig_refill
3912
+ ldrb r0, [r6, #MCA_FLAGS]
3913
+ mov r2, #MCAF_START
3914
+ orr r0, r2
3915
+ strb r0, [r6, #MCA_FLAGS]
3916
+ b .mppe_retrig_refill
3917
+
3918
+ .align 2
3919
+ .thumb_func
3920
+ @---------------------------------------------------------------------------------
3921
+ mppe_Tremolo: @ EFFECT Rxy: Tremolo
3922
+ @---------------------------------------------------------------------------------
3923
+
3924
+ @ r1 = param
3925
+ @ Z = tick0
3926
+
3927
+ beq .mppe_trem_zt @ skip this part on tick0
3928
+ .mppe_trem_ot:
3929
+ @ X = speed, Y = depth
3930
+ ldrb r0, [r7, #MCH_FXMEM] @ get sine position
3931
+ lsr r3, r1, #4 @ mask out SPEED
3932
+ lsl r3, #2 @ speed*4 to compensate for larger sine table
3933
+ add r0, r3 @ add to position
3934
+ strb r0, [r7, #MCH_FXMEM] @ save (value & 255)
3935
+ .mppe_trem_zt:
3936
+ ldrb r0, [r7, #MCH_FXMEM] @ get sine position
3937
+ ldr r3,=mpp_TABLE_FineSineData @ load sine table value
3938
+ ldrsb r0, [r3, r0]
3939
+ lsl r1, #32-4 @ mask out DEPTH
3940
+ lsr r1, #32-4
3941
+ mul r0, r1 @ SINE*DEPTH / 64
3942
+ asr r0, #6
3943
+ mov r1, r8
3944
+ ldrb r1, [r1, #MPL_FLAGS]
3945
+ lsr r1, #C_FLAGS_XS
3946
+ bcs 1f
3947
+ asr r0, #1
3948
+ 1: ldr r1,=mpp_vars @ set volume addition variable
3949
+ strb r0, [r1, #MPV_VOLPLUS]
3950
+ bx lr
3951
+ .pool
3952
+
3953
+ .align 2
3954
+ .thumb_func
3955
+ @---------------------------------------------------------------------------------
3956
+ mppe_Extended: @ EFFECT Sxy: Extended Effects
3957
+ @---------------------------------------------------------------------------------
3958
+
3959
+ lsr r0, r1, #4
3960
+ lsl r0, #1
3961
+ cmp r2, #0
3962
+ add r0, pc
3963
+ mov pc, r0
3964
+
3965
+ @ branch table...
3966
+ b mppex_XM_FVolSlideUp @ S0x
3967
+ b mppex_XM_FVolSlideDown @ S1x
3968
+ b mppex_OldRetrig @ S2x
3969
+ b mppex_VibForm @ S3x
3970
+ b mppex_TremForm @ S4x
3971
+ b mppex_PanbForm @ S5x
3972
+ b mppex_FPattDelay @ S6x
3973
+ b mppex_InstControl @ S7x
3974
+ b mppex_SetPanning @ S8x
3975
+ b mppex_SoundControl @ S9x
3976
+ b mppex_HighOffset @ SAx
3977
+ b mppex_PatternLoop @ SBx
3978
+ b mppex_NoteCut @ SCx
3979
+ b mppex_NoteDelay @ SDx
3980
+ b mppex_PatternDelay @ SEy
3981
+ b mppex_SongMessage @ SFx
3982
+
3983
+ .mppe_ex_quit:
3984
+
3985
+ @-------------------------------------------
3986
+ .thumb_func
3987
+ mppex_Unused:
3988
+ bx lr
3989
+
3990
+ @-------------------------------------------
3991
+
3992
+ .thumb_func
3993
+ mppex_XM_FVolSlideUp:
3994
+ bne 2f
3995
+ ldrb r0, [r7, #MCH_VOLUME]
3996
+ lsl r1, #32-4
3997
+ lsr r1, #32-4
3998
+ add r0, r1
3999
+ cmp r0, #64
4000
+ blt 1f
4001
+ mov r0, #64
4002
+ 1: strb r0, [r7, #MCH_VOLUME]
4003
+ 2: bx lr
4004
+
4005
+ .thumb_func
4006
+ mppex_XM_FVolSlideDown:
4007
+ bne 2f
4008
+ ldrb r0, [r7, #MCH_VOLUME]
4009
+ lsl r1, #32-4
4010
+ lsr r1, #32-4
4011
+ sub r0, r1
4012
+ bcs 1f
4013
+ mov r0, #0
4014
+ 1: strb r0, [r7, #MCH_VOLUME]
4015
+ 2: bx lr
4016
+
4017
+ @-------------------------------------------
4018
+ .thumb_func
4019
+ mppex_OldRetrig:
4020
+ bne 1f
4021
+ lsl r1, #32-4
4022
+ lsr r1, #32-4
4023
+ strb r1, [r7, #MCH_FXMEM]
4024
+ bx lr
4025
+
4026
+ 1: ldrb r0, [r7, #MCH_FXMEM]
4027
+ sub r0, #1
4028
+
4029
+ bne 1f
4030
+
4031
+ lsl r0, r1, #32-4
4032
+ lsr r0, #32-4
4033
+ strb r0, [r7, #MCH_FXMEM]
4034
+
4035
+ cmp r6, #0
4036
+ beq 1f
4037
+ ldrb r1, [r6, #MCA_FLAGS]
4038
+ mov r2, #MCAF_START
4039
+
4040
+ orr r1, r2
4041
+ strb r1, [r6, #MCA_FLAGS]
4042
+
4043
+ 1: strb r0, [r7, #MCH_FXMEM]
4044
+ bx lr
4045
+
4046
+ @-------------------------------------------
4047
+ .thumb_func
4048
+ mppex_VibForm:
4049
+ bx lr
4050
+
4051
+ @-------------------------------------------
4052
+ .thumb_func
4053
+ mppex_TremForm:
4054
+ bx lr
4055
+
4056
+ @-------------------------------------------
4057
+ .thumb_func
4058
+ mppex_PanbForm:
4059
+ bx lr
4060
+
4061
+ @-------------------------------------------
4062
+ .thumb_func
4063
+ mppex_FPattDelay:
4064
+ bne .mppex_fpd_exit
4065
+ lsl r1, #32-4
4066
+ lsr r1, #32-4
4067
+ mov r0, r8
4068
+ strb r1, [r0, #MPL_FPATTDELAY]
4069
+ .mppex_fpd_exit:
4070
+ bx lr
4071
+
4072
+ @-------------------------------------------
4073
+ .thumb_func
4074
+ mppex_InstControl:
4075
+ bne .mppex_ic_exit
4076
+ lsl r1, #32-4
4077
+ lsr r1, #32-4
4078
+ cmp r1, #2
4079
+ ble .mppex_ic_pastnotes
4080
+ cmp r1, #6
4081
+ ble .mppex_ic_nna
4082
+ cmp r1, #8
4083
+ ble .mppex_ic_envelope
4084
+ bx lr
4085
+ .mppex_ic_pastnotes:
4086
+ @ todo...
4087
+ bx lr
4088
+ .mppex_ic_nna:
4089
+ @ overwrite NNA
4090
+ sub r1, #3
4091
+ ldrb r2, [r7, #MCH_BFLAGS]
4092
+ lsl r2, #32-6
4093
+ lsr r2, #32-6
4094
+ lsl r1, #6
4095
+ orr r2, r1
4096
+ strb r2, [r7, #MCH_BFLAGS]
4097
+ bx lr
4098
+ .mppex_ic_envelope:
4099
+ cmp r6, #0
4100
+ beq .mppex_ic_exit
4101
+ ldrb r2, [r6, #MCA_FLAGS]
4102
+ mov r0, #32
4103
+ bic r2, r0
4104
+ sub r1, #7
4105
+ lsl r1, #5
4106
+ orr r2, r1
4107
+ strb r2, [r6, #MCA_FLAGS]
4108
+
4109
+ .mppex_ic_exit:
4110
+ bx lr
4111
+
4112
+ @-------------------------------------------
4113
+ .thumb_func
4114
+ mppex_SetPanning:
4115
+ lsl r1, #4
4116
+ strb r1, [r7, #MCH_PANNING]
4117
+ bx lr
4118
+
4119
+ @-------------------------------------------
4120
+ .thumb_func
4121
+ mppex_SoundControl:
4122
+ cmp r1, #0x91
4123
+ beq .mppex_sc_surround
4124
+ bx lr
4125
+ .mppex_sc_surround:
4126
+ @ set surround
4127
+ bx lr
4128
+
4129
+ @-------------------------------------------
4130
+ .thumb_func
4131
+ mppex_HighOffset:
4132
+ @ todo...
4133
+ bx lr
4134
+
4135
+ @-------------------------------------------
4136
+ .thumb_func
4137
+ mppex_PatternLoop:
4138
+ bne .mppex_pl_exit @ dont update on nonzero ticks
4139
+ mov r2, r8
4140
+
4141
+ lsl r1, #32-4 @ mask low nibble of parameter
4142
+ lsr r1, #32-4 @ ...
4143
+ bne .mppex_pl_not0 @ is zero?
4144
+
4145
+ ldrb r1, [r2, #MPL_ROW] @ ...
4146
+ strb r1, [r2, #MPL_PLOOP_ROW] @ ...
4147
+ ldr r1,=mpp_vars @ ....
4148
+ ldr r1, [r1, #MPV_PATTREAD_P] @ .. ...
4149
+ mov r3, #MPL_PLOOP_ADR
4150
+ str r1, [r2, r3] @ ... ...
4151
+ bx lr @ ... ...
4152
+ .mppex_pl_not0: @ otherwise...
4153
+ ldrb r0, [r2, #MPL_PLOOP_TIMES] @ get pattern loop counter
4154
+ cmp r0, #0 @ zero?
4155
+ bne .mppex_pl_active @ if not then its already active
4156
+ strb r1, [r2, #MPL_PLOOP_TIMES] @ zero: save parameter to counter
4157
+ b .mppex_pl_exit_enable @ exit & enable jump
4158
+ .mppex_pl_active: @ nonzero:
4159
+ sub r0, #1 @ decrement counter
4160
+ strb r0, [r2, #MPL_PLOOP_TIMES] @ save
4161
+ beq .mppex_pl_exit @ enable jump if not 0
4162
+ .mppex_pl_exit_enable:
4163
+ mov r0, #1 @ enable jump
4164
+ mov r3, #MPL_PLOOP_JUMP
4165
+ strb r0, [r2, r3] @ ..
4166
+ .mppex_pl_exit: @ exit
4167
+ bx lr @ ....
4168
+ .pool
4169
+
4170
+ @-------------------------------------------
4171
+ .thumb_func
4172
+ mppex_NoteCut:
4173
+ lsl r1, #32-4 @ mask parameter
4174
+ lsr r1, #32-4 @ ..
4175
+ cmp r1, r2 @ compare with tick#
4176
+ bne .mppex_nc_exit @ if equal:
4177
+ mov r0, #0 @ cut volume
4178
+ strb r0, [r7, #MCH_VOLUME] @ ..
4179
+ .mppex_nc_exit: @ exit
4180
+ bx lr @ ..
4181
+
4182
+ @-------------------------------------------
4183
+ .thumb_func
4184
+ mppex_NoteDelay:
4185
+
4186
+ mov r0, r8
4187
+ ldrb r2, [r0, #MPL_TICK]
4188
+ lsl r1, #32-4
4189
+ lsr r1, #32-4
4190
+ cmp r2, r1
4191
+ bge 1f
4192
+ ldr r0,=mpp_vars
4193
+ strb r1, [r0, #MPV_NOTEDELAY]
4194
+ 1: bx lr
4195
+
4196
+ @-------------------------------------------
4197
+ .thumb_func
4198
+ mppex_PatternDelay:
4199
+ bne .mppex_pd_quit @ update on tick0
4200
+ lsl r1, #32-4 @ mask parameter
4201
+ lsr r1, #32-4 @ ..
4202
+ mov r0, r8
4203
+ ldrb r2, [r0, #MPL_PATTDELAY] @ get patterndelay
4204
+ cmp r2, #0 @ only update if it's 0
4205
+ bne .mppex_pd_quit @ ..
4206
+ add r1, #1 @ set to param+1
4207
+ strb r1, [r0, #MPL_PATTDELAY] @ ..
4208
+ .mppex_pd_quit: @ exit
4209
+ bx lr @ ..
4210
+
4211
+ @-------------------------------------------
4212
+ .thumb_func
4213
+ mppex_SongMessage:
4214
+
4215
+ bne .mppex_pd_quit @ update on tick0
4216
+ push {lr} @ save return address
4217
+ lsl r1, #32-4 @ mask parameter
4218
+ lsr r1, #32-4 @ ..
4219
+ ldr r2,=mmCallback
4220
+ ldr r2, [r2]
4221
+ cmp r2, #0
4222
+ beq 1f
4223
+ mov r0, #MPCB_SONGMESSAGE
4224
+
4225
+ bl mpp_call_r2
4226
+ @jump2
4227
+ 1: //pop {pc}
4228
+ pop {r0}
4229
+ bx r0
4230
+ .pool
4231
+
4232
+ .align 2
4233
+ .thumb_func
4234
+ @----------------------------------------------------------------------------------------
4235
+ mppe_SetTempo: @ EFFECT Txy: Set Tempo / Tempo Slide
4236
+ @----------------------------------------------------------------------------------------
4237
+
4238
+ @ 0x = slide down
4239
+ @ 1x = slide up
4240
+ @ 2x+ = set
4241
+
4242
+ // BUGGED???
4243
+ // not using setbpm for slides???
4244
+
4245
+ cmp r1, #0x20
4246
+ bge .mppe_st_set
4247
+ cmp r2, #0
4248
+ beq .mppe_st_exit
4249
+
4250
+ mov r0, r8
4251
+ ldrb r2, [r0, #MPL_BPM]
4252
+
4253
+ cmp r1, #0x10
4254
+ bge .mppe_st_slideup
4255
+ .mppe_st_slidedown:
4256
+ sub r2, r1
4257
+ cmp r2, #32
4258
+ bge .mppe_st_save
4259
+ mov r2, #32
4260
+ .mppe_st_save:
4261
+ mov r0, r2
4262
+ b .mppe_st_set2
4263
+ .mppe_st_slideup:
4264
+
4265
+ lsl r1, #32-4
4266
+ lsr r1, #32-4
4267
+
4268
+ add r2, r1
4269
+ cmp r2, #255
4270
+ blt .mppe_st_save
4271
+ mov r2, #255
4272
+ b .mppe_st_save
4273
+ .mppe_st_set:
4274
+ cmp r2, #0
4275
+ bne .mppe_st_exit
4276
+ mov r0, r1
4277
+ .mppe_st_set2:
4278
+ push {r5,lr}
4279
+ mov r5, r8
4280
+ ldr r1,=mpp_setbpm
4281
+ bl mpp_call_r1
4282
+ @jump1
4283
+ pop {r5}
4284
+ pop {r3}
4285
+ bx r3
4286
+ .mppe_st_exit:
4287
+ bx lr
4288
+ .pool
4289
+
4290
+ .align 2
4291
+ .thumb_func
4292
+ @----------------------------------------------------------------------------------------
4293
+ mppe_FineVibrato: @ EFFECT Uxy: Fine Vibrato
4294
+ @----------------------------------------------------------------------------------------
4295
+
4296
+ bne .mppe_fv_ot
4297
+ lsr r0, r1, #4
4298
+ beq .mppe_fv_nospd
4299
+ lsl r0, #2
4300
+ strb r0, [r7, #MCH_VIBSPD]
4301
+ .mppe_fv_nospd:
4302
+
4303
+ lsl r0, r1, #32-4
4304
+ beq .mppe_fv_nodep
4305
+ // lsr r0, #32 heh...
4306
+ lsr r0, #32-4
4307
+ mov r1, r8
4308
+ ldrb r1, [r1, #MPL_OLDEFFECTS]
4309
+ lsl r0, r1
4310
+ strb r0, [r7, #MCH_VIBDEP]
4311
+ .mppe_fv_nodep:
4312
+
4313
+ .mppe_fv_ot:
4314
+ b mppe_DoVibrato
4315
+ .pool
4316
+
4317
+ .align 2
4318
+ .thumb_func
4319
+ @------------------------------------------------------------------------------------
4320
+ mppe_SetGlobalVolume: @ EFFECT Vxy: Set Global Volume
4321
+ @------------------------------------------------------------------------------------
4322
+
4323
+ bne .mppe_sgv_exit @ on tick0:
4324
+ mov r0, r8
4325
+ ldrb r2, [r0, #MPL_FLAGS]
4326
+ mov r3, #(1<<(C_FLAGS_XS-1))+(1<<(C_FLAGS_LS-1))
4327
+ tst r2, r3
4328
+ beq 1f
4329
+ mov r2, #0x40
4330
+ b 2f
4331
+ 1: mov r2, #0x80
4332
+ 2:
4333
+ cmp r1, r2
4334
+ blt 1f
4335
+ mov r1, r2
4336
+ 1: strb r1, [r0, #MPL_GV] @ save param to global volume
4337
+ .mppe_sgv_exit:
4338
+ bx lr
4339
+ .pool
4340
+
4341
+
4342
+ .align 2
4343
+ .thumb_func
4344
+ @----------------------------------------------------------------------------------
4345
+ mppe_GlobalVolumeSlide: @ EFFECT Wxy: Global Volume Slide
4346
+ @----------------------------------------------------------------------------------
4347
+
4348
+ push {lr}
4349
+
4350
+ .mppe_gvs_ot:
4351
+ mov r0, r8
4352
+ ldrb r0, [r0, #MPL_FLAGS]
4353
+ lsr r0, #C_FLAGS_XS
4354
+ bcs 1f
4355
+
4356
+ mov r0, #128
4357
+ b 2f
4358
+
4359
+ 1: mov r0, #64
4360
+
4361
+ 2: push {r0}
4362
+ mov r0, r8
4363
+ ldrb r0, [r0, #MPL_GV] @ load global volume
4364
+
4365
+ bl mpph_VolumeSlide @ slide..
4366
+
4367
+ mov r1, r8
4368
+ strb r0, [r1, #MPL_GV] @ save global volume
4369
+ pop {r0}
4370
+ bx r0
4371
+ // pop {pc} @ exit
4372
+ .pool
4373
+
4374
+
4375
+ .align 2
4376
+ .thumb_func
4377
+ @---------------------------------------------------------------------------------------
4378
+ mppe_SetPanning: @ EFFECT Xxy: Set Panning
4379
+ @---------------------------------------------------------------------------------------
4380
+
4381
+ bne .mppe_sp_exit @ on tick0:
4382
+ strb r1, [r7, #MCH_PANNING] @ set panning=param
4383
+ .mppe_sp_exit:
4384
+ bx lr
4385
+ .pool
4386
+
4387
+ .align 2
4388
+ .thumb_func
4389
+ @---------------------------------------------------------------------------------------
4390
+ mppe_Panbrello: @ EFFECT Yxy: Panbrello
4391
+ @---------------------------------------------------------------------------------------
4392
+
4393
+ @ todo
4394
+ bx lr
4395
+
4396
+ .align 2
4397
+ .thumb_func
4398
+ @---------------------------------------------------------------------------------
4399
+ mppe_ZXX: @ EFFECT Zxy: Set Filter
4400
+ @---------------------------------------------------------------------------------
4401
+
4402
+ @ ZXX IS NOT SUPPORTED
4403
+ bx lr @ exit
4404
+ .pool
4405
+
4406
+ @=======================================================================================
4407
+ @ OLD EFFECTS
4408
+ @=======================================================================================
4409
+
4410
+ .align 2
4411
+ .thumb_func
4412
+ @-----------------------------------------------------------------------------------
4413
+ mppe_SetVolume: @ EFFECT 0xx: Set Volume
4414
+ @-----------------------------------------------------------------------------------
4415
+
4416
+ bne .mppe_sv_exit @ on tick0:
4417
+ strb r1, [r7, #MCH_VOLUME] @ set volume=param
4418
+ .mppe_sv_exit:
4419
+ bx lr
4420
+
4421
+ .align 2
4422
+ .thumb_func
4423
+ @-----------------------------------------------------------------------------------
4424
+ mppe_KeyOff: @ EFFECT 1xx: Key Off
4425
+ @-----------------------------------------------------------------------------------
4426
+ cmp r1, r2 @ if tick=param:
4427
+ bne .mppe_ko_exit @
4428
+ cmp r6, #0
4429
+ beq .mppe_ko_exit
4430
+ ldrb r0, [r6, #MCA_FLAGS] @ clear keyon from flags
4431
+ mov r1, #MCAF_KEYON @
4432
+ bic r0, r1 @
4433
+ strb r0, [r6, #MCA_FLAGS] @
4434
+ .mppe_ko_exit:
4435
+ bx lr @ finished
4436
+ .pool
4437
+
4438
+ .align 2
4439
+ .thumb_func
4440
+ @-----------------------------------------------------------------------------------
4441
+ mppe_EnvelopePos: @ EFFECT 1xx: Envelope Position
4442
+ @-----------------------------------------------------------------------------------
4443
+ bne .mppe_ep_ot @ on tick0:
4444
+ cmp r6, #0
4445
+ beq .mppe_ep_ot
4446
+
4447
+ @ - NOT SUPPORTED ANYMORE -
4448
+
4449
+ @ strh r1, [r6, #MCA_ENVP_VOL] @ set volume envelope position
4450
+ @ strh r1, [r6, #MCA_ENVP_PAN] @ set panning envelope positin
4451
+ @ pitch envelope wasn't invented yet
4452
+ .mppe_ep_ot:
4453
+ bx lr @ finished
4454
+
4455
+ .align 2
4456
+ .thumb_func
4457
+ @-----------------------------------------------------------------------------------
4458
+ mppe_OldTremor: @ EFFECT 3xy: Old Tremor
4459
+ @-----------------------------------------------------------------------------------
4460
+
4461
+ bne .mppe_ot_ot
4462
+ bx lr
4463
+ .mppe_ot_ot:
4464
+ ldrb r0, [r7, #MCH_FXMEM]
4465
+ cmp r0, #0
4466
+ bne .mppe_ot_old
4467
+ .mppe_ot_new:
4468
+ ldrb r0, [r7, #MCH_BFLAGS+1]
4469
+ mov r3, #0b110
4470
+ eor r0, r3
4471
+ strb r0, [r7, #MCH_BFLAGS+1]
4472
+ lsr r0, #3
4473
+ bcc .mppe_ot_low
4474
+ lsr r1, #4
4475
+ add r1, #1
4476
+ strb r1, [r7, #MCH_FXMEM]
4477
+ b .mppe_ot_apply
4478
+ .mppe_ot_low:
4479
+ lsl r1, #32-4
4480
+ lsr r1, #32-4
4481
+ add r1, #1
4482
+ strb r1, [r7, #MCH_FXMEM]
4483
+ b .mppe_ot_apply
4484
+
4485
+ .mppe_ot_old:
4486
+ sub r0, #1
4487
+ strb r0, [r7, #MCH_FXMEM]
4488
+
4489
+ .mppe_ot_apply:
4490
+ ldrb r2, [r7, #MCH_BFLAGS+1]
4491
+
4492
+ lsr r2, #3
4493
+ bcs .mppe_ot_cut
4494
+ mov r1, #-64&255
4495
+ ldr r2,=mpp_vars
4496
+ strb r1, [r2, #MPV_VOLPLUS]
4497
+ .mppe_ot_cut:
4498
+ bx lr
4499
+
4500
+ @===============================================================================
4501
+ @ FUNCTIONS!!
4502
+ @===============================================================================
4503
+
4504
+ .align 2
4505
+ .thumb_func
4506
+ @--------------------------------------------------------------------------
4507
+ mpph_PitchSlide_Down: @ Linear/Amiga slide down
4508
+ @--------------------------------------------------------------------------
4509
+
4510
+ @ r0 = period
4511
+ @ r1 = slide value (/4)
4512
+ mov r2, r8
4513
+ ldrb r2, [r2, #MPL_FLAGS]
4514
+ lsr r2, #C_FLAGS_SS
4515
+ bcc .mpph_psd_amiga
4516
+ b .mpph_psd
4517
+
4518
+ .thumb_func
4519
+ @--------------------------------------------------------------------------
4520
+ mpph_LinearPitchSlide_Down: @ Linear slide down
4521
+ @--------------------------------------------------------------------------
4522
+
4523
+ mov r2, r8
4524
+ ldrb r2, [r2, #MPL_FLAGS]
4525
+ lsr r2, #C_FLAGS_SS
4526
+ bcc .mpph_psu
4527
+ .mpph_psd:
4528
+ ldr r2,=mpp_TABLE_LinearSlideDownTable
4529
+ .mpph_psd_fine:
4530
+ lsl r1, #1
4531
+ ldrh r1, [r2, r1]
4532
+ lsr r0, #5
4533
+ mul r0, r1
4534
+ lsr r0, #16 -5
4535
+ .mpph_psd_clip:
4536
+ cmp r0, #0
4537
+ bge .mpph_psd_clipdone
4538
+ mov r0, #0
4539
+ .mpph_psd_clipdone:
4540
+ bx lr
4541
+ .mpph_psd_amiga:
4542
+ lsl r1, #4
4543
+ .mpph_psd_amiga_fine:
4544
+ add r0, r1
4545
+ lsr r1, r0, #16+5
4546
+ beq .mpph_psd_clipdone
4547
+ mov r0, #1
4548
+ lsl r0, #16+5
4549
+ b .mpph_psd_clip
4550
+
4551
+ .align 2
4552
+ .thumb_func
4553
+ @--------------------------------------------------------------------------
4554
+ mpph_PitchSlide_Up: @ Linear/Amiga slide up
4555
+ @--------------------------------------------------------------------------
4556
+
4557
+ @ r0 = period
4558
+ @ r1 = slide value (/4)
4559
+
4560
+ mov r2, r8
4561
+ ldrb r2, [r2, #MPL_FLAGS]
4562
+ lsr r2, #C_FLAGS_SS
4563
+ bcc .mpph_psu_amiga
4564
+ b .mpph_psu
4565
+ .thumb_func
4566
+ mpph_LinearPitchSlide_Up: @ Linear slide up
4567
+ mov r2, r8
4568
+ ldrb r2, [r2, #MPL_FLAGS]
4569
+ lsr r2, #C_FLAGS_SS
4570
+ bcc .mpph_psd
4571
+ .mpph_psu:
4572
+ ldr r2,=mpp_TABLE_LinearSlideUpTable
4573
+ mov r3, r0
4574
+ cmp r1, #192
4575
+ blt .mpph_psu_notdouble
4576
+ add r3, r3
4577
+ .mpph_psu_notdouble:
4578
+ .mpph_psu_fine:
4579
+ lsl r1, #1
4580
+ ldrh r1, [r2, r1]
4581
+ lsr r0, #5
4582
+ mul r0, r1
4583
+ lsr r0, #16-5
4584
+ add r0, r3
4585
+ .mpph_psu_clip:
4586
+ mov r1, r0
4587
+ lsr r1, #16+5
4588
+ beq .mpph_psu_clipped
4589
+ mov r0, #1
4590
+ lsl r0, #16+5
4591
+ .mpph_psu_clipped:
4592
+ bx lr
4593
+ .mpph_psu_amiga:
4594
+ lsl r1, #4
4595
+ .mpph_psu_amiga_fine:
4596
+ sub r0, r1
4597
+ bcs .mpph_psu_clipped
4598
+ mov r0, #0
4599
+ bx lr
4600
+
4601
+ .align 2
4602
+ .thumb_func
4603
+ @---------------------------------------------------------------------------
4604
+ mpph_FinePitchSlide_Up:
4605
+ @---------------------------------------------------------------------------
4606
+
4607
+ @ r0 = period
4608
+ @ r1 = slide value (0-15)
4609
+ mov r2, r8
4610
+ ldrb r2, [r2, #MPL_FLAGS]
4611
+ lsr r2, #C_FLAGS_SS
4612
+ bcc .mpph_fpsu_amiga
4613
+ ldr r2,=mpp_TABLE_FineLinearSlideUpTable
4614
+ mov r3, r0
4615
+ b .mpph_psu_fine
4616
+ .mpph_fpsu_amiga:
4617
+ lsl r1, #2
4618
+ b .mpph_psu_amiga_fine
4619
+
4620
+ .align 2
4621
+ .thumb_func
4622
+ @-----------------------------------------------------------------------------------
4623
+ mpph_FinePitchSlide_Down:
4624
+ @-----------------------------------------------------------------------------------
4625
+
4626
+ @ r0 = period
4627
+ @ r1 = slide value (0-15)
4628
+
4629
+ mov r2, r8
4630
+ ldrb r2, [r2, #MPL_FLAGS]
4631
+ lsr r2, #C_FLAGS_SS
4632
+ bcc .mpph_fpsd_amiga
4633
+ ldr r2,=mpp_TABLE_FineLinearSlideDownTable
4634
+ b .mpph_psd_fine
4635
+ .mpph_fpsd_amiga:
4636
+ lsl r1, #2
4637
+ b .mpph_psd_amiga_fine
4638
+ .pool
4639
+
4640
+ @-----------------------------------------------------------------------------------
4641
+
4642
+ .text
4643
+ .align 2
4644
+ .thumb_func
4645
+ @-----------------------------------------------------------------------------------
4646
+ mpph_FastForward:
4647
+ @-----------------------------------------------------------------------------------
4648
+
4649
+ @ r1 = #rows to skip
4650
+ cmp r1, #0
4651
+ bne .mpph_ff
4652
+ .mpph_ff_exitf:
4653
+ bx lr
4654
+ .mpph_ff:
4655
+
4656
+ mov r0, r8
4657
+ ldrb r2, [r0, #MPL_NROWS]
4658
+ add r2, #1
4659
+ cmp r1, r2
4660
+ bge .mpph_ff_exitf
4661
+ strb r1, [r0, #MPL_ROW]
4662
+ push {r7,lr}
4663
+ ldr r7,=mmReadPattern //mpp_ReadPattern
4664
+ .mpph_ff_loop:
4665
+ push {r1,r7}
4666
+ bl mpp_call_r7
4667
+ pop {r1,r7}
4668
+ sub r1, #1
4669
+ bne .mpph_ff_loop
4670
+
4671
+ pop {r7}
4672
+ pop {r0}
4673
+ bx r0
4674
+ // pop {pc}
4675
+ .pool
4676
+
4677
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
4678
+ @ IWRAM CODE @
4679
+ @ @
4680
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
4681
+
4682
+ .align 2
4683
+ .thumb_func
4684
+ @-----------------------------------------------------------------------------
4685
+ mpph_VolumeSlide64:
4686
+ @-----------------------------------------------------------------------------
4687
+
4688
+ mov r3, #64
4689
+ push {r3}
4690
+
4691
+ .thumb_func
4692
+ @-----------------------------------------------------------------------------
4693
+ mpph_VolumeSlide:
4694
+ @-----------------------------------------------------------------------------
4695
+
4696
+ @ r0 = volume
4697
+ @ r1 = paramter
4698
+ @ r2 = tick#
4699
+ @ stack:1 = max volume
4700
+
4701
+ mov r3, r8
4702
+ ldrb r3, [r3, #MPL_FLAGS]
4703
+ lsr r3, #C_FLAGS_XS
4704
+ bcs .mpph_vs_XM
4705
+
4706
+ cmp r1, #0x0F @ is value 15?
4707
+ bne .mpph_vs_hack1 @ then only slide on tick0
4708
+ b .mpph_vs_fsub
4709
+ .mpph_vs_hack1:
4710
+ cmp r1, #0xF0 @ is value 15?
4711
+ bne .mpph_vs_hack2 @ then only slide on tick0
4712
+ cmp r2, #0 @ ..
4713
+ bne .mpph_vs_exit @ ..
4714
+ b .mpph_vs_fadd
4715
+ .mpph_vs_hack2:
4716
+
4717
+ mov r3, r1 @ test for Dx0
4718
+ lsl r3, #32-4 @ ..
4719
+ bne .mpph_vs_next1 @ ..
4720
+ .mpph_vs_add: @ Dx0: (used for DxF too)
4721
+ cmp r2, #0
4722
+ beq .mpph_vs_exit
4723
+ .mpph_vs_fadd:
4724
+ lsr r1, #4 @ fix value
4725
+ add r0, r1 @ add to volume
4726
+ pop {r1}
4727
+ cmp r0, r1 @ clip values past 64
4728
+ blt .mpph_vs_exit2 @ ..
4729
+ mov r0, r1 @ ..
4730
+ b .mpph_vs_exit2 @ ..
4731
+ .mpph_vs_next1: @---------------------
4732
+ mov r3, r1 @ test for D0x
4733
+ lsr r3, #4 @ ..
4734
+ bne .mpph_vs_next2 @ ..
4735
+ .mpph_vs_sub: @ D0x:
4736
+ cmp r2, #0
4737
+ beq .mpph_vs_exit
4738
+ .mpph_vs_fsub:
4739
+ lsl r1, #32-4 @ mask value
4740
+ lsr r1, #32-4 @ ..
4741
+
4742
+ sub r0, r1 @ subtract from volume
4743
+ bcs .mpph_vs_exit @ clip values under 0
4744
+ mov r0, #0 @ ..
4745
+ b .mpph_vs_exit @ ..
4746
+ .mpph_vs_next2: @---------------------
4747
+ cmp r2, #0 @ fine slides now... only slide on tick0
4748
+ bne .mpph_vs_exit @ ..
4749
+
4750
+ mov r3, r1 @ test for DxF
4751
+ lsl r3, #32-4 @ ..
4752
+ lsr r3, #32-4
4753
+ cmp r3, #0x0F @ ..
4754
+ beq .mpph_vs_fadd @ branch
4755
+
4756
+ mov r3, r1 @ test for DFx
4757
+ lsr r3, #4 @ ..
4758
+ cmp r3, #0x0F @ ..
4759
+ beq .mpph_vs_fsub @ branch
4760
+ .mpph_vs_exit:
4761
+
4762
+ pop {r1}
4763
+
4764
+ .mpph_vs_exit2:
4765
+ bx lr @ exit if all fail
4766
+
4767
+ .mpph_vs_XM:
4768
+ cmp r2, #0
4769
+ beq .mpph_vs_exit
4770
+
4771
+ lsr r3, r1, #4
4772
+ lsl r1, #32-4
4773
+ lsr r1, #32-4
4774
+ sub r3, r1
4775
+ add r0, r3
4776
+ pop {r1}
4777
+ cmp r0, r1
4778
+ blt .mpph_vsxm_testlow
4779
+ mov r0, r1
4780
+ .mpph_vsxm_testlow:
4781
+ cmp r0, #0
4782
+ bgt .mpph_vs_exit2
4783
+ mov r0, #0
4784
+ bx lr
4785
+ .pool
4786
+
4787
+ @==========================================================================================
4788
+ @ TABLES
4789
+ @==========================================================================================
4790
+
4791
+ #ifndef SYS_NDS
4792
+ .TEXT
4793
+ #else
4794
+ .section ".main.mmtables", "a"
4795
+ #endif
4796
+
4797
+ .align 2
4798
+ /******************************************************************************
4799
+ * ST3_FREQTABLE
4800
+ *
4801
+ * LUT for amiga periods.
4802
+ ******************************************************************************/
4803
+ .global ST3_FREQTABLE
4804
+ ST3_FREQTABLE:
4805
+
4806
+ .hword 1712*8, 1616*8, 1524*8, 1440*8, 1356*8, 1280*8, 1208*8, 1140*8, 1076*8, 1016*8, 960*8, 907*8 @ MORE ACCURACY SCALARS
4807
+
4808
+ @middle octave is 4.
4809
+ @
4810
+ @ 133808 * ( period(NOTE) >> octave )
4811
+ @ note_st3period = --------------------------------------------
4812
+ @ middle_c_finetunevalue(INSTRUMENT)
4813
+ @
4814
+
4815
+ .align 2
4816
+ @-------------------------------------------------------------------------------------------
4817
+ mpp_TABLE_LinearSlideUpTable: @ value = 2^(val/192), 16.16 fixed
4818
+ @-------------------------------------------------------------------------------------------
4819
+
4820
+ .hword 0, 237, 475, 714, 953 @ 0->4 @ ADD 1.0
4821
+ .hword 1194, 1435, 1677, 1920, 2164 @ 5->9
4822
+ .hword 2409, 2655, 2902, 3149, 3397 @ 10->14
4823
+ .hword 3647, 3897, 4148, 4400, 4653 @ 15->19
4824
+ .hword 4907, 5157, 5417, 5674, 5932 @ 20->24
4825
+ .hword 6190, 6449, 6710, 6971, 7233 @ 25->29
4826
+ .hword 7496, 7761, 8026, 8292, 8559 @ 30->34
4827
+ .hword 8027, 9096, 9366, 9636, 9908 @ 35->39
4828
+ .hword 10181, 10455, 10730, 11006, 11283 @ 40->44
4829
+ .hword 11560, 11839, 12119, 12400, 12682 @ 45->49
4830
+ .hword 12965, 13249, 13533, 13819, 14106 @ 50->54
4831
+ .hword 14394, 14684, 14974, 15265, 15557 @ 55->59
4832
+ .hword 15850, 16145, 16440, 16737, 17034 @ 60->64
4833
+ .hword 17333, 17633, 17933, 18235, 18538 @ 65->69
4834
+ .hword 18842, 19147, 19454, 19761, 20070 @ 70->74
4835
+ .hword 20379, 20690, 21002, 21315, 21629 @ 75->79
4836
+ .hword 21944, 22260, 22578, 22897, 23216 @ 80->84
4837
+ .hword 23537, 23860, 24183, 24507, 24833 @ 85->89
4838
+ .hword 25160, 25488, 25817, 26148, 26479 @ 90->94
4839
+ .hword 26812, 27146, 27481, 27818, 28155 @ 95->99
4840
+ .hword 28494, 28834, 29175, 29518, 29862 @ 100->104
4841
+ .hword 30207, 30553, 30900, 31248, 31599 @ 105->109
4842
+ .hword 31951, 32303, 32657, 33012, 33369 @ 110->114
4843
+ .hword 33726, 34085, 34446, 34807, 35170 @ 115->119
4844
+ .hword 35534, 35900, 36267, 36635, 37004 @ 120->124
4845
+ .hword 37375, 37747, 38121, 38496, 38872 @ 125->129
4846
+ .hword 39250, 39629, 40009, 40391, 40774 @ 130->134
4847
+ .hword 41158, 41544, 41932, 42320, 42710 @ 135->139
4848
+ .hword 43102, 43495, 43889, 44285, 44682 @ 140->144
4849
+ .hword 45081, 45481, 45882, 46285, 46690 @ 145->149
4850
+ .hword 47095, 47503, 47917, 48322, 48734 @ 150->154
4851
+ .hword 49147, 49562, 49978, 50396, 50815 @ 155->159
4852
+ .hword 51236, 51658, 52082, 52507, 52934 @ 160->164
4853
+ .hword 53363, 53793, 54224, 54658, 55092 @ 165->169
4854
+ .hword 55529, 55966, 56406, 56847, 57289 @ 170->174
4855
+ .hword 57734, 58179, 58627, 59076, 59527 @ 175->179
4856
+ .hword 59979, 60433, 60889, 61346, 61805 @ 180->184
4857
+ .hword 62265, 62727, 63191, 63657, 64124 @ 185->189
4858
+ .hword 64593, 65064, 0, 474, 950 @ 190->194 @ ADD 2.0 w/ 192+
4859
+ .hword 1427, 1906, 2387, 2870, 3355 @ 195->199
4860
+ .hword 3841, 4327, 4818, 5310, 5803 @ 200->204
4861
+ .hword 6298, 6795, 7294, 7794, 8296 @ 205->209
4862
+ .hword 8800, 9306, 9814, 10323, 10835 @ 210->214
4863
+ .hword 11348, 11863, 12380, 12899, 13419 @ 215->219
4864
+ .hword 13942, 14467, 14993, 15521, 16051 @ 220->224
4865
+ .hword 16583, 17117, 17653, 18191, 18731 @ 225->229
4866
+ .hword 19273, 19817, 20362, 20910, 21460 @ 230->234
4867
+ .hword 22011, 22565, 23121, 23678, 24238 @ 235->239
4868
+ .hword 24800, 25363, 25929, 25497, 27067 @ 240->244
4869
+ .hword 27639, 28213, 28789, 29367, 29947 @ 245->249
4870
+ .hword 30530, 31114, 31701, 32289, 32880 @ 250->254
4871
+ .hword 33473, 34068 @ 255->256
4872
+
4873
+ .align 2
4874
+ @-------------------------------------------------------------------------------------
4875
+ mpp_TABLE_LinearSlideDownTable: @ value = 2^(-val/192), 16.16 fixed
4876
+ @-------------------------------------------------------------------------------------
4877
+
4878
+ .hword 65535, 65300, 65065, 64830, 64596, 64364, 64132, 63901 @ 0->7
4879
+ .hword 63670, 63441, 63212, 62984, 62757, 62531, 62306, 62081 @ 8->15
4880
+ .hword 61858, 61635, 61413, 61191, 60971, 60751, 60532, 60314 @ 16->23
4881
+ .hword 60097, 59880, 59664, 59449, 59235, 59022, 58809, 58597 @ 24->31
4882
+ .hword 58386, 58176, 57966, 57757, 57549, 57341, 57135, 56929 @ 32->39
4883
+ .hword 56724, 56519, 56316, 56113, 55911, 55709, 55508, 55308 @ 40->47
4884
+ .hword 55109, 54910, 54713, 54515, 54319, 54123, 53928, 53734 @ 48->55
4885
+ .hword 53540, 53347, 53155, 52963, 52773, 52582, 52393, 52204 @ 56->63
4886
+ .hword 52016, 51829, 51642, 51456, 51270, 51085, 50901, 50718 @ 64->71
4887
+ .hword 50535, 50353, 50172, 49991, 49811, 49631, 49452, 49274 @ 72->79
4888
+ .hword 49097, 48920, 48743, 48568, 48393, 48128, 48044, 47871 @ 80->87
4889
+ .hword 47699, 47527, 47356, 47185, 47015, 46846, 46677, 46509 @ 88->95
4890
+ .hword 46341, 46174, 46008, 45842, 45677, 45512, 45348, 45185 @ 96->103
4891
+ .hword 45022, 44859, 44698, 44537, 44376, 44216, 44057, 43898 @104->111
4892
+ .hword 43740, 43582, 43425, 43269, 43113, 42958, 42803, 42649 @112->119
4893
+ .hword 42495, 42342, 42189, 42037, 41886, 41735, 41584, 41434 @120->127
4894
+ .hword 41285, 41136, 40988, 40840, 40639, 40566, 40400, 40253 @128->135
4895
+ .hword 40110, 39965, 39821, 39678, 39535, 39392, 39250, 39109 @136->143
4896
+ .hword 38968, 38828, 38688, 38548, 38409, 38271, 38133, 37996 @144->151
4897
+ .hword 37859, 37722, 37586, 37451, 37316, 37181, 37047, 36914 @152->159
4898
+ .hword 36781, 36648, 36516, 36385, 36254, 36123, 35993, 35863 @160->167
4899
+ .hword 35734, 35605, 35477, 35349, 35221, 35095, 34968, 34842 @168->175
4900
+ .hword 34716, 34591, 34467, 34343, 34219, 34095, 33973, 33850 @176->183
4901
+ .hword 33728, 33607, 33486, 33365, 33245, 33125, 33005, 32887 @184->191
4902
+ .hword 32768, 32650, 32532, 32415, 32298, 32182, 32066, 31950 @192->199
4903
+ .hword 31835, 31720, 31606, 31492, 31379, 31266, 31153, 31041 @200->207
4904
+ .hword 30929, 30817, 30706, 30596, 30485, 30376, 30226, 30157 @208->215
4905
+ .hword 30048, 29940, 29832, 29725, 29618, 29511, 29405, 29299 @216->223
4906
+ .hword 29193, 29088, 28983, 28879, 28774, 28671, 28567, 28464 @224->231
4907
+ .hword 28362, 28260, 28158, 28056, 27955, 27855, 27754, 27654 @232->239
4908
+ .hword 27554, 27455, 27356, 27258, 27159, 27062, 26964, 26867 @240->247
4909
+ .hword 26770, 26674, 26577, 26482, 26386, 26291, 26196, 26102 @248->255
4910
+ .hword 26008 @ 256
4911
+
4912
+ /******************************************************************************
4913
+ * IT_PitchTable
4914
+ *
4915
+ * LUT for linear periods.
4916
+ ******************************************************************************/
4917
+ .global IT_PitchTable
4918
+ .align 2
4919
+ IT_PitchTable:
4920
+
4921
+ .hword 2048, 0, 2170, 0, 2299, 0, 2435, 0, 2580, 0, 2734, 0 @ C-0
4922
+ .hword 2896, 0, 3069, 0, 3251, 0, 3444, 0, 3649, 0, 3866, 0 @>B-0
4923
+
4924
+ .hword 4096, 0, 4340, 0, 4598, 0, 4871, 0, 5161, 0, 5468, 0 @ C-1
4925
+ .hword 5793, 0, 6137, 0, 6502, 0, 6889, 0, 7298, 0, 7732, 0 @>B-1
4926
+
4927
+ .hword 8192, 0, 8679, 0, 9195, 0, 9742, 0, 10321, 0, 10935, 0 @ octave 2
4928
+ .hword 11585, 0, 12274, 0, 13004, 0, 13777, 0, 14596, 0, 15464, 0
4929
+
4930
+ .hword 16384, 0, 17358, 0, 18390, 0, 19484, 0, 20643, 0, 21870, 0 @ octave 3
4931
+ .hword 23170, 0, 24548, 0, 26008, 0, 27554, 0, 29193, 0, 30929, 0
4932
+
4933
+ .hword 32768, 0, 34716, 0, 36781, 0, 38968, 0, 41285, 0, 43740, 0 @ octave 4
4934
+ .hword 46341, 0, 49097, 0, 52016, 0, 55109, 0, 58386, 0, 61858, 0
4935
+
4936
+ .hword 0, 1, 3897, 1, 8026, 1, 12400, 1, 17034, 1, 21944, 1 @ octave 5
4937
+ .hword 27146, 1, 32657, 1, 38496, 1, 44682, 1, 51236, 1, 58179, 1
4938
+
4939
+ .hword 0, 2, 7794, 2, 16051, 2, 24800, 2, 34068, 2, 43888, 2 @ octave 6
4940
+ .hword 54292, 2, 65314, 2, 11456, 3, 23828, 3, 36936, 3, 50823, 3
4941
+
4942
+ .hword 0, 4, 15588, 4, 32103, 4, 49600, 4, 2601, 5, 22240, 5 @ octave 7
4943
+ .hword 43048, 5, 65092, 5, 22912, 6, 47656, 6, 8336, 7, 36110, 7
4944
+
4945
+ .hword 0, 8, 31176, 8, 64205, 8, 33663, 9, 5201, 10, 44481, 10 @ octave 8
4946
+ .hword 20559, 11, 64648, 11, 45823, 12, 29776, 13, 16671, 14, 6684, 15
4947
+
4948
+ .hword 0, 16, 62352, 16, 62875, 17, 1790, 19, 10403, 20, 23425, 21 @ octave 9
4949
+ .hword 41118, 22, 63761, 23, 26111, 25, 59552, 26, 33342, 28, 13368, 30
4950
+
4951
+ .align 2
4952
+ @-------------------------------------------------------------------------------------
4953
+ mpp_TABLE_FineLinearSlideUpTable:
4954
+ @-------------------------------------------------------------------------------------
4955
+
4956
+ .hword 0, 59, 118, 178, 237 @ 0->4 ADD 1x
4957
+ .hword 296, 356, 415, 475, 535 @ 5->9
4958
+ .hword 594, 654, 714, 773, 833 @ 10->14
4959
+ .hword 893 @ 15
4960
+
4961
+ .align 2
4962
+ @-------------------------------------------------------------------------------------
4963
+ mpp_TABLE_FineLinearSlideDownTable:
4964
+ @-------------------------------------------------------------------------------------
4965
+
4966
+ .hword 65535, 65477, 65418, 65359, 65300, 65241, 65182, 65359 @ 0->7
4967
+ .hword 65065, 65006, 64947, 64888, 64830, 64772, 64713, 64645 @ 8->15
4968
+
4969
+ @-------------------------------------------------------------------------------------
4970
+ mpp_TABLE_FineSineData:
4971
+ @-------------------------------------------------------------------------------------
4972
+
4973
+ .byte 0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 16, 17, 19, 20, 22, 23
4974
+ .byte 24, 26, 27, 29, 30, 32, 33, 34, 36, 37, 38, 39, 41, 42, 43, 44
4975
+ .byte 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59
4976
+ .byte 59, 60, 60, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64
4977
+ .byte 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 60, 60
4978
+ .byte 59, 59, 58, 57, 56, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46
4979
+ .byte 45, 44, 43, 42, 41, 39, 38, 37, 36, 34, 33, 32, 30, 29, 27, 26
4980
+ .byte 24, 23, 22, 20, 19, 17, 16, 14, 12, 11, 9, 8, 6, 5, 3, 2
4981
+ .byte 0, -2, -3, -5, -6, -8, -9,-11,-12,-14,-16,-17,-19,-20,-22,-23
4982
+ .byte -24,-26,-27,-29,-30,-32,-33,-34,-36,-37,-38,-39,-41,-42,-43,-44
4983
+ .byte -45,-46,-47,-48,-49,-50,-51,-52,-53,-54,-55,-56,-56,-57,-58,-59
4984
+ .byte -59,-60,-60,-61,-61,-62,-62,-62,-63,-63,-63,-64,-64,-64,-64,-64
4985
+ .byte -64,-64,-64,-64,-64,-64,-63,-63,-63,-62,-62,-62,-61,-61,-60,-60
4986
+ .byte -59,-59,-58,-57,-56,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46
4987
+ .byte -45,-44,-43,-42,-41,-39,-38,-37,-36,-34,-33,-32,-30,-29,-27,-26
4988
+ .byte -24,-23,-22,-20,-19,-17,-16,-14,-12,-11, -9, -8, -6, -5, -3, -2
4989
+
4990
+ .end