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