module Risc
  # Little glue class to get the assembled binary from the Arm Instructions into
  # the BinaryCode instances. Arm code originally uses io, but slightly modified
  # really only uses write_unsigned_int_32 , which converts
  # to an set_internal_word on the BinaryCode
  #
  # Machine instantiates and the writer reads from the arm Instructions
  # and writes to the BinaryCode
  class BinaryWriter
    def initialize( code )
      @code = code
    end

    # Go through and assemble all instructions.
    def assemble( instruction )
      @index = 0
      while(instruction)
        instruction.assemble(self)
        instruction = instruction.next
      end
    end

    def write_unsigned_int_32( bin )
      @code.set_word( @index , bin )
      @index += 1
    end
  end

  #even less glue to get that last jump in there.
  # So instructions don't run into the BinaryCode object header
  class JumpWriter
    def initialize( code )
      @code = code
    end
    def write_unsigned_int_32( bin )
      @code.set_last( bin )
    end
  end
end