class AVR::Memory

Attributes

memory[R]
name[R]
size[R]
watches[R]

Public Class Methods

new(name, size, value = 0) click to toggle source
# File lib/avr/memory.rb, line 82
def initialize(name, size, value = 0)
  @name = name
  @size = size
  @memory = T.let(
    size.times.map { |address| MemoryByte.new(self, address, value) },
    T::Array[MemoryByte]
  )
  @watches = T.let([], T::Array[WatchBinding])
end

Public Instance Methods

inspect() click to toggle source
# File lib/avr/memory.rb, line 93
def inspect
  "#<#{self.class.name} size=#{size}>"
end
load_from_intel_hex(filename) click to toggle source
# File lib/avr/memory.rb, line 153
def load_from_intel_hex(filename)
  ihex = IntelHex::FileReader.new(filename)
  sum = 0
  ihex.each_byte_with_address do |byte, address|
    T.must(memory[address]).value = byte
    sum += 1
  end
  sum
end
notify(memory_byte, old_value, new_value) click to toggle source
# File lib/avr/memory.rb, line 105
def notify(memory_byte, old_value, new_value)
  watches.each do |watch|
    if watch.include?(memory_byte.address)
      watch.watch.notify(memory_byte, old_value, new_value)
    end
  end
end
push_watch(watch, filter = nil) click to toggle source
# File lib/avr/memory.rb, line 119
def push_watch(watch, filter = nil)
  watches.push(WatchBinding.new(watch, filter))
end
reset() click to toggle source
# File lib/avr/memory.rb, line 98
def reset
  memory.each do |byte|
    byte.value = 0
  end
end
set_word(address, value) click to toggle source
# File lib/avr/memory.rb, line 146
def set_word(address, value)
  byte_address = address << 1
  T.must(memory[byte_address + 1]).value = (value & 0xff00) >> 8
  T.must(memory[byte_address]).value = value & 0x00ff
end
unshift_watch(watch, filter = nil) click to toggle source
# File lib/avr/memory.rb, line 114
def unshift_watch(watch, filter = nil)
  watches.unshift(WatchBinding.new(watch, filter))
end
watch(filter = nil, &block) click to toggle source
# File lib/avr/memory.rb, line 133
def watch(filter = nil, &block)
  watch = Watch.new(block.to_proc)
  push_watch(watch, filter.is_a?(Integer) ? [filter] : filter)
  watch
end
word(address) click to toggle source
# File lib/avr/memory.rb, line 140
def word(address)
  byte_address = address << 1
  (T.must(memory[byte_address + 1]).value << 8) | T.must(memory[byte_address]).value
end