diff --git a/lib/arm/instructions/move_instruction.rb b/lib/arm/instructions/move_instruction.rb index fe8869e5..fdf68314 100644 --- a/lib/arm/instructions/move_instruction.rb +++ b/lib/arm/instructions/move_instruction.rb @@ -4,8 +4,8 @@ module Arm def initialize to , from , options = {} super(options) - @to = to @from = from + @to = to raise "move must have from set #{inspect}" unless from @attributes[:update_status] = 0 if @attributes[:update_status] == nil @attributes[:condition_code] = :al if @attributes[:condition_code] == nil diff --git a/lib/parfait/list.rb b/lib/parfait/list.rb index cdda6644..6f177582 100644 --- a/lib/parfait/list.rb +++ b/lib/parfait/list.rb @@ -148,6 +148,15 @@ module Parfait self.object_id == other.object_id end + # word length (padded) is the amount of space taken by the object + # For your basic object this means the number of instance variables as determined by layout + # This is off course 0 for a list, unless someone squeezed an instance variable in + # but additionally, the amount of data comes on top. + # unfortuntely we can't just use super because of the Padding + def word_length + padded_words( get_layout().get_length() + get_length() ) + end + #many basic List functions can not be defined in ruby, such as # get/set/length/add/delete # so they must be defined as CompiledMethods in Builtin::Kernel diff --git a/lib/register/assembler.rb b/lib/register/assembler.rb index 46afdeb6..c81ab2ed 100644 --- a/lib/register/assembler.rb +++ b/lib/register/assembler.rb @@ -30,7 +30,7 @@ module Register end #need the initial jump at 0 and then functions @machine.init.set_position(0) - at = @machine.init.byte_length + at = 0x20 # @machine.init.byte_length # then we make sure we really get the binary codes first @machine.objects.each do |objekt| @@ -71,6 +71,7 @@ module Register @machine.init.codes.each do |code| code.assemble( @stream ) end + pad_after @machine.init.byte_length - 8 # no header (8) # then write the methods to file @machine.objects.each do |objekt| @@ -119,7 +120,7 @@ module Register end def write_any obj - #puts "Assemble #{obj.class}(#{obj.object_id.to_s(16)}) at stream #{@stream.length.to_s(16)} pos:#{obj.position.to_s(16)} , len:#{obj.word_length.to_s(16)}" + puts "Assemble #{obj.class}(#{obj.object_id.to_s(16)}) at stream #{@stream.length.to_s(16)} pos:#{obj.position.to_s(16)} , len:#{obj.word_length.to_s(16)}" if @stream.length != obj.position raise "Assemble #{obj.class} #{obj.object_id.to_s(16)} at #{@stream.length.to_s(16)} not #{obj.position.to_s(16)}" end @@ -160,7 +161,7 @@ module Register puts "Nil for #{object.class}.#{var}" unless inst write_ref_for(inst) end - #puts "layout length=#{layout.get_length.to_s(16)} mem_len=#{layout.word_length.to_s(16)}" + puts "layout length=#{layout.get_length.to_s(16)} mem_len=#{layout.word_length.to_s(16)}" l = layout.get_length if( object.is_a? Parfait::List) object.each do |inst| @@ -216,7 +217,7 @@ module Register @stream.write_uint8(0) end after = @stream.length.to_s(16) - #puts "padded #{length.to_s(16)} with #{pad.to_s(16)} stream #{before}/#{after}" + puts "padded #{length.to_s(16)} with #{pad.to_s(16)} stream #{before}/#{after}" end end diff --git a/lib/virtual/parfait_adapter.rb b/lib/virtual/parfait_adapter.rb index 99a19535..96aa50d5 100644 --- a/lib/virtual/parfait_adapter.rb +++ b/lib/virtual/parfait_adapter.rb @@ -137,9 +137,6 @@ module Parfait end end class List - def word_length - padded_words(get_length()) - end def to_sof_node(writer , level , ref ) Sof.array_to_sof_node(self , writer , level , ref ) end