class Rnes::PpuRegisters

Constants

STATUS_IN_V_BLANK_BIT_INDEX
STATUS_OVERFLOW_BIT_INDEX
STATUS_SPRITE_HIT_BIT_INDEX

Attributes

control[RW]

@param [Integer] @return [Integer]

mask[RW]

@param [Integer] @return [Integer]

scroll_x[R]

@return [Integer]

scroll_y[R]

@return [Integer]

sprite_ram_address[RW]

@return [Integer]

status[W]

@param [Integer]

video_ram_address[R]

@return [Integer]

Public Class Methods

new() click to toggle source
# 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

background_enabled?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 46
def background_enabled?
  @mask[3] == 1
end
background_pattern_table_address_banked?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 51
def background_pattern_table_address_banked?
  @control[4] == 1
end
base_name_table_id() click to toggle source

------------————| | 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
color_blue_emphasized?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 66
def color_blue_emphasized?
  @mask[7] == 1
end
color_green_emphasized?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 71
def color_green_emphasized?
  @mask[6] == 1
end
color_greyscaled?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 81
def color_greyscaled?
  @mask[0] == 1
end
color_red_emphasized?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 76
def color_red_emphasized?
  @mask[5] == 1
end
has_v_blank_irq_enabled_bit?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 86
def has_v_blank_irq_enabled_bit?
  @control[7] == 1
end
horizontal_increment?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 91
def horizontal_increment?
  @control[2] == 1
end
in_v_blank=(boolean) click to toggle source

@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
in_v_blank?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 96
def in_v_blank?
  @status[STATUS_IN_V_BLANK_BIT_INDEX] == 1
end
increment_video_ram_address(offset) click to toggle source

@param [Integer] offset

# File lib/rnes/ppu_registers.rb, line 106
def increment_video_ram_address(offset)
  @video_ram_address += offset
end
leftmost_background_shown?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 111
def leftmost_background_shown?
  @mask[1] == 1
end
leftmost_sprite_shown?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 116
def leftmost_sprite_shown?
  @mask[2] == 1
end
overflow=(boolean) click to toggle source

@param [Boolean] boolean

# File lib/rnes/ppu_registers.rb, line 121
def overflow=(boolean)
  toggle_status_bit(STATUS_OVERFLOW_BIT_INDEX, boolean)
end
scroll=(value) click to toggle source

@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
sprite_enabled?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 137
def sprite_enabled?
  @mask[4] == 1
end
sprite_hit=(boolean) click to toggle source

@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
sprite_hit?() click to toggle source

@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
sprite_pattern_table_address_banked?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 152
def sprite_pattern_table_address_banked?
  @control[3] == 1
end
sprite_size_doubled?() click to toggle source

@return [Boolean]

# File lib/rnes/ppu_registers.rb, line 157
def sprite_size_doubled?
  @control[4] == 1
end
status() click to toggle source

@return [Integer]

# File lib/rnes/ppu_registers.rb, line 162
def status
  value = @status
  self.in_v_blank = false
  @latch = false
  value
end
video_ram_address=(value) click to toggle source

@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

toggle_latch() click to toggle source
# File lib/rnes/ppu_registers.rb, line 181
def toggle_latch
  @latch = !@latch
end
toggle_status_bit(index, boolean) click to toggle source

@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