burn 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. data/LICENSE +621 -0
  2. data/README.md +467 -0
  3. data/Rakefile +1 -0
  4. data/bin/burn +14 -0
  5. data/lib/burn/builder.rb +65 -0
  6. data/lib/burn/cli.rb +187 -0
  7. data/lib/burn/debug.rb +25 -0
  8. data/lib/burn/dsl/channel_stream.rb +105 -0
  9. data/lib/burn/dsl/declare.rb +42 -0
  10. data/lib/burn/dsl/dsl_base.rb +31 -0
  11. data/lib/burn/dsl/music.rb +36 -0
  12. data/lib/burn/dsl/note.rb +125 -0
  13. data/lib/burn/dsl/scene.rb +278 -0
  14. data/lib/burn/dsl/sound.rb +30 -0
  15. data/lib/burn/dsl/sound_effect.rb +91 -0
  16. data/lib/burn/dsl.rb +8 -0
  17. data/lib/burn/generator/assembly_music.rb +47 -0
  18. data/lib/burn/generator/assembly_sound_effect.rb +33 -0
  19. data/lib/burn/generator/c_source.rb +54 -0
  20. data/lib/burn/generator/template/mus_template.s +49 -0
  21. data/lib/burn/generator/template/template.c +88 -0
  22. data/lib/burn/generator.rb +3 -0
  23. data/lib/burn/tools/mac/cc65/asminc/_file.inc +27 -0
  24. data/lib/burn/tools/mac/cc65/asminc/_heap.inc +35 -0
  25. data/lib/burn/tools/mac/cc65/asminc/apple2.inc +64 -0
  26. data/lib/burn/tools/mac/cc65/asminc/atari.inc +1175 -0
  27. data/lib/burn/tools/mac/cc65/asminc/atari.mac +59 -0
  28. data/lib/burn/tools/mac/cc65/asminc/atmos.inc +110 -0
  29. data/lib/burn/tools/mac/cc65/asminc/c128.inc +214 -0
  30. data/lib/burn/tools/mac/cc65/asminc/c16.inc +9 -0
  31. data/lib/burn/tools/mac/cc65/asminc/c64.inc +212 -0
  32. data/lib/burn/tools/mac/cc65/asminc/cbm.mac +50 -0
  33. data/lib/burn/tools/mac/cc65/asminc/cbm510.inc +182 -0
  34. data/lib/burn/tools/mac/cc65/asminc/cbm610.inc +110 -0
  35. data/lib/burn/tools/mac/cc65/asminc/cbm_filetype.inc +34 -0
  36. data/lib/burn/tools/mac/cc65/asminc/cpu.mac +24 -0
  37. data/lib/burn/tools/mac/cc65/asminc/ctype.inc +29 -0
  38. data/lib/burn/tools/mac/cc65/asminc/em-error.inc +49 -0
  39. data/lib/burn/tools/mac/cc65/asminc/em-kernel.inc +106 -0
  40. data/lib/burn/tools/mac/cc65/asminc/errno.inc +36 -0
  41. data/lib/burn/tools/mac/cc65/asminc/fcntl.inc +21 -0
  42. data/lib/burn/tools/mac/cc65/asminc/generic.mac +55 -0
  43. data/lib/burn/tools/mac/cc65/asminc/get_tv.inc +22 -0
  44. data/lib/burn/tools/mac/cc65/asminc/joy-error.inc +44 -0
  45. data/lib/burn/tools/mac/cc65/asminc/joy-kernel.inc +85 -0
  46. data/lib/burn/tools/mac/cc65/asminc/longbranch.mac +88 -0
  47. data/lib/burn/tools/mac/cc65/asminc/lynx.inc +279 -0
  48. data/lib/burn/tools/mac/cc65/asminc/modload.inc +78 -0
  49. data/lib/burn/tools/mac/cc65/asminc/mouse-kernel.inc +180 -0
  50. data/lib/burn/tools/mac/cc65/asminc/nes.inc +93 -0
  51. data/lib/burn/tools/mac/cc65/asminc/o65.inc +150 -0
  52. data/lib/burn/tools/mac/cc65/asminc/opcodes.inc +509 -0
  53. data/lib/burn/tools/mac/cc65/asminc/pet.inc +54 -0
  54. data/lib/burn/tools/mac/cc65/asminc/plus4.inc +86 -0
  55. data/lib/burn/tools/mac/cc65/asminc/ser-error.inc +54 -0
  56. data/lib/burn/tools/mac/cc65/asminc/ser-kernel.inc +162 -0
  57. data/lib/burn/tools/mac/cc65/asminc/signal.inc +57 -0
  58. data/lib/burn/tools/mac/cc65/asminc/smc.inc +245 -0
  59. data/lib/burn/tools/mac/cc65/asminc/stdio.inc +70 -0
  60. data/lib/burn/tools/mac/cc65/asminc/supervision.inc +76 -0
  61. data/lib/burn/tools/mac/cc65/asminc/tgi-error.inc +52 -0
  62. data/lib/burn/tools/mac/cc65/asminc/tgi-kernel.inc +234 -0
  63. data/lib/burn/tools/mac/cc65/asminc/tgi-vectorfont.inc +70 -0
  64. data/lib/burn/tools/mac/cc65/asminc/time.inc +59 -0
  65. data/lib/burn/tools/mac/cc65/asminc/utsname.inc +46 -0
  66. data/lib/burn/tools/mac/cc65/asminc/vic20.inc +75 -0
  67. data/lib/burn/tools/mac/cc65/asminc/zeropage.inc +26 -0
  68. data/lib/burn/tools/mac/cc65/bin/ca65 +0 -0
  69. data/lib/burn/tools/mac/cc65/bin/cc65 +0 -0
  70. data/lib/burn/tools/mac/cc65/bin/ld65 +0 -0
  71. data/lib/burn/tools/other/cc65/asminc/_file.inc +27 -0
  72. data/lib/burn/tools/other/cc65/asminc/_heap.inc +35 -0
  73. data/lib/burn/tools/other/cc65/asminc/apple2.inc +64 -0
  74. data/lib/burn/tools/other/cc65/asminc/atari.inc +1175 -0
  75. data/lib/burn/tools/other/cc65/asminc/atari.mac +59 -0
  76. data/lib/burn/tools/other/cc65/asminc/atmos.inc +110 -0
  77. data/lib/burn/tools/other/cc65/asminc/c128.inc +214 -0
  78. data/lib/burn/tools/other/cc65/asminc/c16.inc +9 -0
  79. data/lib/burn/tools/other/cc65/asminc/c64.inc +212 -0
  80. data/lib/burn/tools/other/cc65/asminc/cbm.mac +50 -0
  81. data/lib/burn/tools/other/cc65/asminc/cbm510.inc +182 -0
  82. data/lib/burn/tools/other/cc65/asminc/cbm610.inc +110 -0
  83. data/lib/burn/tools/other/cc65/asminc/cbm_filetype.inc +34 -0
  84. data/lib/burn/tools/other/cc65/asminc/cpu.mac +24 -0
  85. data/lib/burn/tools/other/cc65/asminc/ctype.inc +29 -0
  86. data/lib/burn/tools/other/cc65/asminc/em-error.inc +49 -0
  87. data/lib/burn/tools/other/cc65/asminc/em-kernel.inc +106 -0
  88. data/lib/burn/tools/other/cc65/asminc/errno.inc +36 -0
  89. data/lib/burn/tools/other/cc65/asminc/fcntl.inc +21 -0
  90. data/lib/burn/tools/other/cc65/asminc/generic.mac +55 -0
  91. data/lib/burn/tools/other/cc65/asminc/get_tv.inc +22 -0
  92. data/lib/burn/tools/other/cc65/asminc/joy-error.inc +44 -0
  93. data/lib/burn/tools/other/cc65/asminc/joy-kernel.inc +85 -0
  94. data/lib/burn/tools/other/cc65/asminc/longbranch.mac +88 -0
  95. data/lib/burn/tools/other/cc65/asminc/lynx.inc +279 -0
  96. data/lib/burn/tools/other/cc65/asminc/modload.inc +78 -0
  97. data/lib/burn/tools/other/cc65/asminc/mouse-kernel.inc +180 -0
  98. data/lib/burn/tools/other/cc65/asminc/nes.inc +93 -0
  99. data/lib/burn/tools/other/cc65/asminc/o65.inc +150 -0
  100. data/lib/burn/tools/other/cc65/asminc/opcodes.inc +509 -0
  101. data/lib/burn/tools/other/cc65/asminc/pet.inc +54 -0
  102. data/lib/burn/tools/other/cc65/asminc/plus4.inc +86 -0
  103. data/lib/burn/tools/other/cc65/asminc/ser-error.inc +54 -0
  104. data/lib/burn/tools/other/cc65/asminc/ser-kernel.inc +162 -0
  105. data/lib/burn/tools/other/cc65/asminc/signal.inc +57 -0
  106. data/lib/burn/tools/other/cc65/asminc/smc.inc +245 -0
  107. data/lib/burn/tools/other/cc65/asminc/stdio.inc +70 -0
  108. data/lib/burn/tools/other/cc65/asminc/supervision.inc +76 -0
  109. data/lib/burn/tools/other/cc65/asminc/tgi-error.inc +52 -0
  110. data/lib/burn/tools/other/cc65/asminc/tgi-kernel.inc +234 -0
  111. data/lib/burn/tools/other/cc65/asminc/tgi-vectorfont.inc +70 -0
  112. data/lib/burn/tools/other/cc65/asminc/time.inc +59 -0
  113. data/lib/burn/tools/other/cc65/asminc/utsname.inc +46 -0
  114. data/lib/burn/tools/other/cc65/asminc/vic20.inc +75 -0
  115. data/lib/burn/tools/other/cc65/asminc/zeropage.inc +26 -0
  116. data/lib/burn/tools/other/cc65/bin/ca65 +0 -0
  117. data/lib/burn/tools/other/cc65/bin/cc65 +0 -0
  118. data/lib/burn/tools/other/cc65/bin/ld65 +0 -0
  119. data/lib/burn/tools/win/cc65/asminc/_file.inc +27 -0
  120. data/lib/burn/tools/win/cc65/asminc/_heap.inc +35 -0
  121. data/lib/burn/tools/win/cc65/asminc/apple2.inc +64 -0
  122. data/lib/burn/tools/win/cc65/asminc/atari.inc +1101 -0
  123. data/lib/burn/tools/win/cc65/asminc/atmos.inc +31 -0
  124. data/lib/burn/tools/win/cc65/asminc/c128.inc +213 -0
  125. data/lib/burn/tools/win/cc65/asminc/c16.inc +9 -0
  126. data/lib/burn/tools/win/cc65/asminc/c64.inc +212 -0
  127. data/lib/burn/tools/win/cc65/asminc/cbm510.inc +182 -0
  128. data/lib/burn/tools/win/cc65/asminc/cbm610.inc +110 -0
  129. data/lib/burn/tools/win/cc65/asminc/ctype.inc +29 -0
  130. data/lib/burn/tools/win/cc65/asminc/em-error.inc +44 -0
  131. data/lib/burn/tools/win/cc65/asminc/em-kernel.inc +100 -0
  132. data/lib/burn/tools/win/cc65/asminc/errno.inc +36 -0
  133. data/lib/burn/tools/win/cc65/asminc/fcntl.inc +21 -0
  134. data/lib/burn/tools/win/cc65/asminc/get_tv.inc +22 -0
  135. data/lib/burn/tools/win/cc65/asminc/joy-error.inc +44 -0
  136. data/lib/burn/tools/win/cc65/asminc/joy-kernel.inc +85 -0
  137. data/lib/burn/tools/win/cc65/asminc/lynx.inc +273 -0
  138. data/lib/burn/tools/win/cc65/asminc/modload.inc +78 -0
  139. data/lib/burn/tools/win/cc65/asminc/mouse-kernel.inc +179 -0
  140. data/lib/burn/tools/win/cc65/asminc/nes.inc +93 -0
  141. data/lib/burn/tools/win/cc65/asminc/o65.inc +135 -0
  142. data/lib/burn/tools/win/cc65/asminc/pet.inc +45 -0
  143. data/lib/burn/tools/win/cc65/asminc/plus4.inc +87 -0
  144. data/lib/burn/tools/win/cc65/asminc/rs232.inc +19 -0
  145. data/lib/burn/tools/win/cc65/asminc/ser-error.inc +50 -0
  146. data/lib/burn/tools/win/cc65/asminc/ser-kernel.inc +161 -0
  147. data/lib/burn/tools/win/cc65/asminc/signal.inc +57 -0
  148. data/lib/burn/tools/win/cc65/asminc/stdio.inc +70 -0
  149. data/lib/burn/tools/win/cc65/asminc/supervision.inc +76 -0
  150. data/lib/burn/tools/win/cc65/asminc/tgi-error.inc +48 -0
  151. data/lib/burn/tools/win/cc65/asminc/tgi-kernel.inc +183 -0
  152. data/lib/burn/tools/win/cc65/asminc/tgi-mode.inc +48 -0
  153. data/lib/burn/tools/win/cc65/asminc/time.inc +59 -0
  154. data/lib/burn/tools/win/cc65/asminc/utsname.inc +46 -0
  155. data/lib/burn/tools/win/cc65/asminc/vic20.inc +77 -0
  156. data/lib/burn/tools/win/cc65/asminc/zeropage.inc +22 -0
  157. data/lib/burn/tools/win/cc65/bin/ca65.exe +0 -0
  158. data/lib/burn/tools/win/cc65/bin/cc65.exe +0 -0
  159. data/lib/burn/tools/win/cc65/bin/ld65.exe +0 -0
  160. data/lib/burn/util/os.rb +38 -0
  161. data/lib/burn/util/patternizer.rb +62 -0
  162. data/lib/burn/util/pxes.rb +180 -0
  163. data/lib/burn/util/server.rb +21 -0
  164. data/lib/burn/util.rb +4 -0
  165. data/lib/burn/version.rb +3 -0
  166. data/lib/burn/workspace_default/asset/crt0.s +260 -0
  167. data/lib/burn/workspace_default/asset/famitone.s +1031 -0
  168. data/lib/burn/workspace_default/asset/mus_instruments.s +50 -0
  169. data/lib/burn/workspace_default/asset/music.s +3 -0
  170. data/lib/burn/workspace_default/asset/nes.cfg +83 -0
  171. data/lib/burn/workspace_default/asset/neslib.h +213 -0
  172. data/lib/burn/workspace_default/asset/neslib.s +923 -0
  173. data/lib/burn/workspace_default/asset/runtime.lib +0 -0
  174. data/lib/burn/workspace_default/asset/sounds.s +143 -0
  175. data/lib/burn/workspace_default/asset/test.h +22 -0
  176. data/lib/burn/workspace_default/asset/tileset.chr +0 -0
  177. data/lib/burn/workspace_default/release/js/emulator.html +42 -0
  178. data/lib/burn/workspace_default/release/js/js/dynamicaudio-89ba58da476270a9b630.min.js +1 -0
  179. data/lib/burn/workspace_default/release/js/js/jquery-1.4.2.min.js +154 -0
  180. data/lib/burn/workspace_default/release/js/js/jsnes-4e7a7260aa.js +7149 -0
  181. data/lib/burn/workspace_default/release/js/swf/dynamicaudio.swf +0 -0
  182. data/lib/burn/workspace_default/scripts/compile.bat +30 -0
  183. data/lib/burn/workspace_default/scripts/compile.sh +30 -0
  184. data/lib/burn.rb +11 -0
  185. data/test/helper.rb +8 -0
  186. data/test/runner.rb +2 -0
  187. data/test/test_burn.rb +14 -0
  188. data/test/test_dsl.rb +22 -0
  189. data/test/test_pxes.rb +48 -0
  190. metadata +270 -0
