Class: AVR::RegisterFile

Inherits:
Object
  • Object
show all
Defined in:
lib/avr/register/register_file.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cpu) ⇒ RegisterFile

Returns a new instance of RegisterFile.



20
21
22
23
24
25
# File 'lib/avr/register/register_file.rb', line 20

def initialize(cpu)
  @cpu = cpu
  @registers = {}
  @word_register_map = {}
  @register_list = []
end

Instance Attribute Details

#registersObject (readonly)

Returns the value of attribute registers.



17
18
19
# File 'lib/avr/register/register_file.rb', line 17

def registers
  @registers
end

#word_register_mapObject (readonly)

Returns the value of attribute word_register_map.



18
19
20
# File 'lib/avr/register/register_file.rb', line 18

def word_register_map
  @word_register_map
end

Instance Method Details

#[](key) ⇒ Object



47
48
49
# File 'lib/avr/register/register_file.rb', line 47

def [](key)
  @registers[@register_list[key]] if key.is_a?(Integer)
end

#add(register) ⇒ Object



6
7
8
9
10
11
12
13
14
15
# 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) ⇒ Object



51
52
53
# File 'lib/avr/register/register_file.rb', line 51

def associated_word_register(register)
  @word_register_map[register]
end

#fetch(key) ⇒ Object



43
44
45
# File 'lib/avr/register/register_file.rb', line 43

def fetch(key)
  @registers.fetch(@register_list.fetch(key)) if key.is_a?(Integer)
end

#inspectObject



55
56
57
# File 'lib/avr/register/register_file.rb', line 55

def inspect
  "#<#{self.class.name} #{register_values}>"
end


37
38
39
40
41
# File 'lib/avr/register/register_file.rb', line 37

def print_status
  @register_list.each_slice(8) do |slice|
    puts slice.map { |name| '%10s' % ["#{name}=#{@registers[name].value_hex}"] }.join + '\n'
  end
end

#register_valuesObject



33
34
35
# File 'lib/avr/register/register_file.rb', line 33

def register_values
  @register_list.map { |name| @registers[name].to_s }.join(', ')
end

#resetObject



27
28
29
30
31
# File 'lib/avr/register/register_file.rb', line 27

def reset
  @registers.each_value do |register|
    register.value = 0
  end
end