GBRb 0.1.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.
@@ -0,0 +1,82 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/gbrb/graphics/mode_clock'
3
+
4
+ module GBRb::Graphics
5
+ class DummyModeClock
6
+ include ModeClock
7
+ attr_accessor :line
8
+ def initialize
9
+ reset
10
+ end
11
+ end
12
+
13
+ describe DummyModeClock do
14
+ it 'updates the internal clock' do
15
+ mc = DummyModeClock.new
16
+ initial_clock = mc.instance_eval '@clock'
17
+ mc.update! 8
18
+ mc.instance_eval('@clock').should eq initial_clock + 8
19
+ end
20
+
21
+ context 'mode transitions' do
22
+ let(:mc) { DummyModeClock.new }
23
+ it '2 -> 3' do
24
+ mc.instance_eval '@clock = 76'
25
+ mc.instance_eval '@mode = 2'
26
+ mc.update! 4
27
+ mc.mode.should eq 3
28
+ end
29
+
30
+ it '3 -> 0' do
31
+ mc.instance_eval '@clock = 168'
32
+ mc.instance_eval '@mode = 3'
33
+
34
+ mc.should_receive :render_scan_line
35
+ mc.update! 4
36
+ mc.mode.should eq 0
37
+ end
38
+
39
+ it '0 -> 1' do
40
+ mc.instance_eval '@clock = 200'
41
+ mc.instance_eval '@mode = 0'
42
+ mc.instance_eval '@line = 143'
43
+
44
+ mc.should_receive :draw_frame_buffer
45
+ mc.update! 4
46
+ mc.mode.should eq 1
47
+ mc.line.should eq 144
48
+ end
49
+
50
+ it '0 -> 2' do
51
+ mc.instance_eval '@clock = 200'
52
+ mc.instance_eval '@mode = 0'
53
+
54
+ mc.should_not_receive :draw_frame_buffer
55
+ mc.update! 4
56
+ mc.mode.should eq 2
57
+ mc.line.should eq 1
58
+ end
59
+
60
+ it '1 -> 1' do
61
+ mc.instance_eval '@clock = 452'
62
+ mc.instance_eval '@mode = 1'
63
+ mc.update! 4
64
+ mc.line.should eq 1
65
+ mc.mode.should eq 1
66
+ end
67
+
68
+ it '1 -> 2' do
69
+ mc.instance_eval '@clock = 452'
70
+ mc.instance_eval '@mode = 1'
71
+ mc.instance_eval '@line = 153'
72
+ mc.update! 4
73
+ mc.line.should eq 0
74
+ mc.mode.should eq 2
75
+ end
76
+ end
77
+
78
+ it 'can be reset' do
79
+ DummyModeClock.new.reset
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,61 @@
1
+ require_relative '../spec_helper'
2
+ require_relative '../../lib/gbrb/mmu'
3
+
4
+ module GBRb
5
+ describe MMU do
6
+ context "read" do
7
+ let(:m) { MMU.new }
8
+ it "reads bytes" do
9
+ m.instance_eval "@storage[0x84] = 0x10; @storage[0x85] = 0x32"
10
+ m.read_byte(0x84).should eq 0x10
11
+ m.read_byte(0x85).should eq 0x32
12
+ end
13
+
14
+ it "reads words" do
15
+ m.instance_eval "@storage[0x84] = 0x10; @storage[0x85] = 0x32"
16
+ m.read_word(0x84).should eq 0x3210
17
+ end
18
+
19
+ it "raises an error when accessing non-existant memory" do
20
+ expect {m.read_byte MMU::SIZE+1 }.to raise_error
21
+ end
22
+ end
23
+
24
+ context "write" do
25
+ let(:m) { MMU.new }
26
+ it "writes bytes" do
27
+ m.write_byte 0xab, 0x72
28
+ m.read_byte(0xab).should eq 0x72
29
+ end
30
+
31
+ it "writes words" do
32
+ m.write_word 0xe2, 0x5194
33
+ m.read_word(0xe2).should eq 0x5194
34
+ end
35
+ end
36
+
37
+ context "working RAM shadow" do
38
+ it "duplicates all writes to Working Ram" do
39
+ m = MMU.new
40
+ MMU::WORKING_RAM_SHADOW_LENGTH.times do |i|
41
+ value = rand 0xff
42
+ m.write_byte MMU::WORKING_RAM_ADDRESS + i, value
43
+ m.read_byte(MMU::WORKING_RAM_SHADOW_ADDRESS + i).should eq value
44
+ end
45
+ end
46
+ end
47
+
48
+ context "bios" do
49
+ let(:m) { MMU.new (0..0xff).to_a, :none}
50
+
51
+ it "is loaded on initialize" do
52
+ (0..0xff).each {|i| m.read_byte(i).should eq i}
53
+ end
54
+
55
+ it "can be unloaded" do
56
+ m.unload_bios
57
+ (0..0xff).each {|i| m.read_byte(i).should eq 0}
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,10 @@
1
+ require_relative '../spec_helper'
2
+ require_relative '../../lib/gbrb/version'
3
+
4
+ module GBRb
5
+ describe VERSION do
6
+ it "is defined" do
7
+ GBRb::VERSION
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,4 @@
1
+ if ENV['TRAVIS']
2
+ require 'coveralls'
3
+ Coveralls.wear!
4
+ end
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: GBRb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Casey Robinson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '2.14'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.14'
55
+ - !ruby/object:Gem::Dependency
56
+ name: coveralls
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.6'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '0.6'
69
+ description:
70
+ email:
71
+ - kc@rampantmonkey.com
72
+ executables:
73
+ - display
74
+ - gbrb
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - .gitignore
79
+ - .travis.yml
80
+ - Gemfile
81
+ - LICENSE.txt
82
+ - README.md
83
+ - Rakefile
84
+ - bin/display
85
+ - bin/gbrb
86
+ - doc/images/nintendo_logo.png
87
+ - gbrb.gemspec
88
+ - lib/gbrb.rb
89
+ - lib/gbrb/bios
90
+ - lib/gbrb/cartridge.rb
91
+ - lib/gbrb/cpu.rb
92
+ - lib/gbrb/cpu/concatenated_register.rb
93
+ - lib/gbrb/cpu/flags_register.rb
94
+ - lib/gbrb/cpu/instruction.rb
95
+ - lib/gbrb/cpu/register.rb
96
+ - lib/gbrb/cpu/register_ensemble.rb
97
+ - lib/gbrb/cpu/z80.rb
98
+ - lib/gbrb/gb.rb
99
+ - lib/gbrb/graphics.rb
100
+ - lib/gbrb/graphics/gpu.rb
101
+ - lib/gbrb/graphics/mode_clock.rb
102
+ - lib/gbrb/graphics/screen_client.rb
103
+ - lib/gbrb/graphics/screen_server.rb
104
+ - lib/gbrb/mmu.rb
105
+ - lib/gbrb/version.rb
106
+ - misc/parse_tiles
107
+ - perf/cpu_perf_spec.rb
108
+ - spec/gbrb/cartridge_spec.rb
109
+ - spec/gbrb/cpu/concatenated_register_spec.rb
110
+ - spec/gbrb/cpu/flags_register_spec.rb
111
+ - spec/gbrb/cpu/instruction_spec.rb
112
+ - spec/gbrb/cpu/register_ensemble_spec.rb
113
+ - spec/gbrb/cpu/register_spec.rb
114
+ - spec/gbrb/cpu/z80_spec.rb
115
+ - spec/gbrb/graphics/mode_clock_spec.rb
116
+ - spec/gbrb/mmu_spec.rb
117
+ - spec/gbrb/version_spec.rb
118
+ - spec/spec_helper.rb
119
+ homepage: http://rampantmonkey.github.io/GBRb
120
+ licenses:
121
+ - MIT
122
+ metadata: {}
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 2.0.0
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ requirements: []
138
+ rubyforge_project:
139
+ rubygems_version: 2.0.0
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: Nintendo Game Boy Emulator
143
+ test_files:
144
+ - spec/gbrb/cartridge_spec.rb
145
+ - spec/gbrb/cpu/concatenated_register_spec.rb
146
+ - spec/gbrb/cpu/flags_register_spec.rb
147
+ - spec/gbrb/cpu/instruction_spec.rb
148
+ - spec/gbrb/cpu/register_ensemble_spec.rb
149
+ - spec/gbrb/cpu/register_spec.rb
150
+ - spec/gbrb/cpu/z80_spec.rb
151
+ - spec/gbrb/graphics/mode_clock_spec.rb
152
+ - spec/gbrb/mmu_spec.rb
153
+ - spec/gbrb/version_spec.rb
154
+ - spec/spec_helper.rb