diff --git a/lib/parfait/callable_method.rb b/lib/parfait/callable_method.rb index d58d54d0..d406cf56 100644 --- a/lib/parfait/callable_method.rb +++ b/lib/parfait/callable_method.rb @@ -19,6 +19,9 @@ module Parfait end def rxf_reference_name + to_s + end + def to_s "Method: " + @name.to_s end diff --git a/lib/parfait/factory.rb b/lib/parfait/factory.rb index f70d3feb..db39aed1 100644 --- a/lib/parfait/factory.rb +++ b/lib/parfait/factory.rb @@ -119,5 +119,9 @@ module Parfait obj.set_type(type) obj end + + def to_s + "Factory:#{for_type.name}" + end end end diff --git a/lib/parfait/message.rb b/lib/parfait/message.rb index 82e94c7a..2e00df7b 100644 --- a/lib/parfait/message.rb +++ b/lib/parfait/message.rb @@ -57,7 +57,8 @@ module Parfait @method.name end def to_s - "Message:#{method_name}(#{@arguments_given})" + id = @method ? @method.name : object_id.to_s(16) + "Message:#{id}(#{@arguments_given.value})" end def _set_next_message(nekst) diff --git a/lib/parfait/word.rb b/lib/parfait/word.rb index b8ce6ee6..f9ea7e25 100644 --- a/lib/parfait/word.rb +++ b/lib/parfait/word.rb @@ -182,6 +182,10 @@ module Parfait "'" + to_s + "'" end + def to_s + "Word:#{to_string}" + end + def padded_length Object.padded( 4 * get_type().instance_length + @char_length ) end diff --git a/lib/risc/interpreter.rb b/lib/risc/interpreter.rb index 0b59cce6..c3ec5420 100644 --- a/lib/risc/interpreter.rb +++ b/lib/risc/interpreter.rb @@ -15,7 +15,7 @@ module Risc # fire events for changed pc and register contents include Util::Eventable include Util::Logging - log_level :info + log_level :debug attr_reader :instruction , :clock , :pc # current instruction and pc attr_reader :registers # the registers, 16 (a hash, sym -> contents) @@ -30,7 +30,7 @@ module Risc @flags = { :zero => false , :plus => false , :minus => false , :overflow => false } (0...InterpreterPlatform.new.num_registers).each do |reg| - set_register "r#{reg}".to_sym , "r#{reg}:unknown" + #set_register "r#{reg}".to_sym , "r#{reg}:unknown" end @linker = linker end @@ -75,7 +75,9 @@ module Risc end def set_register( reg , val ) - old = get_register( reg ) # also ensures format + reg = reg.symbol if reg.is_a? Risc::RegisterValue + log.debug "setting #{reg} == #{val}" + old = get_register( reg ) if val.is_a? ::Integer @flags[:zero] = (val == 0) @flags[:plus] = (val >= 0) @@ -86,7 +88,6 @@ module Risc @flags[:minus] = false end return if old === val - reg = reg.symbol if reg.is_a? Risc::RegisterValue val = Parfait.object_space.nil_object if val.nil? #because that's what real code has @registers[reg] = val trigger(:register_changed, reg , old , val) @@ -100,7 +101,7 @@ module Risc name = @instruction.class.name.split("::").last log.debug "#{@pc.to_s(16)}:#{@clock}: #{@instruction.to_s}" fetch = send "execute_#{name}" - log.debug register_dump + register_dump if fetch pc = @pc + @instruction.byte_length set_pc(pc) @@ -113,6 +114,7 @@ module Risc # Instruction interpretation starts here def execute_DynamicJump method = get_register(@instruction.register) + log.debug "Register at: #{@instruction.register} , has #{method.class}" pos = Position.get(method.binary) log.debug "Jump to binary at: #{pos} #{method.name}:#{method.binary.class}" raise "Invalid position for #{method.name}" unless pos.valid? @@ -287,6 +289,8 @@ module Risc result = result.to_i end log.debug "#{@instruction} == #{result}(#{result.class}) (#{left}|#{right})" + # overwrites + left right = set_register(@instruction.left , result) true end @@ -336,6 +340,13 @@ module Risc end def register_dump + @registers.keys.sort.each do |reg| + value = @registers[reg] + log.debug "#{reg}:#{value.to_s[0..50]}" + end + end + + def old_register_dump (0..7).collect do |reg| value = @registers["r#{reg}".to_sym] "#{reg}-" +