class RPicSim::CompositeMemory

This class wraps two or more memory objects and provides an interface that is also like {RPicSim::Memory}. Any reads or writes from the composite memory will go to the first component memory for which the address is valid.

@api private

Public Class Methods

new(memories) click to toggle source

Creates a new instance. The memory objects given must support the following methods:

  • read_byte

  • write_byte

  • read_word

  • write_word

  • valid_address?

@param memories [Array]

# File lib/rpicsim/composite_memory.rb, line 20
def initialize(memories)
  @memories = memories
end

Public Instance Methods

read_byte(address) click to toggle source
# File lib/rpicsim/composite_memory.rb, line 24
def read_byte(address)
  memory(address).read_byte(address)
end
read_word(address) click to toggle source
# File lib/rpicsim/composite_memory.rb, line 32
def read_word(address)
  memory(address).read_word(address)
end
valid_address?(address) click to toggle source
# File lib/rpicsim/composite_memory.rb, line 40
def valid_address?(address)
  !find_memory(address).nil?
end
write_byte(address, value) click to toggle source
# File lib/rpicsim/composite_memory.rb, line 28
def write_byte(address, value)
  memory(address).write_byte(address, value)
end
write_word(address, value) click to toggle source
# File lib/rpicsim/composite_memory.rb, line 36
def write_word(address, value)
  memory(address).write_word(address, value)
end

Private Instance Methods

find_memory(address) click to toggle source
# File lib/rpicsim/composite_memory.rb, line 46
def find_memory(address)
  @memories.find do |memory|
    memory.valid_address?(address)
  end
end
memory(address) click to toggle source
# File lib/rpicsim/composite_memory.rb, line 52
def memory(address)
  find_memory(address) or raise 'Invalid memory address %#x.' % address
end