burn 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/README.md +56 -569
  2. data/lib/burn.rb +5 -3
  3. data/lib/burn/cli.rb +160 -199
  4. data/lib/burn/config.rb +4 -0
  5. data/lib/burn/config/app.rb +15 -0
  6. data/lib/burn/config/config_base.rb +16 -0
  7. data/lib/burn/config/loader.rb +23 -0
  8. data/lib/burn/config/server.rb +11 -0
  9. data/lib/burn/fuel.rb +11 -0
  10. data/lib/burn/{dsl → fuel}/dsl_base.rb +1 -1
  11. data/lib/burn/fuel/rom/channel_stream.rb +106 -0
  12. data/lib/burn/fuel/rom/declare.rb +43 -0
  13. data/lib/burn/fuel/rom/music.rb +37 -0
  14. data/lib/burn/fuel/rom/note.rb +126 -0
  15. data/lib/burn/fuel/rom/scene.rb +279 -0
  16. data/lib/burn/fuel/rom/sound.rb +31 -0
  17. data/lib/burn/fuel/rom/sound_effect.rb +92 -0
  18. data/lib/burn/fuel/telnet/declare.rb +26 -0
  19. data/lib/burn/fuel/telnet/scene.rb +112 -0
  20. data/lib/burn/generator.rb +10 -3
  21. data/lib/burn/generator/rom/assembly_music.rb +49 -0
  22. data/lib/burn/generator/rom/assembly_sound_effect.rb +35 -0
  23. data/lib/burn/generator/rom/c_source.rb +55 -0
  24. data/lib/burn/generator/{template → rom/template}/mus_template.s +0 -0
  25. data/lib/burn/generator/{template → rom/template}/template.c +0 -0
  26. data/lib/burn/generator/rom_builder.rb +67 -0
  27. data/lib/burn/generator/telnet/jit_compiler.rb +41 -0
  28. data/lib/burn/generator/telnet/screen.rb +86 -0
  29. data/lib/burn/generator/telnet/sprite.rb +16 -0
  30. data/lib/burn/generator/telnet/user_input.rb +25 -0
  31. data/lib/burn/generator/telnet_vm.rb +50 -0
  32. data/lib/burn/pxes.rb +3 -0
  33. data/lib/burn/{util/pxes.rb → pxes/cc65_transpiler.rb} +8 -14
  34. data/lib/burn/pxes/cruby_transpiler.rb +189 -0
  35. data/lib/burn/pxes/transpiler_base.rb +14 -0
  36. data/lib/burn/server.rb +2 -0
  37. data/lib/burn/server/rom.rb +24 -0
  38. data/lib/burn/server/telnet.rb +120 -0
  39. data/lib/burn/util.rb +1 -2
  40. data/lib/burn/util/logo.rb +68 -0
  41. data/lib/burn/util/os.rb +1 -1
  42. data/lib/burn/version.rb +1 -1
  43. metadata +53 -19
  44. data/lib/burn/builder.rb +0 -65
  45. data/lib/burn/dsl.rb +0 -8
  46. data/lib/burn/dsl/channel_stream.rb +0 -105
  47. data/lib/burn/dsl/declare.rb +0 -42
  48. data/lib/burn/dsl/music.rb +0 -36
  49. data/lib/burn/dsl/note.rb +0 -125
  50. data/lib/burn/dsl/scene.rb +0 -278
  51. data/lib/burn/dsl/sound.rb +0 -30
  52. data/lib/burn/dsl/sound_effect.rb +0 -91
  53. data/lib/burn/generator/assembly_music.rb +0 -47
  54. data/lib/burn/generator/assembly_sound_effect.rb +0 -33
  55. data/lib/burn/generator/c_source.rb +0 -54
  56. data/lib/burn/util/server.rb +0 -21
@@ -0,0 +1,14 @@
1
+ module Burn
2
+ module Pxes
3
+ class TranspilerBase
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
+ end
13
+ end
14
+ end
@@ -0,0 +1,2 @@
1
+ require 'burn/server/rom'
2
+ require 'burn/server/telnet'
@@ -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
@@ -1,5 +1,4 @@
1
+ require 'burn/util/logo'
1
2
  require 'burn/util/os'
2
3
  require 'burn/util/patternizer'
3
- require 'burn/util/server'
4
- require 'burn/util/pxes'
5
4
  require 'burn/util/unpack'
@@ -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
@@ -23,7 +23,7 @@ module Burn
23
23
  false
24
24
  end
25
25
 
26
- def os_name
26
+ def name
27
27
  if is_win? then
28
28
  "win"
29
29
  elsif is_mac? then
data/lib/burn/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Burn
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.3
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-04-03 00:00:00.000000000 Z
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/dsl/channel_stream.rb
79
- - lib/burn/dsl/declare.rb
80
- - lib/burn/dsl/dsl_base.rb
81
- - lib/burn/dsl/music.rb
82
- - lib/burn/dsl/note.rb
83
- - lib/burn/dsl/scene.rb
84
- - lib/burn/dsl/sound.rb
85
- - lib/burn/dsl/sound_effect.rb
86
- - lib/burn/dsl.rb
87
- - lib/burn/generator/assembly_music.rb
88
- - lib/burn/generator/assembly_sound_effect.rb
89
- - lib/burn/generator/c_source.rb
90
- - lib/burn/generator/template/mus_template.s
91
- - lib/burn/generator/template/template.c
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
data/lib/burn/dsl.rb DELETED
@@ -1,8 +0,0 @@
1
- require 'burn/dsl/sound_effect'
2
- require 'burn/dsl/note'
3
- require 'burn/dsl/channel_stream'
4
- require 'burn/dsl/dsl_base'
5
- require 'burn/dsl/declare'
6
- require 'burn/dsl/sound'
7
- require 'burn/dsl/music'
8
- require 'burn/dsl/scene'