rnes 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +19 -0
- data/Gemfile.lock +1 -1
- data/lib/rnes/cpu.rb +10 -4
- data/lib/rnes/ppu.rb +23 -22
- data/lib/rnes/ppu_bus.rb +2 -0
- data/lib/rnes/terminal_renderer.rb +1 -1
- data/lib/rnes/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf2afd8224c221333be85c60dddbdf47a355ca99
|
4
|
+
data.tar.gz: e8ff4cd2fe43280b24f9132a132eea289813f9bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e19a94ab96f907994766631a5c9143998eb12e3b697c6ba9e728c2369dbd9d87838cc33f7b83d783b36215d52b5efacee20f6f473e9d5c25d5d0410279fb95c
|
7
|
+
data.tar.gz: 3bc697a23906996906f7a3ba7f697547a1280544105597aac986969687d29ea2c5166c962080dd62ab92aeee49669b31d96368ac34e5b2857eba16cf80c09a04
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,24 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
|
+
|
1
8
|
## Unreleased
|
2
9
|
|
10
|
+
## 0.2.1 - 2018-11-24
|
11
|
+
|
12
|
+
### Added
|
13
|
+
|
14
|
+
- Decrease terminal renderer brightness threshold for better visibility.
|
15
|
+
|
16
|
+
### Fixed
|
17
|
+
|
18
|
+
- Fix PPU unnecessary vertical offset on rendering sprites.
|
19
|
+
- Fix PPU background unused palette address redirection.
|
20
|
+
- Fix PPU sprite rendering about transparent color.
|
21
|
+
|
3
22
|
## 0.2.0 - 2018-11-17
|
4
23
|
|
5
24
|
### Added
|
data/Gemfile.lock
CHANGED
data/lib/rnes/cpu.rb
CHANGED
@@ -5,6 +5,12 @@ require 'rnes/operation'
|
|
5
5
|
|
6
6
|
module Rnes
|
7
7
|
class Cpu
|
8
|
+
INTERRUPTION_VECTOR_FOR_IRQ_OR_BRK = 0xFFFE
|
9
|
+
|
10
|
+
INTERRUPTION_VECTOR_FOR_NMI = 0xFFFA
|
11
|
+
|
12
|
+
INTERRUPTION_VECTOR_FOR_RESET = 0xFFFC
|
13
|
+
|
8
14
|
# @return [Rnes::CpuBus] bus
|
9
15
|
attr_reader :bus
|
10
16
|
|
@@ -31,7 +37,7 @@ module Rnes
|
|
31
37
|
|
32
38
|
def reset
|
33
39
|
@registers.reset
|
34
|
-
@registers.program_counter = read_word(
|
40
|
+
@registers.program_counter = read_word(INTERRUPTION_VECTOR_FOR_RESET)
|
35
41
|
end
|
36
42
|
|
37
43
|
# @return [Integer]
|
@@ -369,7 +375,7 @@ module Rnes
|
|
369
375
|
push(@registers.status)
|
370
376
|
unless @registers.interrupt?
|
371
377
|
@registers.interrupt = true
|
372
|
-
@registers.program_counter = read_word(
|
378
|
+
@registers.program_counter = read_word(INTERRUPTION_VECTOR_FOR_IRQ_OR_BRK)
|
373
379
|
end
|
374
380
|
@registers.program_counter -= 1
|
375
381
|
end
|
@@ -1011,7 +1017,7 @@ module Rnes
|
|
1011
1017
|
push_word(@registers.program_counter)
|
1012
1018
|
push(@registers.status)
|
1013
1019
|
@registers.interrupt = true
|
1014
|
-
@registers.program_counter = read_word(
|
1020
|
+
@registers.program_counter = read_word(INTERRUPTION_VECTOR_FOR_IRQ_OR_BRK)
|
1015
1021
|
end
|
1016
1022
|
|
1017
1023
|
def handle_nmi
|
@@ -1020,7 +1026,7 @@ module Rnes
|
|
1020
1026
|
push_word(@registers.program_counter)
|
1021
1027
|
push(@registers.status)
|
1022
1028
|
@registers.interrupt = true
|
1023
|
-
@registers.program_counter = read_word(
|
1029
|
+
@registers.program_counter = read_word(INTERRUPTION_VECTOR_FOR_NMI)
|
1024
1030
|
end
|
1025
1031
|
|
1026
1032
|
# @return [Integer]
|
data/lib/rnes/ppu.rb
CHANGED
@@ -202,13 +202,6 @@ module Rnes
|
|
202
202
|
(x_of_block.even? ? 0 : 1) + (y_of_block.even? ? 0 : 2)
|
203
203
|
end
|
204
204
|
|
205
|
-
# @return [Integer] Integer from 0 to 63.
|
206
|
-
def object_attribute_index
|
207
|
-
(y_of_encoded_attributes % ENCODED_ATTRIBUTES_COUNT_IN_VERTICAL_LINE) * ENCODED_ATTRIBUTES_COUNT_IN_HORIZONTAL_LINE +
|
208
|
-
x_of_encoded_attributes % ENCODED_ATTRIBUTES_COUNT_IN_HORIZONTAL_LINE +
|
209
|
-
background_pattern_index_paging_offset
|
210
|
-
end
|
211
|
-
|
212
205
|
def check_sprite_hit
|
213
206
|
if read_from_sprite_ram(0) == y && @registers.background_enabled? && @registers.sprite_enabled?
|
214
207
|
registers.sprite_hit = true
|
@@ -233,12 +226,12 @@ module Rnes
|
|
233
226
|
pattern_line_low_byte = read_background_pattern_line(pattern_line_low_byte_address)
|
234
227
|
pattern_line_high_byte = read_background_pattern_line(pattern_line_low_byte_address + TILE_HEIGHT)
|
235
228
|
|
236
|
-
|
237
|
-
|
229
|
+
palette_ids_byte = read_object_attribute(object_attribute_index)
|
230
|
+
palette_id = (palette_ids_byte >> (block_id_in_encoded_attributes * 2)) & 0b11
|
238
231
|
|
239
232
|
TILE_WIDTH.times do |x_in_pattern|
|
240
233
|
index_in_pattern_line_byte = TILE_WIDTH - 1 - x_in_pattern
|
241
|
-
background_palette_index = pattern_line_low_byte[index_in_pattern_line_byte] | (pattern_line_high_byte[index_in_pattern_line_byte] << 1) | (
|
234
|
+
background_palette_index = pattern_line_low_byte[index_in_pattern_line_byte] | (pattern_line_high_byte[index_in_pattern_line_byte] << 1) | (palette_id << 2)
|
242
235
|
color_id = read_color_id(background_palette_index)
|
243
236
|
@image.write(
|
244
237
|
value: ::Rnes::Ppu::COLORS[color_id],
|
@@ -263,13 +256,12 @@ module Rnes
|
|
263
256
|
# `-------- vertical flip
|
264
257
|
def draw_sprites
|
265
258
|
0.step(SPRITES_COUNT - 1, 4) do |base_sprite_ram_address|
|
266
|
-
y_for_sprite =
|
267
|
-
next if y_for_sprite.negative?
|
259
|
+
y_for_sprite = read_from_sprite_ram(base_sprite_ram_address)
|
268
260
|
pattern_index = read_from_sprite_ram(base_sprite_ram_address + 1)
|
269
261
|
sprite_attribute_byte = read_from_sprite_ram(base_sprite_ram_address + 2)
|
270
262
|
x_for_sprite = read_from_sprite_ram(base_sprite_ram_address + 3)
|
271
263
|
|
272
|
-
|
264
|
+
palette_id = sprite_attribute_byte & 0b11
|
273
265
|
reversed_horizontally = sprite_attribute_byte[6] == 1
|
274
266
|
reversed_vertically = sprite_attribute_byte[7] == 1
|
275
267
|
|
@@ -279,20 +271,29 @@ module Rnes
|
|
279
271
|
pattern_line_high_byte = read_sprite_pattern_line(pattern_line_low_byte_address + TILE_HEIGHT)
|
280
272
|
TILE_WIDTH.times do |x_in_pattern|
|
281
273
|
index_in_pattern_line_byte = TILE_WIDTH - 1 - x_in_pattern
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
274
|
+
sprite_palette_index = pattern_line_low_byte[index_in_pattern_line_byte] | (pattern_line_high_byte[index_in_pattern_line_byte] << 1) | (palette_id << 2)
|
275
|
+
if sprite_palette_index % 4 != 0
|
276
|
+
color_id = read_color_id(sprite_palette_index)
|
277
|
+
y_in_pattern = TILE_HEIGHT - 1 - y_in_pattern if reversed_vertically
|
278
|
+
x_in_pattern = TILE_WIDTH - 1 - x_in_pattern if reversed_horizontally
|
279
|
+
@image.write(
|
280
|
+
value: ::Rnes::Ppu::COLORS[color_id],
|
281
|
+
x: x_for_sprite + x_in_pattern,
|
282
|
+
y: y_for_sprite + y_in_pattern,
|
283
|
+
)
|
284
|
+
end
|
291
285
|
end
|
292
286
|
end
|
293
287
|
end
|
294
288
|
end
|
295
289
|
|
290
|
+
# @return [Integer] Integer from 0 to 63.
|
291
|
+
def object_attribute_index
|
292
|
+
(y_of_encoded_attributes % ENCODED_ATTRIBUTES_COUNT_IN_VERTICAL_LINE) * ENCODED_ATTRIBUTES_COUNT_IN_HORIZONTAL_LINE +
|
293
|
+
x_of_encoded_attributes % ENCODED_ATTRIBUTES_COUNT_IN_HORIZONTAL_LINE +
|
294
|
+
background_pattern_index_paging_offset
|
295
|
+
end
|
296
|
+
|
296
297
|
# @return [Boolean]
|
297
298
|
def on_bottom_end_line?
|
298
299
|
line == WINDOW_HEIGHT + V_BLANK_HEIGHT
|
data/lib/rnes/ppu_bus.rb
CHANGED
data/lib/rnes/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rnes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|