2018-05-17 08:31:36 +02:00
|
|
|
|
|
|
|
module Risc
|
|
|
|
class InterpreterPlatform
|
|
|
|
def translator
|
|
|
|
IdentityTranslator.new
|
|
|
|
end
|
|
|
|
def loaded_at
|
|
|
|
0x90
|
|
|
|
end
|
|
|
|
def padding
|
|
|
|
0x100 - loaded_at
|
|
|
|
end
|
|
|
|
end
|
|
|
|
class Instruction
|
|
|
|
def nil_next
|
|
|
|
@next = nil
|
|
|
|
end
|
|
|
|
def byte_length
|
|
|
|
4
|
|
|
|
end
|
|
|
|
def assemble(io)
|
2018-05-17 08:49:01 +02:00
|
|
|
pos = Position.get(self).at
|
|
|
|
io.write_unsigned_int_32(pos)
|
2018-05-17 08:31:36 +02:00
|
|
|
end
|
|
|
|
class Branch < Instruction
|
2018-05-17 08:49:01 +02:00
|
|
|
def first #some logging assumes arm
|
2018-05-17 08:31:36 +02:00
|
|
|
self
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
class IdentityTranslator
|
|
|
|
def translate(code)
|
2018-05-17 19:14:59 +02:00
|
|
|
#return Label.new( code.source , code.name ) if code.is_a?(Label)
|
|
|
|
if( code.is_a?(Branch))
|
|
|
|
return code.class.new(code.source , code.label.to_cpu(self))
|
|
|
|
end
|
2018-05-17 08:31:36 +02:00
|
|
|
ret = code.dup
|
|
|
|
ret.nil_next
|
|
|
|
ret
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|