Class: Haxor::Vm::Mem
Instance Attribute Summary
Attributes inherited from Subsystem
Instance Method Summary collapse
-
#add_label(name, addr) ⇒ Object
Adds label.
- #enlarge(bytes) ⇒ Object
-
#initialize(bytes) ⇒ Mem
constructor
attr_accessor :memory.
-
#read(addr) ⇒ Integer
Reads word from memory.
- #replace_region(addr, data) ⇒ Object
- #size ⇒ Object
-
#write(addr, value) ⇒ Object
Writes word to memory.
- #write_string(addr, value) ⇒ Object
Methods inherited from Subsystem
Constructor Details
#initialize(bytes) ⇒ Mem
attr_accessor :memory
6 7 8 9 |
# File 'lib/haxor/vm/mem.rb', line 6 def initialize(bytes) @memory = Array.new(bytes, 0).pack('C*') @labels = {} end |
Instance Method Details
#add_label(name, addr) ⇒ Object
Adds label
23 24 25 26 |
# File 'lib/haxor/vm/mem.rb', line 23 def add_label(name, addr) fail if @labels.key? name @labels[name] = addr end |
#enlarge(bytes) ⇒ Object
15 16 17 |
# File 'lib/haxor/vm/mem.rb', line 15 def enlarge(bytes) replace_region size, Array.new(bytes, 0).pack('C*') end |
#read(addr) ⇒ Integer
Reads word from memory
32 33 34 |
# File 'lib/haxor/vm/mem.rb', line 32 def read(addr) @memory[resolve addr].unpack(Consts::WORD_UNPACK)[0] end |
#replace_region(addr, data) ⇒ Object
54 55 56 57 |
# File 'lib/haxor/vm/mem.rb', line 54 def replace_region(addr, data) x = addr + data.size @memory[addr...x] = data end |
#size ⇒ Object
11 12 13 |
# File 'lib/haxor/vm/mem.rb', line 11 def size @memory.size end |
#write(addr, value) ⇒ Object
Writes word to memory
40 41 42 |
# File 'lib/haxor/vm/mem.rb', line 40 def write(addr, value) @memory[resolve addr] = [value].pack(Consts::WORD_UNPACK) end |
#write_string(addr, value) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/haxor/vm/mem.rb', line 44 def write_string(addr, value) i = 0 value.each_char do |x| write addr + i, x.ord i += Consts::WORD_SIZE end write addr + i, 0 end |