burn 0.1.3 → 0.2.0
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.
- data/README.md +56 -569
- data/lib/burn.rb +5 -3
- data/lib/burn/cli.rb +160 -199
- data/lib/burn/config.rb +4 -0
- data/lib/burn/config/app.rb +15 -0
- data/lib/burn/config/config_base.rb +16 -0
- data/lib/burn/config/loader.rb +23 -0
- data/lib/burn/config/server.rb +11 -0
- data/lib/burn/fuel.rb +11 -0
- data/lib/burn/{dsl → fuel}/dsl_base.rb +1 -1
- data/lib/burn/fuel/rom/channel_stream.rb +106 -0
- data/lib/burn/fuel/rom/declare.rb +43 -0
- data/lib/burn/fuel/rom/music.rb +37 -0
- data/lib/burn/fuel/rom/note.rb +126 -0
- data/lib/burn/fuel/rom/scene.rb +279 -0
- data/lib/burn/fuel/rom/sound.rb +31 -0
- data/lib/burn/fuel/rom/sound_effect.rb +92 -0
- data/lib/burn/fuel/telnet/declare.rb +26 -0
- data/lib/burn/fuel/telnet/scene.rb +112 -0
- data/lib/burn/generator.rb +10 -3
- data/lib/burn/generator/rom/assembly_music.rb +49 -0
- data/lib/burn/generator/rom/assembly_sound_effect.rb +35 -0
- data/lib/burn/generator/rom/c_source.rb +55 -0
- data/lib/burn/generator/{template → rom/template}/mus_template.s +0 -0
- data/lib/burn/generator/{template → rom/template}/template.c +0 -0
- data/lib/burn/generator/rom_builder.rb +67 -0
- data/lib/burn/generator/telnet/jit_compiler.rb +41 -0
- data/lib/burn/generator/telnet/screen.rb +86 -0
- data/lib/burn/generator/telnet/sprite.rb +16 -0
- data/lib/burn/generator/telnet/user_input.rb +25 -0
- data/lib/burn/generator/telnet_vm.rb +50 -0
- data/lib/burn/pxes.rb +3 -0
- data/lib/burn/{util/pxes.rb → pxes/cc65_transpiler.rb} +8 -14
- data/lib/burn/pxes/cruby_transpiler.rb +189 -0
- data/lib/burn/pxes/transpiler_base.rb +14 -0
- data/lib/burn/server.rb +2 -0
- data/lib/burn/server/rom.rb +24 -0
- data/lib/burn/server/telnet.rb +120 -0
- data/lib/burn/util.rb +1 -2
- data/lib/burn/util/logo.rb +68 -0
- data/lib/burn/util/os.rb +1 -1
- data/lib/burn/version.rb +1 -1
- metadata +53 -19
- data/lib/burn/builder.rb +0 -65
- data/lib/burn/dsl.rb +0 -8
- data/lib/burn/dsl/channel_stream.rb +0 -105
- data/lib/burn/dsl/declare.rb +0 -42
- data/lib/burn/dsl/music.rb +0 -36
- data/lib/burn/dsl/note.rb +0 -125
- data/lib/burn/dsl/scene.rb +0 -278
- data/lib/burn/dsl/sound.rb +0 -30
- data/lib/burn/dsl/sound_effect.rb +0 -91
- data/lib/burn/generator/assembly_music.rb +0 -47
- data/lib/burn/generator/assembly_sound_effect.rb +0 -33
- data/lib/burn/generator/c_source.rb +0 -54
- data/lib/burn/util/server.rb +0 -21
data/lib/burn/server.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Burn
|
2
|
+
module Server
|
3
|
+
class Rom
|
4
|
+
require 'webrick'
|
5
|
+
|
6
|
+
def initialize(document_root, conf)
|
7
|
+
@server = WEBrick::HTTPServer.new({:DocumentRoot => document_root,
|
8
|
+
:BindAddress => conf.server.ip_addr,
|
9
|
+
:Port => conf.server.port,
|
10
|
+
:MaxClients => conf.server.max_clients})
|
11
|
+
trap 'INT' do
|
12
|
+
@server.shutdown
|
13
|
+
end
|
14
|
+
@server.mount_proc('/shutdown'){ |req, resp|
|
15
|
+
@server.stop
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def start
|
20
|
+
@server.start
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module Burn
|
2
|
+
module Server
|
3
|
+
class Telnet
|
4
|
+
require 'eventmachine'
|
5
|
+
include Debug
|
6
|
+
|
7
|
+
def initialize(fuel, conf)
|
8
|
+
@@op = nil
|
9
|
+
@@screen_buffer = nil
|
10
|
+
@@conf = conf
|
11
|
+
@fuel = fuel
|
12
|
+
verbose conf.app.verbose
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.vm
|
16
|
+
@@vm
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.op(receive=nil)
|
20
|
+
if receive.nil? then
|
21
|
+
@@op
|
22
|
+
else
|
23
|
+
@@op = receive
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.conf
|
28
|
+
@@conf
|
29
|
+
end
|
30
|
+
|
31
|
+
class Messenger < EM::Connection
|
32
|
+
include Debug
|
33
|
+
@@channel = EM::Channel.new
|
34
|
+
|
35
|
+
def post_init
|
36
|
+
if EM::connection_count <= Telnet.conf.server.max_clients then
|
37
|
+
log "-- someone connected"
|
38
|
+
@sid = @@channel.subscribe { |data| send_data data }
|
39
|
+
log @sid
|
40
|
+
# display current screen for newly connected user
|
41
|
+
@@channel.push Telnet.vm.screen.to_terminal
|
42
|
+
else
|
43
|
+
send_data "Burn telnet server refused to establish connection, since there is no remaining connection slots. Please try later."
|
44
|
+
close_connection true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def receive_data(data)
|
49
|
+
#@@channel.push data
|
50
|
+
#puts data # only shown in server's terminal
|
51
|
+
receive = proc do
|
52
|
+
#"user=#{@sid} typed [" + data + "]"
|
53
|
+
Telnet.vm.interrupt data.ord
|
54
|
+
log "...ord=#{data.ord},#{data}"
|
55
|
+
end
|
56
|
+
Telnet.op receive
|
57
|
+
end
|
58
|
+
|
59
|
+
def unbind
|
60
|
+
log "-- someone(#{@sid}) disconnected from the server"
|
61
|
+
@@channel.unsubscribe(@sid)
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.publish(message)
|
65
|
+
@@channel.push message
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
def start
|
71
|
+
@@vm = Generator::TelnetVm.new(@fuel, @@conf)
|
72
|
+
|
73
|
+
EM::run do
|
74
|
+
EM::start_server(@@conf.server.ip_addr, @@conf.server.port, Messenger)
|
75
|
+
|
76
|
+
# view
|
77
|
+
EM::add_periodic_timer(frame_rate) do
|
78
|
+
if @@vm.screen.to_terminal != @@screen_buffer then
|
79
|
+
log "both screen and @screen_buffer is updated!"
|
80
|
+
Messenger.publish @@vm.screen.to_terminal
|
81
|
+
@@screen_buffer = @@vm.screen.to_terminal
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# controller + model
|
86
|
+
EM::add_periodic_timer(frame_rate) do
|
87
|
+
if !@@op.nil? then
|
88
|
+
callback = proc do |s|
|
89
|
+
@@op=nil
|
90
|
+
log "callback is called."
|
91
|
+
end
|
92
|
+
EM::defer(@@op, callback)
|
93
|
+
log "EM::defer is called."
|
94
|
+
end
|
95
|
+
@@vm.next_frame
|
96
|
+
end
|
97
|
+
|
98
|
+
#EM::set_quantum 10
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
|
105
|
+
def frame_rate
|
106
|
+
case @@conf.app.frame_rate
|
107
|
+
when :high then 0.03
|
108
|
+
when :normal then 0.5
|
109
|
+
when :slow then 1.0
|
110
|
+
else 0.5
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def verbose(flag)
|
115
|
+
Debug::Logger.new.enabled flag
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
data/lib/burn/util.rb
CHANGED
@@ -0,0 +1,68 @@
|
|
1
|
+
module Burn
|
2
|
+
module Util
|
3
|
+
class Logo
|
4
|
+
def initialize(version)
|
5
|
+
@version = version
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_s
|
9
|
+
# used a icon from noun project. Thanks Jenny!
|
10
|
+
# http://thenounproject.com/term/fire/24187/
|
11
|
+
<<-EOS
|
12
|
+
|
13
|
+
`.::-`
|
14
|
+
:hNMMNNds/.
|
15
|
+
:dMMMMMMNdo.
|
16
|
+
`oNMMMMMMMNh:
|
17
|
+
/NMMMMMMMMNy.
|
18
|
+
+MMMMMMMMMMm/
|
19
|
+
dMMMMMMMMMMNo
|
20
|
+
oMMMMMMMMMMMM+
|
21
|
+
+MMMMMMMMMMMMN/
|
22
|
+
sMMMMMMMMMMMMMm.
|
23
|
+
`mMMMMMMMMMMMMMMs ::`
|
24
|
+
/MMMMMMMMMMMMMMMN. `hh/`
|
25
|
+
`dMMMMMMMMMMMMMMMMo -NMd/`
|
26
|
+
sMMMMMMMMMMMMMMMMMd yMMMh-
|
27
|
+
/MMMMMMMMMMMMMMMMMMN. /MMMMN+
|
28
|
+
:NMMMMMMMMMMMMMMMMMMM- :MMMMMMo`
|
29
|
+
-mMMMMMMMMMMMMMMMMMMMM/ oMMMMMMMo
|
30
|
+
.dMMMMMMMMMMMMMMMMMMMMMo .mMMMMMMMN:
|
31
|
+
.dMMMMMMMMMMMMMMMMMMMMMMm` .dMMMMMMMMMm`
|
32
|
+
`dMMMMMMMMMMMMMMMMMMMMMMMMy.```/mMMMMMMMMMMMo
|
33
|
+
`hMMMMMMMMMMMMMMMNNNMMMMMMMMNhhmMMMMMMMMMMMMMm`
|
34
|
+
`hMMMMMMMMMMMMMMMN/`-/yNMMMMMMMMMMMMMMMMMMMMMMM:
|
35
|
+
`yMMMMMMMMMMMMMMMMMN- .hMMMMMMMMMMMMMMMMMMMMMMy
|
36
|
+
sMMMMMMMMMMMMMMMMMMMy sMMMMMMMMMMMMMMMMMMMMMd
|
37
|
+
+MMMMMMMMMMMMMMMMMMMMd `hMMMMMMMMMMMMMMMMMMMMN`
|
38
|
+
-NMMMMMMMMMMMMMMMMMMMMs .NMMMMMMMMMMMMMMMMMMMM-
|
39
|
+
`dMMMMMMMMMMMMMMMMMMMMm. sMMMMMMMMMMMMMMMMMMMM:
|
40
|
+
+MMMMMMMMMMMMMMMMMMMMN- -MMMMMMMMMMMMMMMMMMMM.
|
41
|
+
`mMMMMMMMMMMMMMMMMMMMm- NMMMN+NMMMMMMMMMMMMN
|
42
|
+
/MMMMMMMMMMMMMMMMMMMh. NMMMM--mMMMMMMMMMMMh
|
43
|
+
yMMMMMMMMMMMMMMMMMN+` .MMMMM+ -mMMMMMMMMMM+
|
44
|
+
`mMMMMMMMMMMMMMMMMh- +MMMMM: /MMMMMMMMMN.
|
45
|
+
-MMMMMMMMMMMMMMMN+` yMMMMs hMMMMMMMMy
|
46
|
+
:MMMMMMMMMMMMMMd- :hhy:` /MMMMMMMN.
|
47
|
+
.NMMMMMMMMMMMMy. `` -MMMMMMMo
|
48
|
+
dMMMMMMMMMMMs` .MMMMMMd`
|
49
|
+
+MMMMMMMMMMy` :MMMMMN-
|
50
|
+
`dMMMMMMMMN. sMMMMN/
|
51
|
+
:NMMMMMMMh `mMMMN+
|
52
|
+
+MMMMMMMs burn oMMMN+
|
53
|
+
+NMMMMMh -NMMm:
|
54
|
+
/mMMMMN- v#{@version} .dMNy.
|
55
|
+
.hNMMMh` .dNh:
|
56
|
+
`/mMMMh. -hy:`
|
57
|
+
`+mMMm/` `:+.
|
58
|
+
`/hNMd+. ``
|
59
|
+
.+hNNy/.
|
60
|
+
`-/oo:
|
61
|
+
|
62
|
+
|
63
|
+
EOS
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/lib/burn/util/os.rb
CHANGED
data/lib/burn/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: burn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-08-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: eventmachine
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
63
|
name: rake
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,34 +88,52 @@ files:
|
|
72
88
|
- LICENSE
|
73
89
|
- README.md
|
74
90
|
- bin/burn
|
75
|
-
- lib/burn/builder.rb
|
76
91
|
- lib/burn/cli.rb
|
92
|
+
- lib/burn/config/app.rb
|
93
|
+
- lib/burn/config/config_base.rb
|
94
|
+
- lib/burn/config/loader.rb
|
95
|
+
- lib/burn/config/server.rb
|
96
|
+
- lib/burn/config.rb
|
77
97
|
- lib/burn/debug.rb
|
78
|
-
- lib/burn/
|
79
|
-
- lib/burn/
|
80
|
-
- lib/burn/
|
81
|
-
- lib/burn/
|
82
|
-
- lib/burn/
|
83
|
-
- lib/burn/
|
84
|
-
- lib/burn/
|
85
|
-
- lib/burn/
|
86
|
-
- lib/burn/
|
87
|
-
- lib/burn/
|
88
|
-
- lib/burn/
|
89
|
-
- lib/burn/generator/
|
90
|
-
- lib/burn/generator/
|
91
|
-
- lib/burn/generator/
|
98
|
+
- lib/burn/fuel/dsl_base.rb
|
99
|
+
- lib/burn/fuel/rom/channel_stream.rb
|
100
|
+
- lib/burn/fuel/rom/declare.rb
|
101
|
+
- lib/burn/fuel/rom/music.rb
|
102
|
+
- lib/burn/fuel/rom/note.rb
|
103
|
+
- lib/burn/fuel/rom/scene.rb
|
104
|
+
- lib/burn/fuel/rom/sound.rb
|
105
|
+
- lib/burn/fuel/rom/sound_effect.rb
|
106
|
+
- lib/burn/fuel/telnet/declare.rb
|
107
|
+
- lib/burn/fuel/telnet/scene.rb
|
108
|
+
- lib/burn/fuel.rb
|
109
|
+
- lib/burn/generator/rom/assembly_music.rb
|
110
|
+
- lib/burn/generator/rom/assembly_sound_effect.rb
|
111
|
+
- lib/burn/generator/rom/c_source.rb
|
112
|
+
- lib/burn/generator/rom/template/mus_template.s
|
113
|
+
- lib/burn/generator/rom/template/template.c
|
114
|
+
- lib/burn/generator/rom_builder.rb
|
115
|
+
- lib/burn/generator/telnet/jit_compiler.rb
|
116
|
+
- lib/burn/generator/telnet/screen.rb
|
117
|
+
- lib/burn/generator/telnet/sprite.rb
|
118
|
+
- lib/burn/generator/telnet/user_input.rb
|
119
|
+
- lib/burn/generator/telnet_vm.rb
|
92
120
|
- lib/burn/generator.rb
|
121
|
+
- lib/burn/pxes/cc65_transpiler.rb
|
122
|
+
- lib/burn/pxes/cruby_transpiler.rb
|
123
|
+
- lib/burn/pxes/transpiler_base.rb
|
124
|
+
- lib/burn/pxes.rb
|
125
|
+
- lib/burn/server/rom.rb
|
126
|
+
- lib/burn/server/telnet.rb
|
127
|
+
- lib/burn/server.rb
|
93
128
|
- lib/burn/tools/mac.tar.gz
|
94
129
|
- lib/burn/tools/make_exec.sh
|
95
130
|
- lib/burn/tools/other.tar.gz
|
96
131
|
- lib/burn/tools/src.tar.gz
|
97
132
|
- lib/burn/tools/win.tar.gz
|
98
133
|
- lib/burn/tools/workspace_default.tar.gz
|
134
|
+
- lib/burn/util/logo.rb
|
99
135
|
- lib/burn/util/os.rb
|
100
136
|
- lib/burn/util/patternizer.rb
|
101
|
-
- lib/burn/util/pxes.rb
|
102
|
-
- lib/burn/util/server.rb
|
103
137
|
- lib/burn/util/unpack.rb
|
104
138
|
- lib/burn/util.rb
|
105
139
|
- lib/burn/version.rb
|
data/lib/burn/builder.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
module Burn
|
2
|
-
class Builder
|
3
|
-
include Dsl
|
4
|
-
include Generator
|
5
|
-
include Debug
|
6
|
-
|
7
|
-
def initialize(workspace_root)
|
8
|
-
@workspace_root = workspace_root
|
9
|
-
|
10
|
-
@game_generator = CSource.new(@workspace_root)
|
11
|
-
@music_generator = AssemblyMusic.new(@workspace_root)
|
12
|
-
@sound_effect_generator = AssemblySoundEffect.new(@workspace_root)
|
13
|
-
end
|
14
|
-
|
15
|
-
def verbose(flag)
|
16
|
-
Debug::Logger.new.enabled flag
|
17
|
-
end
|
18
|
-
|
19
|
-
def load(dsl_raw_text)
|
20
|
-
self.instance_eval dsl_raw_text
|
21
|
-
end
|
22
|
-
|
23
|
-
def generate
|
24
|
-
@game_generator.generate
|
25
|
-
@music_generator.generate
|
26
|
-
@sound_effect_generator.generate
|
27
|
-
end
|
28
|
-
|
29
|
-
def method_missing(method_symbol, *args, &block)
|
30
|
-
log :method_symbol=>method_symbol, :args=>args, :block=>block
|
31
|
-
if method_symbol == :music then
|
32
|
-
Music.new(args[0], @music_generator.get_context).instance_eval(&block)
|
33
|
-
|
34
|
-
elsif method_symbol == :scene then
|
35
|
-
# preprocess
|
36
|
-
args[0] = "main" if args[0].nil?
|
37
|
-
@game_generator.get_context.instance_exec args[0], &lambda{|resource_name|
|
38
|
-
[
|
39
|
-
"",
|
40
|
-
"//#{resource_name} label starts",
|
41
|
-
"#{resource_name}:"
|
42
|
-
].each {|p| @code_blocks.push p}
|
43
|
-
}
|
44
|
-
|
45
|
-
# execute dsls
|
46
|
-
Scene.new(args[0], @game_generator.get_context).instance_eval(&block)
|
47
|
-
|
48
|
-
# postprocess - To deal with the case of on_enter_frame not found, adding while loop at the end of program
|
49
|
-
@game_generator.get_context.instance_exec {@code_blocks.push "ppu_on_all();", "while(1);"}
|
50
|
-
|
51
|
-
elsif method_symbol == :declare then
|
52
|
-
Declare.new(args[0], @game_generator.get_context).instance_eval(&block)
|
53
|
-
|
54
|
-
elsif method_symbol == :sound then
|
55
|
-
Sound.new(args[0], @sound_effect_generator.get_context).instance_eval(&block)
|
56
|
-
|
57
|
-
# postprocess
|
58
|
-
@game_generator.get_context.instance_exec(@sound_effect_generator.resources.count-1) do |count|
|
59
|
-
@global.push "#define SFX_#{args[0].upcase} #{count.to_s}"
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|