class AVR::RegisterFile

Attributes

registers[R]
word_register_map[R]

Public Class Methods

new(cpu) click to toggle source
# File lib/avr/register/register_file.rb, line 20
def initialize(cpu)
  @cpu = cpu
  @registers = {}
  @word_register_map = {}
  @register_list = []
end

Public Instance Methods

[](key) click to toggle source
# File lib/avr/register/register_file.rb, line 47
def [](key)
  @registers[@register_list[key]] if key.is_a?(Integer)
end
add(register) click to toggle source
# File lib/avr/register/register_file.rb, line 6
def add(register)
  @registers[register.name] = register
  @cpu.send(:define_singleton_method, register.name.to_sym, proc { register })
  @cpu.send(:define_singleton_method, (register.name.to_s + '=').to_sym, proc { |value| register.value = value })
  @register_list << register.name
  return unless register.is_a?(RegisterPair)

  @word_register_map[register.l] = register
  @word_register_map[register.h] = register
end
associated_word_register(register) click to toggle source
# File lib/avr/register/register_file.rb, line 51
def associated_word_register(register)
  @word_register_map[register]
end
fetch(key) click to toggle source
# File lib/avr/register/register_file.rb, line 43
def fetch(key)
  @registers.fetch(@register_list.fetch(key)) if key.is_a?(Integer)
end
inspect() click to toggle source
# File lib/avr/register/register_file.rb, line 55
def inspect
  "#<#{self.class.name} #{register_values}>"
end
print_status() click to toggle source
register_values() click to toggle source
# File lib/avr/register/register_file.rb, line 33
def register_values
  @register_list.map { |name| @registers[name].to_s }.join(', ')
end
reset() click to toggle source
# File lib/avr/register/register_file.rb, line 27
def reset
  @registers.each_value do |register|
    register.value = 0
  end
end