21.1.09

Quick'n'Dirty


#!/usr/bin/ruby

DC = "x"

REGS = {
"PTR" => 0,
"TS" => 1,
"CN" => 2,
"SF" => 3,
"ACCU" => 4,
"PC" => 5,
"MDR" => 6,
"IR" => 7,
"MAR" => 8
}

ALU_OPS = {
"ADD" => "0,0,0",
"SUB" => "0,0,1",
"TRANS.A" => "0,1,0",
"TRANS.B" => "0,1,1",
"AND" => "1,0,0",
"SHIFTR.B" => "1,0,1"
}

ALU_SEL_A_INPUTS = {
"CONST_0" => "0,0,0",
"CONST_1" => "0,0,1",
"ACCU" => "0,1,0",
"TS" => "0,1,1",
"CONST_6553" => "1,0,0",
"CONST_15" => "1,0,1",
"CONST_14" => "1,1,0"
}

ALU_SEL_B_INPUTS = {
"MDR" => "0,0,0",
"PC" => "0,0,1",
"SIGNEXT" => "0,1,0",
"ACCU" => "0,1,1",
"PTR" => "1,0,0",
"CN" => "1,0,1",
"SF" => "1,1,0"
}

class Steuerzeile
attr_accessor :aluSelA, :aluSelB, :cs, :rw, :aluCtrl, :regs, :cond, :comment, :mdrSel

def initialize
@aluSelA = "x,x,x"; @aluSelB = "x,x,x"
@cs = "0"; @rw = DC
@mdrSel = DC
@aluCtrl = "x,x,x"

@regs = ["0", "0", "0", "0", "0", "0", "0", "0", "0"]

@cond = DC; @gotoOp = "0"; @comment = ""
end

def aluOp(opStr)
@aluCtrl = ALU_OPS[opStr]
end

def aluAIn(inputStr)
@aluSelA = ALU_SEL_A_INPUTS[inputStr]
end

def aluBIn(inputStr)
@aluSelB = ALU_SEL_B_INPUTS[inputStr]
end

def setReg(regStr)
@regs[REGS[regStr]] = "1"
end

def to_s
outStr = "," + @aluSelA + "," + @aluSelB + "," + @mdrSel + "," + @cs + "," + @rw + "," + @aluCtrl + ","
@regs.each {|v| outStr += (v + ",")}
outStr += (@gotoOp + "," + @cond + "," + @comment)
outStr
end

end

def mkz(comment)
s = Steuerzeile.new
s.comment = comment
s
end

def p(zeile)
puts zeile
end

0 Comments:

Post a Comment

Archive