2015-11-19 09:07:27 +01:00
|
|
|
module Register
|
|
|
|
|
|
|
|
# GetByte moves a single byte into a register from memory.
|
|
|
|
|
|
|
|
# indexes are 1 based (as for slots) , which means we sacrifice a byte of every word
|
|
|
|
# for our sanity
|
|
|
|
|
2016-12-11 13:12:35 +01:00
|
|
|
class GetByte < Getter
|
2015-11-19 09:07:27 +01:00
|
|
|
|
|
|
|
# If you had a c array (of int8) and index offset
|
|
|
|
# the instruction would do register = array[index]
|
|
|
|
# The arguments are in the order that makes sense for the Instruction name
|
|
|
|
# So GetSlot means the slot (array and index) moves to the register (last argument)
|
2016-12-11 13:12:35 +01:00
|
|
|
# def initialize source , array , index , register
|
|
|
|
# super
|
|
|
|
# end
|
|
|
|
# attr_accessor :array , :index , :register
|
2015-11-19 09:07:27 +01:00
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
# Produce a GetByte instruction.
|
|
|
|
# from and to are translated (from symbol to register if neccessary)
|
|
|
|
# but index is left as is.
|
2016-12-11 11:18:11 +01:00
|
|
|
# def self.get_byte source , array , index , to
|
|
|
|
# from = resolve_to_register from
|
|
|
|
# to = resolve_to_register to
|
|
|
|
# GetByte.new( source , array , index , to)
|
|
|
|
# end
|
2015-11-19 09:07:27 +01:00
|
|
|
end
|