Class: AVR::Memory
- Inherits:
-
Object
show all
- Extended by:
- T::Helpers, T::Sig
- Defined in:
- lib/avr/memory.rb
Defined Under Namespace
Classes: Watch, WatchBinding
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(name, size, value = 0) ⇒ Memory
Returns a new instance of Memory.
82
83
84
85
86
87
88
89
90
|
# 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
|
Instance Attribute Details
#memory ⇒ Object
Returns the value of attribute memory.
76
77
78
|
# File 'lib/avr/memory.rb', line 76
def memory
@memory
end
|
#name ⇒ Object
Returns the value of attribute name.
70
71
72
|
# File 'lib/avr/memory.rb', line 70
def name
@name
end
|
#size ⇒ Object
Returns the value of attribute size.
73
74
75
|
# File 'lib/avr/memory.rb', line 73
def size
@size
end
|
#watches ⇒ Object
Returns the value of attribute watches.
79
80
81
|
# File 'lib/avr/memory.rb', line 79
def watches
@watches
end
|
Instance Method Details
#inspect ⇒ Object
93
94
95
|
# File 'lib/avr/memory.rb', line 93
def inspect
"#<#{self.class.name} size=#{size}>"
end
|
#load_from_intel_hex(filename) ⇒ Object
153
154
155
156
157
158
159
160
161
|
# 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) ⇒ Object
105
106
107
108
109
110
111
|
# 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) ⇒ Object
119
120
121
|
# File 'lib/avr/memory.rb', line 119
def push_watch(watch, filter = nil)
watches.push(WatchBinding.new(watch, filter))
end
|
#reset ⇒ Object
98
99
100
101
102
|
# File 'lib/avr/memory.rb', line 98
def reset
memory.each do |byte|
byte.value = 0
end
end
|
#set_word(address, value) ⇒ Object
146
147
148
149
150
|
# 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) ⇒ Object
114
115
116
|
# File 'lib/avr/memory.rb', line 114
def unshift_watch(watch, filter = nil)
watches.unshift(WatchBinding.new(watch, filter))
end
|
#watch(filter = nil, &block) ⇒ Object
133
134
135
136
137
|
# 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) ⇒ Object
140
141
142
143
|
# 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
|