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

Subversion Repositories tinycpu

[/] [tinycpu/] [trunk/] [assembler/] [asm.rb] - Blame information for rev 36

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 36 earlz
PREFIX = "MemIn <= x\"";
2
SUFFIX = "\";";
3
SEPERATOR = "\n";
4
 
5
 
6
 
7
class OpcodeByte1
8
  attr_accessor :op, :register, :cond;
9
  def to_hex
10
    s = (op << 4 | register.number << 1 | cond).to_s(16);
11
    if s.length == 1
12
      "0"+s;
13
    elsif s.length == 0
14
      "00";
15
    else
16
      s
17
    end
18
  end
19
end
20
 
21
 
22 35 earlz
class Register8
23
  attr_accessor :number
24
  def initialize(num)
25
        @number=num
26
  end
27
end
28
 
29 36 earlz
$iftr = 0; #0 for no condition, 1 for if TR, 2 for if not TR
30
 
31 35 earlz
def mov_r8_imm8(reg,imm)
32 36 earlz
  o = OpcodeByte1.new();
33
  o.op = 0;
34
  o.register=reg;
35
  if $iftr<2 then
36
    o.cond=$iftr;
37
  else
38
    raise "if_tr_notset is not allowed with this opcode";
39
  end
40
  puts PREFIX + o.to_hex + imm.to_s(16) + SUFFIX;
41
  puts SEPERATOR;
42 35 earlz
end
43
 
44
def mov(arg1,arg2)
45
  if arg1.kind_of? Register8 and arg2.kind_of? Integer and arg2<0x100 then mov_r8_imm8 arg1,arg2 end
46
end
47 36 earlz
def if_tr_set
48
  $iftr = 1
49
  yield
50
  $iftr = 0
51
end
52 35 earlz
 
53
 
54 36 earlz
r0=Register8.new(0)
55
r1=Register8.new(1)
56
r2=Register8.new(2)
57
r3=Register8.new(3)
58
 
59
#test code follows. Only do it here for convenience.. real usage should prefix assembly files with `require "asm.rb"`
60
if_tr_set{
61
  mov r1,0x10
62
}
63
mov r1,0x20

powered by: WebSVN 2.1.0

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