OpenCores
URL https://opencores.org/ocsvn/tinycpu/tinycpu/trunk

Subversion Repositories tinycpu

[/] [tinycpu/] [trunk/] [assembler/] [asm.rb] - Diff between revs 36 and 37

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 36 Rev 37
Line 17... Line 17...
    end
    end
  end
  end
end
end
 
 
 
 
 
 
class Register8
class Register8
  attr_accessor :number
  attr_accessor :number
  def initialize(num)
  def initialize(num)
        @number=num
        @number=num
  end
  end
end
end
 
 
$iftr = 0; #0 for no condition, 1 for if TR, 2 for if not TR
$iftr = 0; #0 for no condition, 1 for if TR, 2 for if not TR
 
$useextra = 0;
 
 
def mov_r8_imm8(reg,imm)
def mov_r8_imm8(reg,imm)
  o = OpcodeByte1.new();
  o = OpcodeByte1.new();
  o.op = 0;
  o.op = 0;
  o.register=reg;
  o.register=reg;
Line 38... Line 40...
    raise "if_tr_notset is not allowed with this opcode";
    raise "if_tr_notset is not allowed with this opcode";
  end
  end
  puts PREFIX + o.to_hex + imm.to_s(16) + SUFFIX;
  puts PREFIX + o.to_hex + imm.to_s(16) + SUFFIX;
  puts SEPERATOR;
  puts SEPERATOR;
end
end
 
def mov_rm8_imm8(reg,imm)
 
  o=OpcodeByte1.new();
 
  o.op=1;
 
  o.register=reg;
 
  if $iftr<2 then
 
    o.cond=$iftr;
 
  else
 
    raise "if_tr_notset is not allowed with this opcode";
 
  end
 
  puts PREFIX + o.to_hex + imm.to_s(16) + SUFFIX;
 
  puts SEPERATOR;
 
end
 
 
 
 
def mov(arg1,arg2)
def mov(arg1,arg2)
  if arg1.kind_of? Register8 and arg2.kind_of? Integer and arg2<0x100 then mov_r8_imm8 arg1,arg2 end
  if arg1.kind_of? Register8 and arg2.kind_of? Integer and arg2<0x100 then
 
    mov_r8_imm8 arg1,arg2
 
  elsif arg1.kind_of? Array and arg2.kind_of? Integer and arg2<0x100 then
 
    if arg1.length>1 or arg1.length<1 then
 
      raise "memory reference is not correct. Only a register is allowed";
 
    end
 
    reg=arg1[0];
 
    mov_rm8_imm8 reg, arg2
 
  else
 
    raise "No suitable mov opcode found";
 
  end
 
 
end
end
def if_tr_set
def if_tr_set
  $iftr = 1
  $iftr = 1
  yield
  yield
  $iftr = 0
  $iftr = 0
Line 59... Line 85...
#test code follows. Only do it here for convenience.. real usage should prefix assembly files with `require "asm.rb"`
#test code follows. Only do it here for convenience.. real usage should prefix assembly files with `require "asm.rb"`
if_tr_set{
if_tr_set{
  mov r1,0x10
  mov r1,0x10
}
}
mov r1,0x20
mov r1,0x20
 No newline at end of file
 No newline at end of file
 
mov [r1], 0x50
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.