Opcodes of PDP-11 family as data type(OP_PDP11.rfi):
Class: Machine OpCodes representation, Status: Complete, Last change: 29.05.2000 17:43:54
type
TWOpCode forward
TOpPDP forward
POpSeq ^TOpSeq near=word
type bit
TBit num+(1)
TBit2 num+(2)
TBit3 num+(3)
TBit4 num+(4)
TBit6 num+(6)
TBit8 num+(8)
TBit8s num-(8)
TJmpOfs ^TOpSeq near=TBit8s, REF=(&((@:@ as TWOpCode):@ as TOpPDP)
+(@+1)*2)and 0xFFFF;:displ=(HEX((&((@:@ as TWOpCode):@ as TOpPDP)+
(@+1)*2)and 0xFFFF,4),'{',@,'}')
TSOBOfs ^TOpSeq near=TBit6, REF=(&((@:@ as TWOpCode):@ as TOpPDP)
+2-@*2)and 0xFFFF;:displ=(HEX((&((@:@ as TWOpCode):@ as TOpPDP)+
2-@*2)and 0xFFFF,4),'{',@,'}')
TReg enum TBit3 (R0,R1,R2,R3,R4,R5,SP,PC)
TAddrMode enum TBit2 (reg,autoinc,autodec,index)
TAddr6 struc pas
R: TReg
Ind: TBit //Indirect mode
Md: TAddrMode
ends
TCondCode set 4 of (C,V,Z,N)
TUnOp1 enum TBit3 (clr,com,inc,dec,neg,adc,sbc,tst)
TUnOp2 enum TBit2 (ror,rol,asr,asl)
//TMOp enum TBit3 (?,mov,cmp,bit,bic,bis,?,?)
TFOp enum TBit2 (fadd,fsub,fmul,fdiv)
TBit16 num+(16)
type
TWOpCode enum TBit16 /*word*/ fields (
R0: TReg @0.3,
R: TReg @6.3,
CC: TCondCode @0.4,
D: TAddr6 @0.6,
S: TAddr6 @6.6,
X: TJmpOfs @0.8,
Y: TSOBOfs @0.6,
N: TBit6 @0.6,
INo: TBit8 @0.8,
Fa: TUnOp1 @6.3,
Fr: TUnOp2 @6.2,
// Fm: TMOp @12.3,
Ff: TFOp @3.2,
B: TBit @15.1
) of (
halt = 0000000,
wait = 0000001,
rti = 0000002,
bpt = 0000003,
iot = 0000004,
reset = 0000005,
rtt = 0000006,
mfpt = 0000007,
jmp(D) = 00001__,
rts(R0) = 000020_,
nop = 0000240,
clf(CC) = 0000240, //Condition codes
stf(CC) = 0000260,
swab(D) = 00003__,
br(X) = 0000400,
bne(X) = 0001000,
beq(X) = 0001400,
bge(X) = 0002000,
blt(X) = 0002400,
bgt(X) = 0003000,
ble(X) = 0003400,
bpl(X) = 0100000,
bmi(X) = 0100400,
bhi(X) = 0101000,
blos(X) = 0101400,
bvc(X) = 0102000,
bvs(X) = 0102400,
bcc(X) = 0103000, //bhis
bcs(X) = 0103400, //blo
jsr(R,D) = 0004___,
emt(INo) = 0104000,
trap(INo) = 0104400,
_AR(Fa,B,D) = 0005000,
_ROT(Fr,B,D) = 0006000,
mark(N) = 00064__,
stx(D) = 00067__,
mtps(D) = 01064__,
mfps(D) = 01067__,
mul(R,D) = 0070___,
div(R,D) = 0071___,
ash(R,N) = 0072___,
ashc(R,N) = 0073___,
xor(R,D) = 0074___,
_F(Ff,R0) = 0075000,
sob(R,Y) = 0077___,
mov(B,S,D) = 0_1____,
cmp(B,S,D) = 0_2____,
bit(B,S,D) = 0_3____,
bic(B,S,D) = 0_4____,
bis(B,S,D) = 0_5____,
add(S,D) = 006____,
sub(S,D) = 016____
// _M(Fm,B,S,D) = 0000000
)
TOperandData(R,Md) case @:R of
TReg.PC: case @:Md of
TAddrMode.index: word
TAddrMode.autoinc: word
//TAddrMode.autodec: -word
endc
else case @:Md of
TAddrMode.index: word
endc
endc:displ=(',',@)
PPOpSeq ^POpSeq near=word
POpSeqRel ^TOpSeq near=word, REF=(&@+@)and 0xFFFF; :displ=(HEX((&@+@)and 0xFFFF,4));
PPOpSeqRel ^TOpSeq near=word, REF=(&@+@)and 0xFFFF; :displ=(HEX((&@+@)and 0xFFFF,4));
TJmpOperandData(R,Md,Ind) case @:R of
TReg.PC: case @:Md of
TAddrMode.index: case @@:Ind of
0: POpSeqRel
else PPOpSeqRel
endc
TAddrMode.autoinc: case @@:Ind of
0: POpSeq
else PPOpSeq
endc
//TAddrMode.autodec: -word
endc
else case @:Md of
TAddrMode.index: word
endc
endc
TOpPDP struc pas
Op: TWOpCode
Dat: case @.Op of
jmp,jsr: struc pas
D: TJmpOperandData(@@@.Op.D.R exc -1,@@@.Op.D.Md exc -1,
@@@.Op.D.Ind exc -1)
ends: displ=(' ',@.D)
swab,_AR,_ROT,stx,mtps,mfps,mul,div,xor: struc pas
D: TOperandData(@@@.Op.D.R exc -1,@@@.Op.D.Md exc -1)
ends: displ=(@.D)
mov,cmp,bit,bic,bis,add,sub: struc pas
S: TOperandData(@@@.Op.S.R exc -1,@@@.Op.S.Md exc -1)
D: TOperandData(@@@.Op.D.R exc -1,@@@.Op.D.Md exc -1)
ends: displ=(@.S,@.D)
endc
ends: displ=(@.Op,@.Dat)
TOpSeq codes of TOpPDP ?(@.Op>=TWOpCode.br)and(@.Op<TWOpCode.br+256)
or(@.Op>=TWOpCode.jmp)and(@.Op<TWOpCode.jmp+64)
or(@.Op>=TWOpCode.rts)and(@.Op<TWOpCode.rts+8)
or(@.Op>=TWOpCode.rts)and(@.Op<TWOpCode.rts+8)
or(@.Op>=TWOpCode.mark)and(@.Op<TWOpCode.mark+64)
or(@.Op=TWOpCode.rti)or(@.Op=TWOpCode.rtt)
or(@.Op=TWOpCode.halt); : displ=('(',
ShowArray(@,(NL,HEX(&@ /*-&@:@*/ ,4),': ',@)),NL,')')
Other specifications.
FlexT home page,
Author`s home page.