class Rnes::PpuBus

Attributes

character_ram[R]

@return [Rnes::Ram]

Public Class Methods

new(character_ram:, video_ram:) click to toggle source

@param [Rnes::Ram] character_ram @param [Rnes::Ram] video_ram

# File lib/rnes/ppu_bus.rb, line 10
def initialize(character_ram:, video_ram:)
  @character_ram = character_ram
  @video_ram = video_ram
end

Public Instance Methods

read(address) click to toggle source

@param [Integer] address @return [Integer]

# File lib/rnes/ppu_bus.rb, line 17
def read(address)
  case address
  when 0x0000..0x1FFF
    @character_ram.read(address)
  when 0x2000..0x27FF
    @video_ram.read(address - 0x2000)
  when 0x2800..0x2FFF
    read(address - 0x0800)
  when 0x3000..0x3EFF
    read(address - 0x1000)
  when 0x3F04, 0x3F08, 0x3F0C
    read(0x3F00)
  when 0x3F10, 0x3F14, 0x3F18, 0x3F1C
    read(address - 0x0010)
  when 0x3F00..0x3F1F
    @video_ram.read(address - 0x2000)
  when 0x3F20..0x3FFF
    read(address - 0x0020)
  when 0x4000..0xFFFF
    read(address - 0x4000)
  else
    raise ::Rnes::Errors::InvalidPpuBusAddressError, address
  end
end
write(address, value) click to toggle source

@param [Integer] address @param [Integer] value

# File lib/rnes/ppu_bus.rb, line 44
def write(address, value)
  case address
  when 0x0000..0x1FFF
    @character_ram.write(address, value)
  when 0x2000..0x27FF
    @video_ram.write(address - 0x2000, value)
  when 0x2800..0x2FFF
    write(address - 0x0800, value)
  when 0x3000..0x3EFF
    write(address - 0x1000, value)
  when 0x3F10, 0x3F14, 0x3F18, 0x3F1C
    write(address - 0x0010, value)
  when 0x3F00..0x3F1F
    @video_ram.write(address - 0x2000, value)
  when 0x3F00..0x3FFF
    write(address - 0x0020, value)
  when 0x4000..0xFFFF
    write(address - 0x4000, value)
  else
    raise ::Rnes::Errors::InvalidPpuBusAddressError, address
  end
end