burn 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +621 -0
- data/README.md +467 -0
- data/Rakefile +1 -0
- data/bin/burn +14 -0
- data/lib/burn/builder.rb +65 -0
- data/lib/burn/cli.rb +187 -0
- data/lib/burn/debug.rb +25 -0
- data/lib/burn/dsl/channel_stream.rb +105 -0
- data/lib/burn/dsl/declare.rb +42 -0
- data/lib/burn/dsl/dsl_base.rb +31 -0
- data/lib/burn/dsl/music.rb +36 -0
- data/lib/burn/dsl/note.rb +125 -0
- data/lib/burn/dsl/scene.rb +278 -0
- data/lib/burn/dsl/sound.rb +30 -0
- data/lib/burn/dsl/sound_effect.rb +91 -0
- data/lib/burn/dsl.rb +8 -0
- data/lib/burn/generator/assembly_music.rb +47 -0
- data/lib/burn/generator/assembly_sound_effect.rb +33 -0
- data/lib/burn/generator/c_source.rb +54 -0
- data/lib/burn/generator/template/mus_template.s +49 -0
- data/lib/burn/generator/template/template.c +88 -0
- data/lib/burn/generator.rb +3 -0
- data/lib/burn/tools/mac/cc65/asminc/_file.inc +27 -0
- data/lib/burn/tools/mac/cc65/asminc/_heap.inc +35 -0
- data/lib/burn/tools/mac/cc65/asminc/apple2.inc +64 -0
- data/lib/burn/tools/mac/cc65/asminc/atari.inc +1175 -0
- data/lib/burn/tools/mac/cc65/asminc/atari.mac +59 -0
- data/lib/burn/tools/mac/cc65/asminc/atmos.inc +110 -0
- data/lib/burn/tools/mac/cc65/asminc/c128.inc +214 -0
- data/lib/burn/tools/mac/cc65/asminc/c16.inc +9 -0
- data/lib/burn/tools/mac/cc65/asminc/c64.inc +212 -0
- data/lib/burn/tools/mac/cc65/asminc/cbm.mac +50 -0
- data/lib/burn/tools/mac/cc65/asminc/cbm510.inc +182 -0
- data/lib/burn/tools/mac/cc65/asminc/cbm610.inc +110 -0
- data/lib/burn/tools/mac/cc65/asminc/cbm_filetype.inc +34 -0
- data/lib/burn/tools/mac/cc65/asminc/cpu.mac +24 -0
- data/lib/burn/tools/mac/cc65/asminc/ctype.inc +29 -0
- data/lib/burn/tools/mac/cc65/asminc/em-error.inc +49 -0
- data/lib/burn/tools/mac/cc65/asminc/em-kernel.inc +106 -0
- data/lib/burn/tools/mac/cc65/asminc/errno.inc +36 -0
- data/lib/burn/tools/mac/cc65/asminc/fcntl.inc +21 -0
- data/lib/burn/tools/mac/cc65/asminc/generic.mac +55 -0
- data/lib/burn/tools/mac/cc65/asminc/get_tv.inc +22 -0
- data/lib/burn/tools/mac/cc65/asminc/joy-error.inc +44 -0
- data/lib/burn/tools/mac/cc65/asminc/joy-kernel.inc +85 -0
- data/lib/burn/tools/mac/cc65/asminc/longbranch.mac +88 -0
- data/lib/burn/tools/mac/cc65/asminc/lynx.inc +279 -0
- data/lib/burn/tools/mac/cc65/asminc/modload.inc +78 -0
- data/lib/burn/tools/mac/cc65/asminc/mouse-kernel.inc +180 -0
- data/lib/burn/tools/mac/cc65/asminc/nes.inc +93 -0
- data/lib/burn/tools/mac/cc65/asminc/o65.inc +150 -0
- data/lib/burn/tools/mac/cc65/asminc/opcodes.inc +509 -0
- data/lib/burn/tools/mac/cc65/asminc/pet.inc +54 -0
- data/lib/burn/tools/mac/cc65/asminc/plus4.inc +86 -0
- data/lib/burn/tools/mac/cc65/asminc/ser-error.inc +54 -0
- data/lib/burn/tools/mac/cc65/asminc/ser-kernel.inc +162 -0
- data/lib/burn/tools/mac/cc65/asminc/signal.inc +57 -0
- data/lib/burn/tools/mac/cc65/asminc/smc.inc +245 -0
- data/lib/burn/tools/mac/cc65/asminc/stdio.inc +70 -0
- data/lib/burn/tools/mac/cc65/asminc/supervision.inc +76 -0
- data/lib/burn/tools/mac/cc65/asminc/tgi-error.inc +52 -0
- data/lib/burn/tools/mac/cc65/asminc/tgi-kernel.inc +234 -0
- data/lib/burn/tools/mac/cc65/asminc/tgi-vectorfont.inc +70 -0
- data/lib/burn/tools/mac/cc65/asminc/time.inc +59 -0
- data/lib/burn/tools/mac/cc65/asminc/utsname.inc +46 -0
- data/lib/burn/tools/mac/cc65/asminc/vic20.inc +75 -0
- data/lib/burn/tools/mac/cc65/asminc/zeropage.inc +26 -0
- data/lib/burn/tools/mac/cc65/bin/ca65 +0 -0
- data/lib/burn/tools/mac/cc65/bin/cc65 +0 -0
- data/lib/burn/tools/mac/cc65/bin/ld65 +0 -0
- data/lib/burn/tools/other/cc65/asminc/_file.inc +27 -0
- data/lib/burn/tools/other/cc65/asminc/_heap.inc +35 -0
- data/lib/burn/tools/other/cc65/asminc/apple2.inc +64 -0
- data/lib/burn/tools/other/cc65/asminc/atari.inc +1175 -0
- data/lib/burn/tools/other/cc65/asminc/atari.mac +59 -0
- data/lib/burn/tools/other/cc65/asminc/atmos.inc +110 -0
- data/lib/burn/tools/other/cc65/asminc/c128.inc +214 -0
- data/lib/burn/tools/other/cc65/asminc/c16.inc +9 -0
- data/lib/burn/tools/other/cc65/asminc/c64.inc +212 -0
- data/lib/burn/tools/other/cc65/asminc/cbm.mac +50 -0
- data/lib/burn/tools/other/cc65/asminc/cbm510.inc +182 -0
- data/lib/burn/tools/other/cc65/asminc/cbm610.inc +110 -0
- data/lib/burn/tools/other/cc65/asminc/cbm_filetype.inc +34 -0
- data/lib/burn/tools/other/cc65/asminc/cpu.mac +24 -0
- data/lib/burn/tools/other/cc65/asminc/ctype.inc +29 -0
- data/lib/burn/tools/other/cc65/asminc/em-error.inc +49 -0
- data/lib/burn/tools/other/cc65/asminc/em-kernel.inc +106 -0
- data/lib/burn/tools/other/cc65/asminc/errno.inc +36 -0
- data/lib/burn/tools/other/cc65/asminc/fcntl.inc +21 -0
- data/lib/burn/tools/other/cc65/asminc/generic.mac +55 -0
- data/lib/burn/tools/other/cc65/asminc/get_tv.inc +22 -0
- data/lib/burn/tools/other/cc65/asminc/joy-error.inc +44 -0
- data/lib/burn/tools/other/cc65/asminc/joy-kernel.inc +85 -0
- data/lib/burn/tools/other/cc65/asminc/longbranch.mac +88 -0
- data/lib/burn/tools/other/cc65/asminc/lynx.inc +279 -0
- data/lib/burn/tools/other/cc65/asminc/modload.inc +78 -0
- data/lib/burn/tools/other/cc65/asminc/mouse-kernel.inc +180 -0
- data/lib/burn/tools/other/cc65/asminc/nes.inc +93 -0
- data/lib/burn/tools/other/cc65/asminc/o65.inc +150 -0
- data/lib/burn/tools/other/cc65/asminc/opcodes.inc +509 -0
- data/lib/burn/tools/other/cc65/asminc/pet.inc +54 -0
- data/lib/burn/tools/other/cc65/asminc/plus4.inc +86 -0
- data/lib/burn/tools/other/cc65/asminc/ser-error.inc +54 -0
- data/lib/burn/tools/other/cc65/asminc/ser-kernel.inc +162 -0
- data/lib/burn/tools/other/cc65/asminc/signal.inc +57 -0
- data/lib/burn/tools/other/cc65/asminc/smc.inc +245 -0
- data/lib/burn/tools/other/cc65/asminc/stdio.inc +70 -0
- data/lib/burn/tools/other/cc65/asminc/supervision.inc +76 -0
- data/lib/burn/tools/other/cc65/asminc/tgi-error.inc +52 -0
- data/lib/burn/tools/other/cc65/asminc/tgi-kernel.inc +234 -0
- data/lib/burn/tools/other/cc65/asminc/tgi-vectorfont.inc +70 -0
- data/lib/burn/tools/other/cc65/asminc/time.inc +59 -0
- data/lib/burn/tools/other/cc65/asminc/utsname.inc +46 -0
- data/lib/burn/tools/other/cc65/asminc/vic20.inc +75 -0
- data/lib/burn/tools/other/cc65/asminc/zeropage.inc +26 -0
- data/lib/burn/tools/other/cc65/bin/ca65 +0 -0
- data/lib/burn/tools/other/cc65/bin/cc65 +0 -0
- data/lib/burn/tools/other/cc65/bin/ld65 +0 -0
- data/lib/burn/tools/win/cc65/asminc/_file.inc +27 -0
- data/lib/burn/tools/win/cc65/asminc/_heap.inc +35 -0
- data/lib/burn/tools/win/cc65/asminc/apple2.inc +64 -0
- data/lib/burn/tools/win/cc65/asminc/atari.inc +1101 -0
- data/lib/burn/tools/win/cc65/asminc/atmos.inc +31 -0
- data/lib/burn/tools/win/cc65/asminc/c128.inc +213 -0
- data/lib/burn/tools/win/cc65/asminc/c16.inc +9 -0
- data/lib/burn/tools/win/cc65/asminc/c64.inc +212 -0
- data/lib/burn/tools/win/cc65/asminc/cbm510.inc +182 -0
- data/lib/burn/tools/win/cc65/asminc/cbm610.inc +110 -0
- data/lib/burn/tools/win/cc65/asminc/ctype.inc +29 -0
- data/lib/burn/tools/win/cc65/asminc/em-error.inc +44 -0
- data/lib/burn/tools/win/cc65/asminc/em-kernel.inc +100 -0
- data/lib/burn/tools/win/cc65/asminc/errno.inc +36 -0
- data/lib/burn/tools/win/cc65/asminc/fcntl.inc +21 -0
- data/lib/burn/tools/win/cc65/asminc/get_tv.inc +22 -0
- data/lib/burn/tools/win/cc65/asminc/joy-error.inc +44 -0
- data/lib/burn/tools/win/cc65/asminc/joy-kernel.inc +85 -0
- data/lib/burn/tools/win/cc65/asminc/lynx.inc +273 -0
- data/lib/burn/tools/win/cc65/asminc/modload.inc +78 -0
- data/lib/burn/tools/win/cc65/asminc/mouse-kernel.inc +179 -0
- data/lib/burn/tools/win/cc65/asminc/nes.inc +93 -0
- data/lib/burn/tools/win/cc65/asminc/o65.inc +135 -0
- data/lib/burn/tools/win/cc65/asminc/pet.inc +45 -0
- data/lib/burn/tools/win/cc65/asminc/plus4.inc +87 -0
- data/lib/burn/tools/win/cc65/asminc/rs232.inc +19 -0
- data/lib/burn/tools/win/cc65/asminc/ser-error.inc +50 -0
- data/lib/burn/tools/win/cc65/asminc/ser-kernel.inc +161 -0
- data/lib/burn/tools/win/cc65/asminc/signal.inc +57 -0
- data/lib/burn/tools/win/cc65/asminc/stdio.inc +70 -0
- data/lib/burn/tools/win/cc65/asminc/supervision.inc +76 -0
- data/lib/burn/tools/win/cc65/asminc/tgi-error.inc +48 -0
- data/lib/burn/tools/win/cc65/asminc/tgi-kernel.inc +183 -0
- data/lib/burn/tools/win/cc65/asminc/tgi-mode.inc +48 -0
- data/lib/burn/tools/win/cc65/asminc/time.inc +59 -0
- data/lib/burn/tools/win/cc65/asminc/utsname.inc +46 -0
- data/lib/burn/tools/win/cc65/asminc/vic20.inc +77 -0
- data/lib/burn/tools/win/cc65/asminc/zeropage.inc +22 -0
- data/lib/burn/tools/win/cc65/bin/ca65.exe +0 -0
- data/lib/burn/tools/win/cc65/bin/cc65.exe +0 -0
- data/lib/burn/tools/win/cc65/bin/ld65.exe +0 -0
- data/lib/burn/util/os.rb +38 -0
- data/lib/burn/util/patternizer.rb +62 -0
- data/lib/burn/util/pxes.rb +180 -0
- data/lib/burn/util/server.rb +21 -0
- data/lib/burn/util.rb +4 -0
- data/lib/burn/version.rb +3 -0
- data/lib/burn/workspace_default/asset/crt0.s +260 -0
- data/lib/burn/workspace_default/asset/famitone.s +1031 -0
- data/lib/burn/workspace_default/asset/mus_instruments.s +50 -0
- data/lib/burn/workspace_default/asset/music.s +3 -0
- data/lib/burn/workspace_default/asset/nes.cfg +83 -0
- data/lib/burn/workspace_default/asset/neslib.h +213 -0
- data/lib/burn/workspace_default/asset/neslib.s +923 -0
- data/lib/burn/workspace_default/asset/runtime.lib +0 -0
- data/lib/burn/workspace_default/asset/sounds.s +143 -0
- data/lib/burn/workspace_default/asset/test.h +22 -0
- data/lib/burn/workspace_default/asset/tileset.chr +0 -0
- data/lib/burn/workspace_default/release/js/emulator.html +42 -0
- data/lib/burn/workspace_default/release/js/js/dynamicaudio-89ba58da476270a9b630.min.js +1 -0
- data/lib/burn/workspace_default/release/js/js/jquery-1.4.2.min.js +154 -0
- data/lib/burn/workspace_default/release/js/js/jsnes-4e7a7260aa.js +7149 -0
- data/lib/burn/workspace_default/release/js/swf/dynamicaudio.swf +0 -0
- data/lib/burn/workspace_default/scripts/compile.bat +30 -0
- data/lib/burn/workspace_default/scripts/compile.sh +30 -0
- data/lib/burn.rb +11 -0
- data/test/helper.rb +8 -0
- data/test/runner.rb +2 -0
- data/test/test_burn.rb +14 -0
- data/test/test_dsl.rb +22 -0
- data/test/test_pxes.rb +48 -0
- metadata +270 -0
@@ -0,0 +1,180 @@
|
|
1
|
+
module Burn
|
2
|
+
module Util
|
3
|
+
class Pxes
|
4
|
+
include Debug
|
5
|
+
attr_reader :sexp
|
6
|
+
|
7
|
+
def initialize(sexp, context=nil, resource_name=nil)
|
8
|
+
@sexp = sexp
|
9
|
+
@context = context || self
|
10
|
+
@resource_name = resource_name
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_c
|
14
|
+
parse_sexp(@sexp)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
#def replace_vcall_to_symbol(sexp_array)
|
19
|
+
# sexp_array.map do |a|
|
20
|
+
# if a.instance_of?(Array) then
|
21
|
+
# replace_vcall_to_symbol(a)
|
22
|
+
# elsif a==:vcall then
|
23
|
+
# :symbol
|
24
|
+
# else
|
25
|
+
# a
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
#end
|
29
|
+
|
30
|
+
def invoke_dsl_processing(exp)
|
31
|
+
generator = Generator::CSource.new(self)
|
32
|
+
Dsl::Scene.new(@resource_name, generator).instance_eval exp
|
33
|
+
# return the result
|
34
|
+
@context.instance_exec(generator.global) do |generator_global|
|
35
|
+
@global.concat generator_global
|
36
|
+
end
|
37
|
+
generator.code_blocks.join
|
38
|
+
end
|
39
|
+
|
40
|
+
def parse_sexp(s)
|
41
|
+
if s.instance_of?(String) then
|
42
|
+
s
|
43
|
+
elsif s.instance_of?(Array) && s[0].instance_of?(Symbol) then
|
44
|
+
log "--array and symbol--"
|
45
|
+
log s[0]
|
46
|
+
case s[0]
|
47
|
+
when :assign
|
48
|
+
parse_sexp(s[1]) + "=" + parse_sexp(s[2]) + ";"
|
49
|
+
|
50
|
+
when :var_field
|
51
|
+
s[1][1]
|
52
|
+
|
53
|
+
when :var_ref
|
54
|
+
case s[1][1]
|
55
|
+
when "true", "false"
|
56
|
+
s[1][1].upcase
|
57
|
+
else
|
58
|
+
s[1][1]
|
59
|
+
end
|
60
|
+
|
61
|
+
when :void_stmt
|
62
|
+
"" # this happens when rip "if true then # do nothing end" type of code
|
63
|
+
|
64
|
+
when :binary
|
65
|
+
case s[2]
|
66
|
+
when :or
|
67
|
+
operator = "||"
|
68
|
+
when :and
|
69
|
+
operator = "&&"
|
70
|
+
else
|
71
|
+
operator = s[2].to_s
|
72
|
+
end
|
73
|
+
parse_sexp(s[1]) + operator + parse_sexp(s[3])
|
74
|
+
|
75
|
+
when :opassign
|
76
|
+
parse_sexp(s[1]) + parse_sexp(s[2]) + parse_sexp(s[3]) + ";"
|
77
|
+
|
78
|
+
when :unary
|
79
|
+
case s[1]
|
80
|
+
when :not, :!
|
81
|
+
"!" + parse_sexp(s[2])
|
82
|
+
else
|
83
|
+
parse_sexp(s[2])
|
84
|
+
end
|
85
|
+
|
86
|
+
when :paren
|
87
|
+
"(" + parse_sexp(s[1][0]) + ")"
|
88
|
+
|
89
|
+
when :symbol
|
90
|
+
':' + s[1][1]
|
91
|
+
|
92
|
+
when :field, :call
|
93
|
+
parse_sexp(s[1]) + "." + parse_sexp(s[3])
|
94
|
+
|
95
|
+
when :@ident, :@int, :@kw, :@op
|
96
|
+
s[1]
|
97
|
+
|
98
|
+
when :@tstring_content
|
99
|
+
'"' + s[1] + '"'
|
100
|
+
|
101
|
+
# this is why you can't use pre-defined dsl name as a variable name. e.g) you are not allowed to declare variables like show or label or stop. these all are defined dsl.
|
102
|
+
when :vcall
|
103
|
+
if !Dsl::Scene.new(@resource_name,self).methods.index(s[1][1].to_sym).nil? then
|
104
|
+
invoke_dsl_processing parse_sexp(s[1])
|
105
|
+
else
|
106
|
+
parse_sexp(s[1])
|
107
|
+
end
|
108
|
+
|
109
|
+
when :command
|
110
|
+
if !Dsl::Scene.new(@resource_name,self).methods.index(s[1][1].to_sym).nil? then
|
111
|
+
#invoke_dsl_processing parse_sexp(s[1]) + "(" + parse_sexp( replace_vcall_to_symbol(s[2]) ) + ")"
|
112
|
+
invoke_dsl_processing parse_sexp(s[1]) + "(" + parse_sexp( s[2] ) + ")"
|
113
|
+
else
|
114
|
+
parse_sexp(s[1]) + "(" + parse_sexp(s[2]) + ");"
|
115
|
+
end
|
116
|
+
|
117
|
+
when :method_add_arg
|
118
|
+
command = s[1][1][1]
|
119
|
+
# check if it matches dsl.
|
120
|
+
case command
|
121
|
+
when "is_pressed"
|
122
|
+
parse_sexp(s[1]) + "(PAD_" + parse_sexp(s[2]).delete(":").upcase + ")"
|
123
|
+
when "rand"
|
124
|
+
parse_sexp(s[1]) + "8()"
|
125
|
+
else
|
126
|
+
parse_sexp(s[1]) + "(" + parse_sexp(s[2]) + ")"
|
127
|
+
end
|
128
|
+
|
129
|
+
# Currently pssing block is not supported
|
130
|
+
#when :method_add_block
|
131
|
+
|
132
|
+
when :args_add_block
|
133
|
+
a = Array.new
|
134
|
+
s[1].each_with_index do |sexp,i|
|
135
|
+
log "<<<<<<<<<<<<<<<<<<NUM #{i}>>>>>>"
|
136
|
+
log sexp
|
137
|
+
a << parse_sexp(sexp)
|
138
|
+
end
|
139
|
+
a.join(",")
|
140
|
+
|
141
|
+
when :while
|
142
|
+
"while(" + parse_sexp(s[1]) + "){" + parse_sexp(s[2]) + "}"
|
143
|
+
|
144
|
+
when :if, :if_mod, :elsif
|
145
|
+
if s[0]==:elsif then
|
146
|
+
keyword = "else if"
|
147
|
+
else
|
148
|
+
keyword = "if"
|
149
|
+
end
|
150
|
+
additional_condition = parse_sexp(s[3]) if !s[3].nil?
|
151
|
+
"#{keyword} (" + parse_sexp(s[1]) + "){" + parse_sexp(s[2]) + "} #{additional_condition}"
|
152
|
+
|
153
|
+
#when :def
|
154
|
+
# is not supported for to_c as return data type cannot be defined
|
155
|
+
|
156
|
+
when :else
|
157
|
+
"else {" + parse_sexp(s[1]) + " } "
|
158
|
+
|
159
|
+
else
|
160
|
+
parse_sexp(s[1])
|
161
|
+
|
162
|
+
end
|
163
|
+
# Safety net
|
164
|
+
elsif s.instance_of?(Array) && s[0].instance_of?(Array) then
|
165
|
+
a = Array.new
|
166
|
+
s.each_with_index do |sexp,i|
|
167
|
+
log "<<<<<<<<<<<<<<<<<<NUM #{i}>>>>>>"
|
168
|
+
log sexp
|
169
|
+
a << parse_sexp(sexp)
|
170
|
+
end
|
171
|
+
a.join("\n")
|
172
|
+
else
|
173
|
+
log "--else--"
|
174
|
+
log s.class.to_s
|
175
|
+
log s[0].class.to_s
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Burn
|
2
|
+
module Util
|
3
|
+
class Server
|
4
|
+
require 'webrick'
|
5
|
+
|
6
|
+
def initialize(document_root)
|
7
|
+
@server = WEBrick::HTTPServer.new({:DocumentRoot => document_root, :BindAddress => '127.0.0.1', :Port => 17890})
|
8
|
+
trap 'INT' do
|
9
|
+
@server.shutdown
|
10
|
+
end
|
11
|
+
@server.mount_proc('/shutdown'){ |req, resp|
|
12
|
+
@server.stop
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def start
|
17
|
+
@server.start
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/burn/util.rb
ADDED
data/lib/burn/version.rb
ADDED
@@ -0,0 +1,260 @@
|
|
1
|
+
; Startup code for cc65 and Shiru's NES library
|
2
|
+
; based on code by Groepaz/Hitmen <groepaz@gmx.net>, Ullrich von Bassewitz <uz@cc65.org>
|
3
|
+
|
4
|
+
|
5
|
+
NES_MAPPER =0 ;mapper number
|
6
|
+
NES_PRG_BANKS =1 ;number of 16K PRG banks, change to 2 for NROM256
|
7
|
+
NES_CHR_BANKS =1 ;number of 8K CHR banks
|
8
|
+
NES_MIRRORING =1 ;0 horizontal, 1 vertical, 8 four screen
|
9
|
+
|
10
|
+
FT_DPCM_OFF =$ffc0 ;samples offset, $c000 or higher, 64-byte steps
|
11
|
+
FT_SFX_STREAMS =4 ;number of sound effects played at once, can be 4 or less (faster)
|
12
|
+
|
13
|
+
.define FT_DPCM_ENABLE 0 ;zero to exclude all the DMC code
|
14
|
+
.define FT_SFX_ENABLE 1 ;zero to exclude all the sound effects code
|
15
|
+
|
16
|
+
.define SPEED_FIX 1 ;zero if you want to handle PAL/NTSC speed difference by yourself
|
17
|
+
|
18
|
+
|
19
|
+
.export _exit,__STARTUP__:absolute=1
|
20
|
+
.import initlib,push0,popa,popax,_main,zerobss,copydata
|
21
|
+
|
22
|
+
; Linker generated symbols
|
23
|
+
.import __RAM_START__ ,__RAM_SIZE__
|
24
|
+
.import __ROM0_START__ ,__ROM0_SIZE__
|
25
|
+
.import __STARTUP_LOAD__,__STARTUP_RUN__,__STARTUP_SIZE__
|
26
|
+
.import __CODE_LOAD__ ,__CODE_RUN__ ,__CODE_SIZE__
|
27
|
+
.import __RODATA_LOAD__ ,__RODATA_RUN__ ,__RODATA_SIZE__
|
28
|
+
|
29
|
+
.include "zeropage.inc"
|
30
|
+
|
31
|
+
|
32
|
+
PPU_CTRL =$2000
|
33
|
+
PPU_MASK =$2001
|
34
|
+
PPU_STATUS =$2002
|
35
|
+
PPU_OAM_ADDR=$2003
|
36
|
+
PPU_OAM_DATA=$2004
|
37
|
+
PPU_SCROLL =$2005
|
38
|
+
PPU_ADDR =$2006
|
39
|
+
PPU_DATA =$2007
|
40
|
+
PPU_OAM_DMA =$4014
|
41
|
+
PPU_FRAMECNT=$4017
|
42
|
+
DMC_FREQ =$4010
|
43
|
+
CTRL_PORT1 =$4016
|
44
|
+
CTRL_PORT2 =$4017
|
45
|
+
|
46
|
+
OAM_BUF =$0200
|
47
|
+
PAL_BUF =$01c0
|
48
|
+
|
49
|
+
FRAMECNT1 =$00
|
50
|
+
FRAMECNT2 =$01
|
51
|
+
NTSCMODE =$02
|
52
|
+
VRAMUPDATE =$03
|
53
|
+
PAD_STATE =$04 ;2 bytes, one per controller
|
54
|
+
PAD_STATEP =$06 ;2 bytes
|
55
|
+
PAD_STATET =$08 ;2 bytes
|
56
|
+
FT_TEMP =$0a ;7 bytes in zeropage
|
57
|
+
SCROLL_X =$11
|
58
|
+
SCROLL_Y =$12
|
59
|
+
PPU_CTRL_VAR=$13
|
60
|
+
PPU_MASK_VAR=$14
|
61
|
+
NAME_UPD_ADR=$15 ;word
|
62
|
+
NAME_UPD_LEN=$17
|
63
|
+
PAL_PTR =$18 ;word
|
64
|
+
RAND_SEED =$1a ;word
|
65
|
+
|
66
|
+
TEMP =$1c
|
67
|
+
|
68
|
+
PAD_BUF =TEMP+1
|
69
|
+
|
70
|
+
PTR =TEMP ;word
|
71
|
+
LEN =TEMP+2 ;word
|
72
|
+
NEXTSPR =TEMP+4
|
73
|
+
SCRX =TEMP+5
|
74
|
+
SCRY =TEMP+6
|
75
|
+
SRC =TEMP+7 ;word
|
76
|
+
DST =TEMP+9 ;word
|
77
|
+
|
78
|
+
RLE_LOW =TEMP
|
79
|
+
RLE_HIGH =TEMP+1
|
80
|
+
RLE_TAG =TEMP+2
|
81
|
+
RLE_BYTE =TEMP+3
|
82
|
+
|
83
|
+
|
84
|
+
FT_BASE_ADR =$0100 ;page in RAM, should be $xx00
|
85
|
+
FT_DPCM_PTR =(FT_DPCM_OFF&$3fff)>>6
|
86
|
+
|
87
|
+
.define FT_THREAD 1;undefine if you call sound effects in the same thread as sound update
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
.segment "HEADER"
|
92
|
+
|
93
|
+
.byte $4e,$45,$53,$1a
|
94
|
+
.byte NES_PRG_BANKS
|
95
|
+
.byte NES_CHR_BANKS
|
96
|
+
.byte NES_MIRRORING|(NES_MAPPER<<4)
|
97
|
+
.byte NES_MAPPER&$f0
|
98
|
+
.res 8,0
|
99
|
+
|
100
|
+
|
101
|
+
.segment "STARTUP"
|
102
|
+
|
103
|
+
start:
|
104
|
+
_exit:
|
105
|
+
|
106
|
+
sei
|
107
|
+
ldx #$ff
|
108
|
+
txs
|
109
|
+
inx
|
110
|
+
stx PPU_MASK
|
111
|
+
stx DMC_FREQ
|
112
|
+
stx PPU_CTRL ;no NMI
|
113
|
+
|
114
|
+
waitSync1:
|
115
|
+
bit PPU_STATUS
|
116
|
+
@1:
|
117
|
+
bit PPU_STATUS
|
118
|
+
bpl @1
|
119
|
+
|
120
|
+
clearPalette:
|
121
|
+
ldy #$3f
|
122
|
+
sty PPU_ADDR
|
123
|
+
stx PPU_ADDR
|
124
|
+
lda #$0f
|
125
|
+
ldx #$20
|
126
|
+
@1:
|
127
|
+
sta PPU_DATA
|
128
|
+
dex
|
129
|
+
bne @1
|
130
|
+
|
131
|
+
clearVRAM:
|
132
|
+
txa
|
133
|
+
ldy #$20
|
134
|
+
sty PPU_ADDR
|
135
|
+
sta PPU_ADDR
|
136
|
+
ldy #$10
|
137
|
+
@1:
|
138
|
+
sta PPU_DATA
|
139
|
+
inx
|
140
|
+
bne @1
|
141
|
+
dey
|
142
|
+
bne @1
|
143
|
+
|
144
|
+
clearRAM:
|
145
|
+
txa
|
146
|
+
@1:
|
147
|
+
sta $000,x
|
148
|
+
sta $100,x
|
149
|
+
sta $200,x
|
150
|
+
sta $300,x
|
151
|
+
sta $400,x
|
152
|
+
sta $500,x
|
153
|
+
sta $600,x
|
154
|
+
sta $700,x
|
155
|
+
inx
|
156
|
+
bne @1
|
157
|
+
|
158
|
+
lda #4
|
159
|
+
jsr _pal_bright
|
160
|
+
jsr _pal_clear
|
161
|
+
jsr _oam_clear
|
162
|
+
|
163
|
+
jsr zerobss
|
164
|
+
jsr copydata
|
165
|
+
|
166
|
+
lda #<(__RAM_START__+__RAM_SIZE__)
|
167
|
+
sta sp
|
168
|
+
lda #>(__RAM_START__+__RAM_SIZE__)
|
169
|
+
sta sp+1 ; Set argument stack ptr
|
170
|
+
|
171
|
+
jsr initlib
|
172
|
+
|
173
|
+
waitSync2:
|
174
|
+
bit PPU_STATUS
|
175
|
+
@1:
|
176
|
+
bit PPU_STATUS
|
177
|
+
bpl @1
|
178
|
+
|
179
|
+
lda #%10000000
|
180
|
+
sta <PPU_CTRL_VAR
|
181
|
+
sta PPU_CTRL ;enable NMI
|
182
|
+
lda #%00000110
|
183
|
+
sta <PPU_MASK_VAR
|
184
|
+
|
185
|
+
waitSync3:
|
186
|
+
lda <FRAMECNT1
|
187
|
+
@1:
|
188
|
+
cmp <FRAMECNT1
|
189
|
+
beq @1
|
190
|
+
|
191
|
+
detectNTSC:
|
192
|
+
ldx #52 ;blargg's code
|
193
|
+
ldy #24
|
194
|
+
@1:
|
195
|
+
dex
|
196
|
+
bne @1
|
197
|
+
dey
|
198
|
+
bne @1
|
199
|
+
|
200
|
+
lda PPU_STATUS
|
201
|
+
and #$80
|
202
|
+
sta <NTSCMODE
|
203
|
+
|
204
|
+
jsr _ppu_off
|
205
|
+
|
206
|
+
lda <NTSCMODE
|
207
|
+
jsr FamiToneInit
|
208
|
+
|
209
|
+
.if(FT_DPCM_ENABLE)
|
210
|
+
ldx #<music_dpcm
|
211
|
+
ldy #>music_dpcm
|
212
|
+
jsr FamiToneSampleInit
|
213
|
+
.endif
|
214
|
+
|
215
|
+
.if(FT_SFX_ENABLE)
|
216
|
+
ldx #<sounds_data
|
217
|
+
ldy #>sounds_data
|
218
|
+
jsr FamiToneSfxInit
|
219
|
+
.endif
|
220
|
+
|
221
|
+
.if(!SPEED_FIX)
|
222
|
+
lda #0
|
223
|
+
sta <NTSCMODE
|
224
|
+
.endif
|
225
|
+
|
226
|
+
lda #$fd
|
227
|
+
sta <RAND_SEED
|
228
|
+
sta <RAND_SEED+1
|
229
|
+
|
230
|
+
lda #0
|
231
|
+
sta PPU_SCROLL
|
232
|
+
sta PPU_SCROLL
|
233
|
+
|
234
|
+
jmp _main ;no parameters
|
235
|
+
|
236
|
+
.include "neslib.s"
|
237
|
+
|
238
|
+
.segment "RODATA"
|
239
|
+
|
240
|
+
.include "music.s"
|
241
|
+
|
242
|
+
.if(FT_SFX_ENABLE)
|
243
|
+
sounds_data:
|
244
|
+
.include "sounds.s"
|
245
|
+
.endif
|
246
|
+
|
247
|
+
.segment "SAMPLES"
|
248
|
+
|
249
|
+
;.incbin "music_dpcm.bin"
|
250
|
+
|
251
|
+
.segment "VECTORS"
|
252
|
+
|
253
|
+
.word nmi ;$fffa vblank nmi
|
254
|
+
.word start ;$fffc reset
|
255
|
+
.word irq ;$fffe irq / brk
|
256
|
+
|
257
|
+
|
258
|
+
.segment "CHARS"
|
259
|
+
|
260
|
+
.incbin "tileset.chr"
|