require "vm/instruction" require_relative "constants" Vm::Instruction.class_eval do include Arm::Constants COND_POSTFIXES = Regexp.union( Arm::Constants::COND_CODES.keys.collect{|k|k.to_s} ).source def initializ(opcode , condition_code , update_status , args) @update_status_flag = update_status @condition_code = condition_code.to_sym @opcode = opcode @args = args @operand = 0 end attr_reader :opcode, :args # Many arm instructions may be conditional, where the default condition is always (al) # ArmMachine::COND_CODES names them, and this attribute reflects it attr_reader :condition_code attr_reader :operand # Logic instructions may be executed with or without affecting the status register # Only when an instruction affects the status is a subsequent compare instruction effective # But to make the conditional execution (see cond) work for more than one instruction, one needs to # be able to execute without changing the status attr_reader :update_status_flag # arm intrucioons are pretty sensible, and always 4 bytes (thumb not supported) def length 4 end end