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.
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'