@@ -0,0 +1,923 @@
1
+ ;NES hardware-dependent functions by Shiru (shiru@mail.ru)
2
+ ;Feel free to do anything you want with this code, consider it Public Domain
3
+
4
+
5
+ .export _pal_all,_pal_bg,_pal_spr,_pal_col,_pal_clear,_pal_bright
6
+ .export _ppu_off,_ppu_on_all,_ppu_on_bg,_ppu_on_spr,_ppu_mask
7
+ .export _oam_clear,_oam_spr,_oam_meta_spr,_oam_hide_rest
8
+ .export _ppu_waitnmi
9
+ .export _unrle_vram
10
+ .export _scroll
11
+ .export _bank_spr,_bank_bg
12
+ .export _vram_read,_vram_write
13
+ .export _music_play,_music_stop,_music_pause
14
+ .export _sfx_play
15
+ .export _pad_poll,_pad_trigger,_pad_state
16
+ .export _rand8,_rand16,_set_rand
17
+ .export _set_vram_update,_vram_adr,_vram_put,_vram_fill,_vram_inc
18
+ .export _memcpy,_memfill,_delay
19
+
20
+
21
+
22
+ ;NMI handler
23
+
24
+ nmi:
25
+ pha
26
+ txa
27
+ pha
28
+ tya
29
+ pha
30
+
31
+ lda <VRAMUPDATE
32
+ bne @upd
33
+ jmp @skipUpd
34
+
35
+ @upd:
36
+ ldx #$00
37
+ stx PPU_OAM_ADDR
38
+ lda #>OAM_BUF
39
+ sta PPU_OAM_DMA
40
+
41
+ lda #$3f
42
+ sta PPU_ADDR
43
+ stx PPU_ADDR
44
+
45
+ .repeat 4,I
46
+ ldy PAL_BUF+I
47
+ lda (PAL_PTR),y
48
+ sta PPU_DATA
49
+ .endrepeat
50
+
51
+ .repeat 7,J
52
+ lda PPU_DATA ;skip background color
53
+ .repeat 3,I
54
+ ldy PAL_BUF+5+(J*4)+I
55
+ lda (PAL_PTR),y
56
+ sta PPU_DATA
57
+ .endrepeat
58
+ .endrepeat
59
+
60
+ ldx <NAME_UPD_LEN
61
+ beq @skipUpd
62
+ ldy #0
63
+ @updName:
64
+ lda (NAME_UPD_ADR),y
65
+ iny
66
+ sta PPU_ADDR
67
+ lda (NAME_UPD_ADR),y
68
+ iny
69
+ sta PPU_ADDR
70
+ lda (NAME_UPD_ADR),y
71
+ iny
72
+ sta PPU_DATA
73
+ dex
74
+ bne @updName
75
+
76
+ @skipUpd:
77
+ lda #0
78
+ sta PPU_ADDR
79
+ sta PPU_ADDR
80
+
81
+ lda <SCROLL_X
82
+ sta PPU_SCROLL
83
+ lda <SCROLL_Y
84
+ sta PPU_SCROLL
85
+ lda <PPU_CTRL_VAR
86
+ sta PPU_CTRL
87
+
88
+ inc <FRAMECNT1
89
+ inc <FRAMECNT2
90
+ lda <FRAMECNT2
91
+ cmp #6
92
+ bne @skipNtsc
93
+ lda #0
94
+ sta <FRAMECNT2
95
+ @skipNtsc:
96
+
97
+ jsr FamiToneUpdate
98
+
99
+ pla
100
+ tay
101
+ pla
102
+ tax
103
+ pla
104
+
105
+ irq:
106
+ rti
107
+
108
+
109
+
110
+ ;void __fastcall__ pal_all(const char *data);
111
+
112
+ _pal_all:
113
+ sta <PTR
114
+ stx <PTR+1
115
+ ldx #$00
116
+ lda #$20
117
+
118
+ pal_copy:
119
+ sta <LEN
120
+
121
+ ldy #$00
122
+ @0:
123
+ lda (PTR),y
124
+ sta PAL_BUF,x
125
+ inx
126
+ iny
127
+ dec <LEN
128
+ bne @0
129
+ rts
130
+
131
+
132
+
133
+ ;void __fastcall__ pal_bg(const char *data);
134
+
135
+ _pal_bg:
136
+ sta <PTR
137
+ stx <PTR+1
138
+ ldx #$00
139
+ lda #$10
140
+ bne pal_copy ;bra
141
+
142
+
143
+
144
+ ;void __fastcall__ pal_spr(const char *data);
145
+
146
+ _pal_spr:
147
+ sta <PTR
148
+ stx <PTR+1
149
+ ldx #$10
150
+ txa
151
+ bne pal_copy ;bra
152
+
153
+
154
+
155
+ ;void __fastcall__ pal_col(unsigned char index,unsigned char color);
156
+
157
+ _pal_col:
158
+ sta <PTR
159
+ jsr popa
160
+ and #$1f
161
+ tax
162
+ lda <PTR
163
+ sta PAL_BUF,x
164
+ rts
165
+
166
+
167
+
168
+ ;void __fastcall__ pal_clear(void);
169
+
170
+ _pal_clear:
171
+ lda #$0f
172
+ ldx #0
173
+ @1:
174
+ sta PAL_BUF,x
175
+ inx
176
+ cpx #$20
177
+ bne @1
178
+ rts
179
+
180
+
181
+
182
+ ;void __fastcall__ pal_bright(unsigned char bright);
183
+
184
+ _pal_bright:
185
+ asl a
186
+ asl a
187
+ asl a
188
+ asl a
189
+ sta <PAL_PTR
190
+ asl <PAL_PTR
191
+ rol <PAL_PTR+1
192
+ asl <PAL_PTR
193
+ rol <PAL_PTR+1
194
+ lda <PAL_PTR
195
+ clc
196
+ adc #<palBrightTable
197
+ sta <PAL_PTR
198
+ lda <PAL_PTR+1
199
+ and #$03
200
+ adc #>palBrightTable
201
+ sta <PAL_PTR+1
202
+ rts
203
+
204
+
205
+ ;void __fastcall__ ppu_off(void);
206
+
207
+ _ppu_off:
208
+ lda <PPU_MASK_VAR
209
+ and #%00011000
210
+ beq @1
211
+ jsr _ppu_waitnmi
212
+ @1:
213
+ lda <PPU_MASK_VAR
214
+ and #%11100111
215
+ sta <PPU_MASK_VAR
216
+ sta PPU_MASK
217
+ lda #0
218
+ sta PPU_CTRL
219
+ rts
220
+
221
+
222
+
223
+ ;void __fastcall__ ppu_on_all(void);
224
+
225
+ _ppu_on_all:
226
+ lda <PPU_MASK_VAR
227
+ ora #%00011000
228
+ ppu_onoff:
229
+ sta <PPU_MASK_VAR
230
+ sta PPU_MASK
231
+ lda #$80
232
+ sta PPU_CTRL
233
+ jsr _ppu_waitnmi
234
+ lda #$00
235
+ sta PPU_ADDR
236
+ sta PPU_ADDR
237
+ lda <PPU_CTRL_VAR
238
+ sta PPU_CTRL
239
+ rts
240
+
241
+
242
+
243
+ ;void __fastcall__ ppu_on_bg(void);
244
+
245
+ _ppu_on_bg:
246
+ lda <PPU_MASK_VAR
247
+ ora #%00001000
248
+ bne ppu_onoff ;bra
249
+
250
+
251
+
252
+ ;void __fastcall__ ppu_on_spr(void);
253
+
254
+ _ppu_on_spr:
255
+ lda <PPU_MASK_VAR
256
+ ora #%00010000
257
+ bne ppu_onoff ;bra
258
+
259
+
260
+
261
+ ;void __fastcall__ ppu_mask(unsigned char mask);
262
+
263
+ _ppu_mask:
264
+ sta <PPU_MASK_VAR
265
+ sta PPU_MASK
266
+ rts
267
+
268
+
269
+
270
+ ;void __fastcall__ oam_clear(void);
271
+
272
+ _oam_clear:
273
+ ldx #0
274
+ lda #$ff
275
+ @1:
276
+ sta OAM_BUF,x
277
+ inx
278
+ inx
279
+ inx
280
+ inx
281
+ bne @1
282
+ rts
283
+
284
+
285
+
286
+ ;unsigned char __fastcall__ oam_spr(unsigned char x,unsigned char y,unsigned char chrnum,unsigned char attr,unsigned char sprid);
287
+
288
+ _oam_spr:
289
+ tax
290
+
291
+ jsr popa
292
+ sta OAM_BUF+2,x
293
+ jsr popa
294
+ sta OAM_BUF+1,x
295
+ jsr popa
296
+ sta OAM_BUF+0,x
297
+ jsr popa
298
+ sta OAM_BUF+3,x
299
+
300
+ txa
301
+ clc
302
+ adc #4
303
+ rts
304
+
305
+
306
+
307
+ ;unsigned char __fastcall__ oam_meta_spr(unsigned char x,unsigned char y,unsigned char sprid,const unsigned char *data);
308
+
309
+ _oam_meta_spr:
310
+ sta <PTR
311
+ stx <PTR+1
312
+
313
+ jsr popa
314
+ tax
315
+
316
+ jsr popa
317
+ sta <SCRY
318
+ jsr popa
319
+ sta <SCRX
320
+
321
+ ldy #0
322
+ @1:
323
+ lda (PTR),y ;x offset
324
+ cmp #$80
325
+ bne @2
326
+ txa
327
+ rts
328
+ @2:
329
+ iny
330
+ clc
331
+ adc <SCRX
332
+ sta OAM_BUF+3,x
333
+ lda (PTR),y ;y offset
334
+ iny
335
+ clc
336
+ adc <SCRY
337
+ sta OAM_BUF+0,x
338
+ lda (PTR),y ;tile
339
+ iny
340
+ sta OAM_BUF+1,x
341
+ lda (PTR),y ;attribute
342
+ iny
343
+ sta OAM_BUF+2,x
344
+ inx
345
+ inx
346
+ inx
347
+ inx
348
+ jmp @1
349
+
350
+
351
+
352
+ ;void __fastcall__ oam_hide_rest(unsigned char sprid);
353
+
354
+ _oam_hide_rest:
355
+ tax
356
+ lda #240
357
+ @1:
358
+ sta OAM_BUF,x
359
+ inx
360
+ inx
361
+ inx
362
+ inx
363
+ bne @1
364
+ rts
365
+
366
+
367
+
368
+ ;void __fastcall__ ppu_waitnmi(void);
369
+
370
+ _ppu_waitnmi:
371
+ lda #1
372
+ sta <VRAMUPDATE
373
+ lda <FRAMECNT1
374
+ @1:
375
+ cmp <FRAMECNT1
376
+ beq @1
377
+ lda <NTSCMODE
378
+ beq @3
379
+ @2:
380
+ lda <FRAMECNT2
381
+ cmp #5
382
+ beq @2
383
+ @3:
384
+ lda #0
385
+ sta <VRAMUPDATE
386
+ rts
387
+
388
+
389
+
390
+ ;void __fastcall__ unrle_vram(const unsigned char *data,unsigned int vram);
391
+
392
+ _unrle_vram:
393
+ stx PPU_ADDR
394
+ sta PPU_ADDR
395
+
396
+ jsr popax
397
+ sta <RLE_LOW
398
+ stx <RLE_HIGH
399
+
400
+ ldy #0
401
+ jsr rle_byte
402
+ sta <RLE_TAG
403
+ @1:
404
+ jsr rle_byte
405
+ cmp <RLE_TAG
406
+ beq @2
407
+ sta PPU_DATA
408
+ sta <RLE_BYTE
409
+ bne @1
410
+ @2:
411
+ jsr rle_byte
412
+ cmp #0
413
+ beq @4
414
+ tax
415
+ lda <RLE_BYTE
416
+ @3:
417
+ sta PPU_DATA
418
+ dex
419
+ bne @3
420
+ beq @1
421
+ @4:
422
+ rts
423
+
424
+ rle_byte:
425
+ lda (RLE_LOW),y
426
+ inc <RLE_LOW
427
+ bne @1
428
+ inc <RLE_HIGH
429
+ @1:
430
+ rts
431
+
432
+
433
+
434
+ ;void __fastcall__ scroll(unsigned int x,unsigned int y);
435
+
436
+ _scroll:
437
+ sta <TEMP
438
+
439
+ txa
440
+ bne @1
441
+ lda <TEMP
442
+ cmp #240
443
+ bcs @1
444
+ sta <SCROLL_Y
445
+ lda #0
446
+ sta <TEMP
447
+ beq @2 ;bra
448
+
449
+ @1:
450
+ sec
451
+ lda <TEMP
452
+ sbc #240
453
+ sta <SCROLL_Y
454
+ lda #2
455
+ sta <TEMP
456
+ @2:
457
+
458
+ jsr popax
459
+ sta <SCROLL_X
460
+ txa
461
+ and #$01
462
+ ora <TEMP
463
+ sta <TEMP
464
+ lda <PPU_CTRL_VAR
465
+ and #$fc
466
+ ora <TEMP
467
+ sta <PPU_CTRL_VAR
468
+ rts
469
+
470
+
471
+
472
+ ;void __fastcall__ bank_spr(unsigned char n);
473
+
474
+ _bank_spr:
475
+ and #$01
476
+ asl a
477
+ asl a
478
+ asl a
479
+ sta <TEMP
480
+ lda <PPU_CTRL_VAR
481
+ and #%11110111
482
+ ora <TEMP
483
+ sta <PPU_CTRL_VAR
484
+ rts
485
+
486
+
487
+
488
+ ;void __fastcall__ bank_bg(unsigned char n);
489
+
490
+ _bank_bg:
491
+ and #$01
492
+ asl a
493
+ asl a
494
+ asl a
495
+ asl a
496
+ sta <TEMP
497
+ lda <PPU_CTRL_VAR
498
+ and #%11101111
499
+ ora <TEMP
500
+ sta <PPU_CTRL_VAR
501
+ rts
502
+
503
+
504
+
505
+ ;void __fastcall__ vram_read(unsigned char *dst,unsigned int adr,unsigned int size);
506
+
507
+ _vram_read:
508
+ sta <TEMP
509
+ stx <TEMP+1
510
+
511
+ jsr popax
512
+ stx PPU_ADDR
513
+ sta PPU_ADDR
514
+ lda PPU_DATA
515
+
516
+ jsr popax
517
+ sta <TEMP+2
518
+ stx <TEMP+3
519
+
520
+ ldy #0
521
+ @1:
522
+ lda PPU_DATA
523
+ sta (TEMP+2),y
524
+ inc <TEMP+2
525
+ bne @2
526
+ inc <TEMP+3
527
+ @2:
528
+ lda <TEMP
529
+ bne @3
530
+ dec <TEMP+1
531
+ @3:
532
+ dec <TEMP
533
+ lda <TEMP
534
+ ora <TEMP+1
535
+ bne @1
536
+
537
+ rts
538
+
539
+
540
+
541
+ ;void __fastcall__ vram_write(unsigned char *src,unsigned int adr,unsigned int size);
542
+
543
+ _vram_write:
544
+ sta <TEMP
545
+ stx <TEMP+1
546
+
547
+ jsr popax
548
+ stx PPU_ADDR
549
+ sta PPU_ADDR
550
+
551
+ jsr popax
552
+ sta <TEMP+2
553
+ stx <TEMP+3
554
+
555
+ ldy #0
556
+ @1:
557
+ lda (TEMP+2),y
558
+ sta PPU_DATA
559
+ inc <TEMP+2
560
+ bne @2
561
+ inc <TEMP+3
562
+ @2:
563
+ lda <TEMP
564
+ bne @3
565
+ dec <TEMP+1
566
+ @3:
567
+ dec <TEMP
568
+ lda <TEMP
569
+ ora <TEMP+1
570
+ bne @1
571
+
572
+ rts
573
+
574
+
575
+
576
+ ;void __fastcall__ music_play(const unsigned char *data);
577
+
578
+ _music_play:
579
+ stx <PTR
580
+ tax
581
+ ldy <PTR
582
+ jmp FamiToneMusicStart
583
+
584
+
585
+
586
+ ;void __fastcall__ music_stop(void);
587
+
588
+ _music_stop=FamiToneMusicStop
589
+
590
+
591
+
592
+ ;void __fastcall__ music_pause(unsigned char pause);
593
+
594
+ _music_pause=FamiToneMusicPause
595
+
596
+
597
+
598
+ ;void __fastcall__ sfx_play(unsigned char sound,unsigned char channel);
599
+
600
+ _sfx_play:
601
+ and #$03
602
+ tax
603
+ lda @sfxPriority,x
604
+ tax
605
+ jsr popa
606
+ jmp FamiToneSfxStart
607
+
608
+ @sfxPriority:
609
+ .byte FT_SFX_CH0,FT_SFX_CH1,FT_SFX_CH2,FT_SFX_CH3
610
+
611
+
612
+
613
+ ;unsigned char __fastcall__ pad_poll(unsigned char pad);
614
+
615
+ _pad_poll:
616
+ tay
617
+ ldx #0
618
+
619
+ @padPollPort:
620
+ lda #1
621
+ sta CTRL_PORT1
622
+ lda #0
623
+ sta CTRL_PORT1
624
+ lda #8
625
+ sta <TEMP
626
+
627
+ @padPollLoop:
628
+ lda CTRL_PORT1,y
629
+ lsr a
630
+ ror <PAD_BUF,x
631
+ dec <TEMP
632
+ bne @padPollLoop
633
+
634
+ inx
635
+ cpx #3
636
+ bne @padPollPort
637
+
638
+ lda <PAD_BUF
639
+ cmp <PAD_BUF+1
640
+ beq @done
641
+ cmp <PAD_BUF+2
642
+ beq @done
643
+ lda <PAD_BUF+1
644
+ @done:
645
+ sta <PAD_STATE,y
646
+ tax
647
+ eor <PAD_STATEP,y
648
+ and <PAD_STATE ,y
649
+ sta <PAD_STATET,y
650
+ txa
651
+ sta <PAD_STATEP,y
652
+
653
+ rts
654
+
655
+
656
+
657
+ ;unsigned char __fastcall__ pad_trigger(unsigned char pad);
658
+
659
+ _pad_trigger:
660
+ pha
661
+ jsr _pad_poll
662
+ pla
663
+ tax
664
+ lda <PAD_STATET,x
665
+ rts
666
+
667
+
668
+
669
+ ;unsigned char __fastcall__ pad_state(unsigned char pad);
670
+
671
+ _pad_state:
672
+ tax
673
+ lda <PAD_STATE,x
674
+ rts
675
+
676
+
677
+
678
+ ;unsigned char __fastcall__ rand8(void);
679
+ ;Galois random generator, found somewhere
680
+ ;out: A random number 0..255
681
+
682
+ rand1:
683
+ lda <RAND_SEED
684
+ asl a
685
+ bcc @1
686
+ eor #$cf
687
+ @1:
688
+ sta <RAND_SEED
689
+ rts
690
+
691
+ rand2:
692
+ lda <RAND_SEED+1
693
+ asl a
694
+ bcc @1
695
+ eor #$d7
696
+ @1:
697
+ sta <RAND_SEED+1
698
+ rts
699
+
700
+ _rand8:
701
+ jsr rand1
702
+ jsr rand2
703
+ adc <RAND_SEED
704
+ rts
705
+
706
+
707
+
708
+ ;unsigned int __fastcall__ rand16(void);
709
+
710
+ _rand16:
711
+ jsr rand1
712
+ tax
713
+ jsr rand2
714
+ rts
715
+
716
+
717
+ ;void __fastcall__ set_rand(unsigned char seed);
718
+
719
+ _set_rand:
720
+ sta <RAND_SEED
721
+ stx <RAND_SEED+1
722
+ rts
723
+
724
+
725
+
726
+ ;void __fastcall__ set_vram_update(unsigned char len,unsigned char *buf);
727
+
728
+ _set_vram_update:
729
+ sta <NAME_UPD_ADR
730
+ stx <NAME_UPD_ADR+1
731
+ jsr popa
732
+ sta <NAME_UPD_LEN
733
+ rts
734
+
735
+
736
+
737
+ ;void __fastcall__ vram_adr(unsigned int adr);
738
+
739
+ _vram_adr:
740
+ stx PPU_ADDR
741
+ sta PPU_ADDR
742
+ rts
743
+
744
+
745
+
746
+ ;void __fastcall__ vram_put(unsigned char n);
747
+
748
+ _vram_put:
749
+ sta PPU_DATA
750
+ rts
751
+
752
+
753
+
754
+ ;void __fastcall__ vram_fill(unsigned char n,unsigned int len);
755
+
756
+ _vram_fill:
757
+ sta <LEN
758
+ stx <LEN+1
759
+ jsr popa
760
+ ldx <LEN+1
761
+ beq @2
762
+ ldx #0
763
+ @1:
764
+ sta PPU_DATA
765
+ dex
766
+ bne @1
767
+ dec <LEN+1
768
+ bne @1
769
+ @2:
770
+ ldx <LEN
771
+ beq @4
772
+ @3:
773
+ sta PPU_DATA
774
+ dex
775
+ bne @3
776
+ @4:
777
+ rts
778
+
779
+
780
+
781
+ ;void __fastcall__ vram_inc(unsigned char n);
782
+
783
+ _vram_inc:
784
+ beq @1
785
+ lda #$04
786
+ @1:
787
+ sta <TEMP
788
+ lda <PPU_CTRL_VAR
789
+ and #$fb
790
+ ora <TEMP
791
+ sta <PPU_CTRL_VAR
792
+ sta PPU_CTRL
793
+ rts
794
+
795
+
796
+
797
+ ;void __fastcall__ memcpy(void *dst,void *src,unsigned int len);
798
+
799
+ _memcpy:
800
+ sta <LEN
801
+ stx <LEN+1
802
+ jsr popax
803
+ sta <SRC
804
+ stx <SRC+1
805
+ jsr popax
806
+ sta <DST
807
+ stx <DST+1
808
+
809
+ ldx #0
810
+ @1:
811
+ lda <LEN+1
812
+ beq @2
813
+ jsr @3
814
+ dec <LEN+1
815
+ inc <SRC+1
816
+ inc <DST+1
817
+ jmp @1
818
+ @2:
819
+ ldx <LEN
820
+ beq @5
821
+
822
+ @3:
823
+ ldy #0
824
+ @4:
825
+ lda (SRC),y
826
+ sta (DST),y
827
+ iny
828
+ dex
829
+ bne @4
830
+ @5:
831
+ rts
832
+
833
+
834
+
835
+ ;void __fastcall__ memfill(void *dst,unsigned char value,unsigned int len);
836
+
837
+ _memfill:
838
+ sta <LEN
839
+ stx <LEN+1
840
+ jsr popa
841
+ sta <TEMP
842
+ jsr popax
843
+ sta <DST
844
+ stx <DST+1
845
+
846
+ ldx #0
847
+ @1:
848
+ lda <LEN+1
849
+ beq @2
850
+ jsr @3
851
+ dec <LEN+1
852
+ inc <DST+1
853
+ jmp @1
854
+ @2:
855
+ ldx <LEN
856
+ beq @5
857
+
858
+ @3:
859
+ ldy #0
860
+ lda <TEMP
861
+ @4:
862
+ sta (DST),y
863
+ iny
864
+ dex
865
+ bne @4
866
+ @5:
867
+ rts
868
+
869
+
870
+
871
+ ;void __fastcall__ delay(unsigned char frames);
872
+
873
+ _delay:
874
+ tax
875
+ @1:
876
+ jsr _ppu_waitnmi
877
+ dex
878
+ bne @1
879
+ rts
880
+
881
+
882
+
883
+ palBrightTable:
884
+ .byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f ;0 black
885
+ .byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
886
+ .byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
887
+ .byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
888
+ .byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f ;1
889
+ .byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
890
+ .byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
891
+ .byte $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0a,$0b,$0c,$0f,$0e,$0f
892
+ .byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f ;2
893
+ .byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
894
+ .byte $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0a,$0b,$0c,$0f,$0e,$0f
895
+ .byte $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1f,$1e,$0f
896
+ .byte $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f ;3
897
+ .byte $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0a,$0b,$0c,$0f,$0e,$0f
898
+ .byte $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1f,$1e,$0f
899
+ .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$0f
900
+ .byte $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0a,$0b,$0c,$0f,$0e,$0f ;4 normal
901
+ .byte $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1f,$1e,$0f
902
+ .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$0f
903
+ .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$0f
904
+ .byte $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1f,$1e,$2d ;5
905
+ .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2d
906
+ .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$2d
907
+ .byte $30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$2d
908
+ .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$00 ;6
909
+ .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$00
910
+ .byte $30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$00
911
+ .byte $30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$00
912
+ .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$10 ;7
913
+ .byte $30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$10
914
+ .byte $30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$10
915
+ .byte $30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$10
916
+ .byte $30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30 ;8 white
917
+ .byte $30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30
918
+ .byte $30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30
919
+ .byte $30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30
920
+
921
+
922
+
923
+ .include "famitone.s"