class Rnes::PpuRegisters
Constants
- STATUS_IN_V_BLANK_BIT_INDEX
- STATUS_OVERFLOW_BIT_INDEX
- STATUS_SPRITE_HIT_BIT_INDEX
Attributes
@param [Integer] @return [Integer]
@param [Integer] @return [Integer]
@return [Integer]
@return [Integer]
@return [Integer]
@param [Integer]
@return [Integer]
Public Class Methods
# File lib/rnes/ppu_registers.rb, line 30 def initialize @control = 0x0 @mask = 0x0 @status = 0x0 @scroll_x = 0x0 @scroll_y = 0x0 @sprite_ram_address = 0x00 @video_ram_address = 0x0000 @buffer = 0x00 @latch = false end
Public Instance Methods
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 46 def background_enabled? @mask[3] == 1 end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 51 def background_pattern_table_address_banked? @control[4] == 1 end
------------
————| | 0 (0x2000) | 1 (0x2400) | ------------
————| | 2 (0x2800) | 3 (0x2C00) | ------------
————| @return [Integer] An integer from 0 to 3.
# File lib/rnes/ppu_registers.rb, line 61 def base_name_table_id @control & 0b11 end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 66 def color_blue_emphasized? @mask[7] == 1 end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 71 def color_green_emphasized? @mask[6] == 1 end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 81 def color_greyscaled? @mask[0] == 1 end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 76 def color_red_emphasized? @mask[5] == 1 end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 86 def has_v_blank_irq_enabled_bit? @control[7] == 1 end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 91 def horizontal_increment? @control[2] == 1 end
@param [Boolean] boolean
# File lib/rnes/ppu_registers.rb, line 101 def in_v_blank=(boolean) toggle_status_bit(STATUS_IN_V_BLANK_BIT_INDEX, boolean) end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 96 def in_v_blank? @status[STATUS_IN_V_BLANK_BIT_INDEX] == 1 end
@param [Integer] offset
# File lib/rnes/ppu_registers.rb, line 106 def increment_video_ram_address(offset) @video_ram_address += offset end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 111 def leftmost_background_shown? @mask[1] == 1 end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 116 def leftmost_sprite_shown? @mask[2] == 1 end
@param [Boolean] boolean
# File lib/rnes/ppu_registers.rb, line 121 def overflow=(boolean) toggle_status_bit(STATUS_OVERFLOW_BIT_INDEX, boolean) end
@param [Integer] value
# File lib/rnes/ppu_registers.rb, line 126 def scroll=(value) if @latch @scroll_x = @buffer @scroll_y = value else @buffer = value end toggle_latch end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 137 def sprite_enabled? @mask[4] == 1 end
@param [Boolean] boolean
# File lib/rnes/ppu_registers.rb, line 147 def sprite_hit=(boolean) toggle_status_bit(STATUS_SPRITE_HIT_BIT_INDEX, boolean) end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 142 def sprite_hit? @status[STATUS_SPRITE_HIT_BIT_INDEX] == STATUS_SPRITE_HIT_BIT_INDEX end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 152 def sprite_pattern_table_address_banked? @control[3] == 1 end
@return [Boolean]
# File lib/rnes/ppu_registers.rb, line 157 def sprite_size_doubled? @control[4] == 1 end
@return [Integer]
# File lib/rnes/ppu_registers.rb, line 162 def status value = @status self.in_v_blank = false @latch = false value end
@param [Integer] value
# File lib/rnes/ppu_registers.rb, line 170 def video_ram_address=(value) if @latch @video_ram_address = value + (@buffer << 8) else @buffer = value end toggle_latch end
Private Instance Methods
# File lib/rnes/ppu_registers.rb, line 181 def toggle_latch @latch = !@latch end
@param [Integer] index @param [Boolean] boolean
# File lib/rnes/ppu_registers.rb, line 187 def toggle_status_bit(index, boolean) if boolean @status |= 1 << index else @status &= ~(1 << index) end end