From 1e21177b358ccbce536e582628712a27b809d1e3 Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Mon, 26 Mar 2018 14:37:55 +0300 Subject: [PATCH] just keep binary code payload at 13 for now there is an extra in there at the last of the last, but ok --- lib/parfait/binary_code.rb | 8 ++++---- lib/risc/assembler.rb | 2 +- lib/risc/instruction.rb | 4 ++-- test/parfait/test_binary_code.rb | 16 ++++++++++------ 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/parfait/binary_code.rb b/lib/parfait/binary_code.rb index 31f7a61c..14522ed2 100644 --- a/lib/parfait/binary_code.rb +++ b/lib/parfait/binary_code.rb @@ -12,15 +12,15 @@ module Parfait def initialize(total_size) super() if total_size > self.data_length - @next = BinaryCode.new(total_size - data_length - 1) #one for the jump + @next = BinaryCode.new(total_size - data_length) #one for the jump end - #puts "Init with #{total_size} for #{object_id}" + puts "Init with #{total_size} for #{object_id}" end def to_s "BinaryCode #{}" end def data_length - 14 + 13 end def byte_length 4*data_length @@ -36,7 +36,7 @@ module Parfait set_internal_word(word_index , char) end def total_byte_length(start = 0 ) - start += 4*14 + start += self.byte_length return start unless self.next self.next.total_byte_length(start) end diff --git a/lib/risc/assembler.rb b/lib/risc/assembler.rb index 49bdc2a4..bf7e162a 100644 --- a/lib/risc/assembler.rb +++ b/lib/risc/assembler.rb @@ -160,7 +160,7 @@ module Risc binary = method.binary total_byte_length = method.cpu_instructions.total_byte_length log.debug "Assembled code #{method.name} with length #{length}" - raise "length error #{binary.char_length} != #{total_byte_length}" if binary.char_length <= total_byte_length + raise "length error #{binary.total_byte_length} != #{total_byte_length}" if binary.total_byte_length <= total_byte_length raise "length error #{length} != #{total_byte_length}" if total_byte_length != length end diff --git a/lib/risc/instruction.rb b/lib/risc/instruction.rb index e8900a25..f8ba3a9c 100644 --- a/lib/risc/instruction.rb +++ b/lib/risc/instruction.rb @@ -46,7 +46,7 @@ module Risc translator.translate( self ) end - def assemble_all io , labels = [] + def assemble_all( io , labels = [] ) self.assemble(io) self.next.assemble_all(io, labels) if self.next end @@ -55,7 +55,7 @@ module Risc raise "Abstract called on #{self}" end - def total_byte_length labels = [] + def total_byte_length( labels = []) ret = self.byte_length ret += self.next.total_byte_length(labels) if self.next #puts "#{self.class.name} return #{ret}" diff --git a/test/parfait/test_binary_code.rb b/test/parfait/test_binary_code.rb index 23bbd7bb..0d9b6e5a 100644 --- a/test/parfait/test_binary_code.rb +++ b/test/parfait/test_binary_code.rb @@ -24,10 +24,14 @@ module Parfait assert_nil @code.next end def test_data_length - assert_equal 14 , @code.data_length + assert_equal 13 , @code.data_length end def test_byte_length - assert_equal 14*4 , @code.byte_length + assert_equal 13*4 , @code.byte_length + end + def test_total_byte_length + @code = BinaryCode.new(16) + assert_equal 13*4*2 , @code.total_byte_length end def test_next_not_nil @code = BinaryCode.new(16) @@ -37,11 +41,11 @@ module Parfait def test_set_char1 assert @code.set_char(1 , 1) end - def test_set_char55 - assert @code.set_char(55 , 1) + def test_set_char51 + assert @code.set_char(51 , 1) end - def test_set_char56_raises - assert_raises {@code.set_char(56 , 1)} + def test_set_char52_raises + assert_raises {@code.set_char(52 , 1)} end def test_set_char56_double @code = BinaryCode.new(16)