/* instruction printing */
TYPE
struct optab
*OPTAB
;
0107777, 0010000, DOUBLE
, "mov",
0107777, 0020000, DOUBLE
, "cmp",
0107777, 0030000, DOUBLE
, "bit",
0107777, 0040000, DOUBLE
, "bic",
0107777, 0050000, DOUBLE
, "bis",
0007777, 0060000, DOUBLE
, "add",
0007777, 0160000, DOUBLE
, "su",
0100077, 0005000, SINGLE
, "clr",
0100077, 0005100, SINGLE
, "com",
0100077, 0005200, SINGLE
, "inc",
0100077, 0005300, SINGLE
, "dec",
0100077, 0005400, SINGLE
, "neg",
0100077, 0005500, SINGLE
, "adc",
0100077, 0005600, SINGLE
, "sbc",
0100077, 0005700, SINGLE
, "tst",
0100077, 0006000, SINGLE
, "ror",
0100077, 0006100, SINGLE
, "rol",
0100077, 0006200, SINGLE
, "asr",
0100077, 0006300, SINGLE
, "asl",
0000077, 0000100, JMP
, "jmp",
0000077, 0000300, SINGLE
, "swab",
0000077, 0170100, SINGLW
, "ldfps",
0000077, 0170200, SINGLW
, "stfps",
0000077, 0170300, SINGLW
, "stst",
0000077, 0170400, SINGLW
, "clrf",
0000077, 0170500, SINGLW
, "tstf",
0000077, 0170600, SINGLW
, "absf",
0000077, 0170700, SINGLW
, "negf",
0000077, 0006700, SINGLW
, "sxt",
0000077, 0006600, SINGLW
, "mtpi",
0000077, 0106600, SINGLW
, "mtpd",
0000077, 0006500, SINGLW
, "mfpi",
0000077, 0106500, SINGLW
, "mfpd",
0000777, 0070000, REVERS
, "mul",
0000777, 0071000, REVERS
, "div",
0000777, 0072000, REVERS
, "ash",
0000777, 0073000, REVERS
, "ashc",
LOBYTE
, 0000400, BRANCH
, "br",
LOBYTE
, 0001000, BRANCH
, "bne",
LOBYTE
, 0001400, BRANCH
, "beq",
LOBYTE
, 0002000, BRANCH
, "bge",
LOBYTE
, 0002400, BRANCH
, "blt",
LOBYTE
, 0003000, BRANCH
, "bgt",
LOBYTE
, 0003400, BRANCH
, "ble",
LOBYTE
, 0100000, BRANCH
, "bpl",
LOBYTE
, 0100400, BRANCH
, "bmi",
LOBYTE
, 0101000, BRANCH
, "bhi",
LOBYTE
, 0101400, BRANCH
, "blos",
LOBYTE
, 0102000, BRANCH
, "bvc",
LOBYTE
, 0102400, BRANCH
, "bvs",
LOBYTE
, 0103000, BRANCH
, "bcc",
LOBYTE
, 0103400, BRANCH
, "bcs",
0000000, 0000000, NOADDR
, "halt",
0000000, 0000001, NOADDR
, "wait",
0000000, 0000002, NOADDR
, "rti",
0000000, 0000003, NOADDR
, "bpt",
0000000, 0000004, NOADDR
, "iot",
0000000, 0000005, NOADDR
, "reset",
LOBYTE
, 0171000, REVERS
, "mulf",
LOBYTE
, 0171400, REVERS
, "modf",
LOBYTE
, 0172000, REVERS
, "addf",
LOBYTE
, 0172400, REVERS
, "movf",
LOBYTE
, 0173000, REVERS
, "subf",
LOBYTE
, 0173400, REVERS
, "cmpf",
LOBYTE
, 0174000, DOUBLW
, "movf",
LOBYTE
, 0174400, REVERS
, "divf",
LOBYTE
, 0175000, DOUBLW
, "movei",
LOBYTE
, 0175400, DOUBLW
, "movfi",
LOBYTE
, 0176000, DOUBLW
, "movfo",
LOBYTE
, 0176400, REVERS
, "movie",
LOBYTE
, 0177000, REVERS
, "movif",
LOBYTE
, 0177400, REVERS
, "movof",
0000000, 0170000, NOADDR
, "cfcc",
0000000, 0170001, NOADDR
, "setf",
0000000, 0170002, NOADDR
, "seti",
0000000, 0170011, NOADDR
, "setd",
0000000, 0170012, NOADDR
, "setl",
0000777, 0004000, JSR
, "jsr",
0000777, 0074000, DOUBLE
, "xor",
0000007, 0000200, SINGLE
, "rts",
0000017, 0000240, DFAULT
, "cflg",
0000017, 0000260, DFAULT
, "sflg",
LOBYTE
, 0104000, TRAP
, "emt",
LOBYTE
, 0104400, SYS
, "sys",
0000077, 0006400, TRAP
, "mark",
0000777, 0077000, SOB
, "sob",
0000007, 0000230, TRAP
, "spl",
0177777, 0000000, DFAULT
, "",
#define SYSTAB struct systab
STRING regname
[] { "r0", "r1", "r2", "r3", "r4", "r5", "sp", "pc"};
type
=DSYM
; space
=idsp
; incp
=2;
DO
IF (ins
& ~p
->mask
) == p
->val
prints(p
->iname
); byte
=ins
&0100000; ins
&= p
->mask
;
IF byte THEN
printc('b'); FI
doubl(ins
&077,(ins
>>6)&07);
IF byte THEN
printc('b'); FI
paddr("%8t",(ins
>>6)&07);
printf("%8t%s", systab
[ins
&= 077].sname
);
IF ins
==0 ANDF f
==0 ANDF idsp
!=NSP
/* indir */
THEN w
=dot
; dot
=chkget(inkdot(2),idsp
);
THEN errflg
=0; printc('?');
ELSE
printins(1,DSP
,indir
);
ELSE w
= systab
[ins
].argc
;
psymoff(leng(get(inkdot(incp
),idsp
)), NSYM
, "");
paddr("%8t",a
); paddr(",",b
);
IF ins
&0200 THEN ins
|= 0177400; FI
ins
= shorten(dot
) + (ins
<<1) + 2;
psymoff(leng(ins
),ISYM
,"");
THEN IF a
&010 THEN
printc('*'); FI
ELSE var
[1]=chkget(inkdot(incp
),space
) + shorten(inkdot(incp
+2));
psymoff(var
[1],(a
&010?DSYM
:type
),"");
ELSE var
[1]=chkget(inkdot(incp
), space
);
psymoff(var
[1], (a
&010?type
:NSYM
), "");
ELSE var
[1]=chkget(inkdot(incp
), space
);
psymoff(var
[1], (a
==070?type
:NSYM
), "");