Annotation of researchv10no/cmd/adb/seq/das.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * print an instruction
                      3:  */
                      4: 
                      5: #include "defs.h"
                      6: 
                      7: typedef        unsigned char uchar;
                      8: typedef        unsigned short ushort;
                      9: typedef        unsigned long ulong;
                     10: static ADDR    p;
                     11: static int     isp;
                     12: long   ddisp();
                     13: 
                     14: #define        IHEX    0       /* give up */
                     15: #define        IDISP   1       /* 1 displacement op */
                     16: #define        IFF     2       /* float, float */
                     17: #define        IIF     3       /* int, float */
                     18: #define        IFI     4       /* float, int */
                     19: #define        III     5       /* int, int */
                     20: #define        III3    6       /* int, int; 3 byte instr */
                     21: #define        II      7       /* int */
                     22: #define        IMD     8       /* enter: reg mask, disp */
                     23: #define        IN      9       /* exit, restore: rev reg mask */
                     24: #define        IQI     10      /* quick, int */
                     25: #define        IIID3   11      /* int, int, disp; 3 byte instr */
                     26: #define        INONE   12      /* no operands */
                     27: #define        IDPC    13      /* pc-relative displacement */
                     28: #define        II3     14      /* int; 3 byte */
                     29: #define        IRII    15      /* reg, int, int */
                     30: #define        IRIID   16      /* reg, int, int, disp */
                     31: #define        IM      17      /* reg mask (save) */
                     32: #define        IDMOD   18      /* disp which is really a module number */
                     33: #define        INONE3  19      /* 3-byte no-operand (string stuff) */
                     34: #define        II3X    20      /* 3 byte 1 operand sort of (sfsr) */
                     35: #define        IMR     21      /* mem mgt instructions */
                     36: #define        IPR     22      /* preg instructions */
                     37: #define        ICFG    23      /* setcfg */
                     38: 
                     39: static
                     40: struct
                     41: {
                     42:        uchar   f;
                     43:        ushort  m;
                     44:        ushort  v;
                     45:        char    *s;
                     46: } t[] = {
                     47: /* begin */
                     48:        III3, 0x3fff, 0x304e, "absb",
                     49:        III3, 0x3fff, 0x334e, "absd",
                     50:        IFF, 0x3fff, 0x35be, "absf",
                     51:        IFF, 0x3fff, 0x34be, "absl",
                     52:        III3, 0x3fff, 0x314e, "absw",
                     53:        IQI, 0x3f, 0x4c, "acbb",
                     54:        IQI, 0x3f, 0x4d, "acbw",
                     55:        IQI, 0x3f, 0x4f, "acbd",
                     56:        III, 0x3f, 0x00, "addb",
                     57:        III, 0x3f, 0x01, "addw",
                     58:        III, 0x3f, 0x03, "addd",
                     59:        III, 0x3f, 0x10, "addcb",
                     60:        III, 0x3f, 0x13, "addcd",
                     61:        III, 0x3f, 0x11, "addcw",
                     62:        IFF, 0x3fff, 0x01be, "addf",
                     63:        IFF, 0x3fff, 0x00be, "addl",
                     64:        III3, 0x3fff, 0x3c4e, "addpb",
                     65:        III3, 0x3fff, 0x3f4e, "addpd",
                     66:        III3, 0x3fff, 0x3d4e, "addpw",
                     67:        IQI, 0x3f, 0x0c, "addqb",
                     68:        IQI, 0x3f, 0x0d, "addqw",
                     69:        IQI, 0x3f, 0x0f, "addqd",
                     70:        III, 0x3f, 0x24, "addrb",
                     71:        III, 0x3f, 0x27, "addrd",
                     72:        III, 0x3f, 0x25, "addrw",
                     73:        II, 0x7ff, 0x57c, "adjspb",
                     74:        II, 0x7ff, 0x57f, "adjspd",
                     75:        II, 0x7ff, 0x57d, "adjspw",
                     76:        III, 0x3f, 0x28, "andb",
                     77:        III, 0x3f, 0x2b, "andd",
                     78:        III, 0x3f, 0x29, "andw",
                     79:        III3, 0x3fff, 0x044e, "ashb",
                     80:        III3, 0x3fff, 0x074e, "ashd",
                     81:        III3, 0x3fff, 0x054e, "ashw",
                     82:        IDPC, 0xff, 0x3a, "bcc",
                     83:        IDPC, 0xff, 0x2a, "bcs",
                     84:        IDPC, 0xff, 0x0a, "beq",
                     85:        IDPC, 0xff, 0x1a, "bne",
                     86:        IDPC, 0xff, 0x9a, "bfc",
                     87:        IDPC, 0xff, 0x8a, "bfs",
                     88:        IDPC, 0xff, 0xda, "bge",
                     89:        IDPC, 0xff, 0x6a, "bgt",
                     90:        IDPC, 0xff, 0x4a, "bhi",
                     91:        IDPC, 0xff, 0xba, "bhs",
                     92:        IDPC, 0xff, 0x5a, "bls",
                     93:        IDPC, 0xff, 0x7a, "ble",
                     94:        IDPC, 0xff, 0xaa, "blo",
                     95:        IDPC, 0xff, 0xca, "blt",
                     96:        III, 0x3f, 0x08, "bicb",
                     97:        III, 0x3f, 0x09, "bicw",
                     98:        III, 0x3f, 0x0b, "bicd",
                     99:        II, 0x3ff, 0x17c, "bicpsrb",
                    100:        II, 0x3ff, 0x17d, "bicpsrw",
                    101:        II, 0x3ff, 0x37c, "bispsrb",
                    102:        II, 0x3ff, 0x37d, "bispsrw",
                    103:        INONE, 0xff, 0xf2, "bpt",
                    104:        IDPC, 0xff, 0xea, "br",
                    105:        IDPC, 0xff, 0x02, "bsr",
                    106:        II, 0x7ff, 0x77c, "caseb",
                    107:        II, 0x7ff, 0x77d, "casew",
                    108:        II, 0x7ff, 0x77f, "cased",
                    109:        III3, 0x3fff, 0x084e, "cbitb",
                    110:        III3, 0x3fff, 0x0b4e, "cbitd",
                    111:        III3, 0x3fff, 0x0c4e, "cbitib",
                    112:        III3, 0x3fff, 0x0f4e, "cbitid",
                    113:        III3, 0x3fff, 0x0d4e, "cbitiw",
                    114:        III3, 0x3fff, 0x094e, "cbitw",
                    115:        IRII, 0x7ff, 0x0ee, "checkb",
                    116:        IRII, 0x7ff, 0x1ee, "checkw",
                    117:        IRII, 0x7ff, 0x3ee, "checkd",
                    118:        III, 0x3f, 0x04, "cmpb",
                    119:        III, 0x3f, 0x05, "cmpw",
                    120:        III, 0x3f, 0x07, "cmpd",
                    121:        IFF, 0x3fff, 0x09be, "cmpf",
                    122:        IFF, 0x3fff, 0x08be, "cmpl",
                    123:        IIID3, 0x3fff, 0x04ce, "cmpmb",
                    124:        IIID3, 0x3fff, 0x05ce, "cmpmw",
                    125:        IIID3, 0x3fff, 0x07ce, "cmpmd",
                    126:        IQI, 0x7f, 0x1c, "cmpqb",
                    127:        IQI, 0x7f, 0x1d, "cmpqw",
                    128:        IQI, 0x7f, 0x1f, "cmpqd",
                    129:        INONE3, 0xffffff, 0x00040e, "cmpsb",
                    130:        INONE3, 0xffffff, 0x00050e, "cmpsw",
                    131:        INONE3, 0xffffff, 0x00070e, "cmpsd",
                    132:        INONE3, 0xffffff, 0x00840e, "cmpst",
                    133:        INONE3, 0xffffff, 0x01040e, "cmpsbb",
                    134:        INONE3, 0xffffff, 0x01050e, "cmpswb",
                    135:        INONE3, 0xffffff, 0x01070e, "cmpsdb",
                    136:        INONE3, 0xffffff, 0x01840e, "cmpstb",
                    137:        INONE3, 0xffffff, 0x02040e, "cmpsbw",
                    138:        INONE3, 0xffffff, 0x02050e, "cmpsww",
                    139:        INONE3, 0xffffff, 0x02070e, "cmpsdw",
                    140:        INONE3, 0xffffff, 0x02840e, "cmpstw",
                    141:        INONE3, 0xffffff, 0x03040e, "cmpsbbw",
                    142:        INONE3, 0xffffff, 0x03050e, "cmpswbw",
                    143:        INONE3, 0xffffff, 0x03070e, "cmpsdbw",
                    144:        INONE3, 0xffffff, 0x03840e, "cmpstbw",
                    145:        INONE3, 0xffffff, 0x06040e, "cmpsbu",
                    146:        INONE3, 0xffffff, 0x06050e, "cmpswu",
                    147:        INONE3, 0xffffff, 0x06070e, "cmpsdu",
                    148:        INONE3, 0xffffff, 0x06840e, "cmpstu",
                    149:        INONE3, 0xffffff, 0x07040e, "cmpsbbu",
                    150:        INONE3, 0xffffff, 0x07050e, "cmpswbu",
                    151:        INONE3, 0xffffff, 0x07070e, "cmpsdbu",
                    152:        INONE3, 0xffffff, 0x07840e, "cmpstbu",
                    153:        III3, 0x3fff, 0x344e, "comb",
                    154:        III3, 0x3fff, 0x374e, "comd",
                    155:        III3, 0x3fff, 0x354e, "comw",
                    156:        IRII, 0x7ff, 0x36e, "cvtp",
                    157:        IDMOD, 0xff, 0x22, "cxp",
                    158:        II, 0x3ff, 0x07f, "cxpd",
                    159:        III3, 0x3fff, 0x2cce, "deib",
                    160:        III3, 0x3fff, 0x2dce, "deiw",
                    161:        III3, 0x3fff, 0x2dce, "deid",
                    162:        INONE, 0xff, 0xc2, "dia",
                    163:        III3, 0x3fff, 0x3cce, "divb",
                    164:        III3, 0x3fff, 0x3fce, "divd",
                    165:        IFF, 0x3fff, 0x21be, "divf",
                    166:        IFF, 0x3fff, 0x20be, "divl",
                    167:        III3, 0x3fff, 0x3dce, "divw",
                    168:        IMD, 0xff, 0x82, "enter",
                    169:        IN, 0xff, 0x92, "exit",
                    170:        IRIID, 0x7ff, 0x02e, "extb",
                    171:        IRIID, 0x7ff, 0x12e, "extw",
                    172:        IRIID, 0x7ff, 0x32e, "extd",
                    173:        III3, 0x3fff, 0x0cce, "extsb",
                    174:        III3, 0x3fff, 0x0dce, "extsw",
                    175:        III3, 0x3fff, 0x0fce, "extsd",
                    176:        III3, 0x3fff, 0x046e, "ffsb",
                    177:        III3, 0x3fff, 0x056e, "ffsw",
                    178:        III3, 0x3fff, 0x076e, "ffsd",
                    179:        INONE, 0xff, 0xd2, "flag",
                    180:        IFI, 0x3fff, 0x3c3e, "floorfb",
                    181:        IFI, 0x3fff, 0x3f3e, "floorfd",
                    182:        IFI, 0x3fff, 0x3d3e, "floorfw",
                    183:        IFI, 0x3fff, 0x383e, "floorlb",
                    184:        IFI, 0x3fff, 0x3b3e, "floorld",
                    185:        IFI, 0x3fff, 0x393e, "floorlw",
                    186:        III3, 0x3fff, 0x384e, "ibitb",
                    187:        III3, 0x3fff, 0x3b4e, "ibitd",
                    188:        III3, 0x3fff, 0x394e, "ibitw",
                    189:        IRII, 0x7ff, 0x42e, "indexb",
                    190:        IRII, 0x7ff, 0x52e, "indexw",
                    191:        IRII, 0x7ff, 0x72e, "indexd",
                    192:        IRIID, 0x7ff, 0x0ae, "insb",
                    193:        IRIID, 0x7ff, 0x1ae, "insw",
                    194:        IRIID, 0x7ff, 0x3ae, "insd",
                    195:        III3, 0x3fff, 0x08ce, "inssb",
                    196:        III3, 0x3fff, 0x09ce, "inssw",
                    197:        III3, 0x3fff, 0x0bce, "inssd",
                    198:        II, 0x7ff, 0x67f, "jsr",
                    199:        II, 0x3ff, 0x27f, "jump",
                    200:        II3, 0x7ffff, 0x00f3e, "lfsr",
                    201:        IMR, 0x7fff, 0x0b1e, "lmr",
                    202:        IPR, 0x7f, 0x6c, "lprb",
                    203:        IPR, 0x7f, 0x6d, "lprw",
                    204:        IPR, 0x7f, 0x6f, "lprd",
                    205:        III3, 0x3fff, 0x144e, "lshb",
                    206:        III3, 0x3fff, 0x174e, "lshd",
                    207:        III3, 0x3fff, 0x154e, "lshw",
                    208:        III3, 0x3ff, 0x24ce, "meib",
                    209:        III3, 0x3ff, 0x25ce, "meiw",
                    210:        III3, 0x3ff, 0x27ce, "meid",
                    211:        III3, 0x3fff, 0x38ce, "modb",
                    212:        III3, 0x3fff, 0x3bce, "modd",
                    213:        III3, 0x3fff, 0x39ce, "modw",
                    214:        III, 0x3f, 0x14, "movb",
                    215:        IIF, 0x3fff, 0x043e, "movbf",
                    216:        IIF, 0x3fff, 0x003e, "movbl",
                    217:        III, 0x3f, 0x17, "movd",
                    218:        IIF, 0x3fff, 0x073e, "movdf",
                    219:        IIF, 0x3fff, 0x033e, "movdl",
                    220:        IFF, 0x3fff, 0x05be, "movf",
                    221:        IIF, 0x3fff, 0x1b3e, "movfl",
                    222:        IFF, 0x3fff, 0x04be, "movl",
                    223:        IIF, 0x3fff, 0x163e, "movlf",
                    224:        III, 0x3f, 0x15, "movw",
                    225:        IIF, 0x3fff, 0x053e, "movwf",
                    226:        IIF, 0x3fff, 0x013e, "movwl",
                    227:        III3, 0x3fff, 0x1cce, "movxbd",
                    228:        III3, 0x3fff, 0x10ce, "movxbw",
                    229:        III3, 0x3fff, 0x1dce, "movxwd",
                    230:        III3, 0x3fff, 0x18ce, "movzbd",
                    231:        III3, 0x3fff, 0x14ce, "movzbw",
                    232:        III3, 0x3fff, 0x19ce, "movzwd",
                    233:        III3, 0x3fff, 0x00ce, "movmb",
                    234:        III3, 0x3fff, 0x01ce, "movmw",
                    235:        III3, 0x3fff, 0x03ce, "movmd",
                    236:        IQI, 0x7f, 0x5c, "movqb",
                    237:        IQI, 0x7f, 0x5d, "movqw",
                    238:        IQI, 0x7f, 0x5f, "movqd",
                    239:        INONE3, 0xffffff, 0x00000e, "movsb",
                    240:        INONE3, 0xffffff, 0x00010e, "movsw",
                    241:        INONE3, 0xffffff, 0x00030e, "movsd",
                    242:        INONE3, 0xffffff, 0x00800e, "movst",
                    243:        INONE3, 0xffffff, 0x01000e, "movsbb",
                    244:        INONE3, 0xffffff, 0x01010e, "movswb",
                    245:        INONE3, 0xffffff, 0x01030e, "movsdb",
                    246:        INONE3, 0xffffff, 0x01800e, "movstb",
                    247:        INONE3, 0xffffff, 0x02000e, "movsbw",
                    248:        INONE3, 0xffffff, 0x02010e, "movsww",
                    249:        INONE3, 0xffffff, 0x02030e, "movsdw",
                    250:        INONE3, 0xffffff, 0x02800e, "movstw",
                    251:        INONE3, 0xffffff, 0x03000e, "movsbbw",
                    252:        INONE3, 0xffffff, 0x03010e, "movswbw",
                    253:        INONE3, 0xffffff, 0x03030e, "movsdbw",
                    254:        INONE3, 0xffffff, 0x03800e, "movstbw",
                    255:        INONE3, 0xffffff, 0x06000e, "movsbu",
                    256:        INONE3, 0xffffff, 0x06010e, "movswu",
                    257:        INONE3, 0xffffff, 0x06030e, "movsdu",
                    258:        INONE3, 0xffffff, 0x06800e, "movstu",
                    259:        INONE3, 0xffffff, 0x07000e, "movsbbu",
                    260:        INONE3, 0xffffff, 0x07010e, "movswbu",
                    261:        INONE3, 0xffffff, 0x07030e, "movsdbu",
                    262:        INONE3, 0xffffff, 0x07800e, "movstbu",
                    263:        III3, 0x3fff, 0x0cae, "movsub",
                    264:        III3, 0x3fff, 0x0dae, "movsuw",
                    265:        III3, 0x3fff, 0x0fae, "movsud",
                    266:        III3, 0x3fff, 0x1cae, "movusb",
                    267:        III3, 0x3fff, 0x1dae, "movusw",
                    268:        III3, 0x3fff, 0x1fae, "movusd",
                    269:        III3, 0x3fff, 0x20ce, "mulb",
                    270:        III3, 0x3fff, 0x23ce, "muld",
                    271:        IFF, 0x3fff, 0x31be, "mulf",
                    272:        IFF, 0x3fff, 0x30be, "mull",
                    273:        III3, 0x3fff, 0x21ce, "mulw",
                    274:        III3, 0x3fff, 0x204e, "negb",
                    275:        III3, 0x3fff, 0x234e, "negd",
                    276:        IFF, 0x3fff, 0x15be, "negf",
                    277:        IFF, 0x3fff, 0x14be, "negl",
                    278:        III3, 0x3fff, 0x214e, "negw",
                    279:        INONE, 0xff, 0xa2, "nop",
                    280:        III3, 0x3fff, 0x244e, "notb",
                    281:        III3, 0x3fff, 0x274e, "notd",
                    282:        III3, 0x3fff, 0x254e, "notw",
                    283:        III, 0x3f, 0x18, "orb",
                    284:        III, 0x3f, 0x1b, "ord",
                    285:        III, 0x3f, 0x19, "orw",
                    286:        III3, 0x3fff, 0x30ce, "quob",
                    287:        III3, 0x3fff, 0x33ce, "quod",
                    288:        III3, 0x3fff, 0x31ce, "quow",
                    289:        II3, 0x7ffff, 0x0031e, "rdval",
                    290:        III3, 0x3fff, 0x34ce, "remb",
                    291:        III3, 0x3fff, 0x37ce, "remd",
                    292:        III3, 0x3fff, 0x35ce, "remw",
                    293:        IN, 0xff, 0x72, "restore",
                    294:        IDISP, 0xff, 0x12, "ret",
                    295:        INONE, 0xff, 0x52, "reti",
                    296:        INONE, 0xff, 0x42, "rett",
                    297:        III3, 0x3fff, 0x004e, "rotb",
                    298:        III3, 0x3fff, 0x034e, "rotd",
                    299:        III3, 0x3fff, 0x014e, "rotw",
                    300:        IFI, 0x3fff, 0x243e, "roundfb",
                    301:        IFI, 0x3fff, 0x273e, "roundfd",
                    302:        IFI, 0x3fff, 0x253e, "roundfw",
                    303:        IFI, 0x3fff, 0x203e, "roundlb",
                    304:        IFI, 0x3fff, 0x233e, "roundld",
                    305:        IFI, 0x3fff, 0x213e, "roundlw",
                    306:        IDISP, 0xff, 0x32, "rxp",
                    307:        II, 0x7ff, 0x1bc, "sccb",
                    308:        II, 0x7ff, 0x1bf, "sccd",
                    309:        II, 0x7ff, 0x1bd, "sccw",
                    310:        II, 0x7ff, 0x13c, "scsb",
                    311:        II, 0x7ff, 0x13f, "scsd",
                    312:        II, 0x7ff, 0x13d, "scsw",
                    313:        II, 0x7ff, 0x03c, "seqb",
                    314:        II, 0x7ff, 0x03f, "seqd",
                    315:        II, 0x7ff, 0x03d, "seqw",
                    316:        II, 0x7ff, 0x4bc, "sfcb",
                    317:        II, 0x7ff, 0x4bf, "sfcd",
                    318:        II, 0x7ff, 0x4bd, "sfcw",
                    319:        II, 0x7ff, 0x43c, "sfsb",
                    320:        II, 0x7ff, 0x43f, "sfsd",
                    321:        II, 0x7ff, 0x43d, "sfsw",
                    322:        II, 0x7ff, 0x6bc, "sgeb",
                    323:        II, 0x7ff, 0x6bf, "sged",
                    324:        II, 0x7ff, 0x6bd, "sgew",
                    325:        II, 0x7ff, 0x33c, "sgtb",
                    326:        II, 0x7ff, 0x33f, "sgtd",
                    327:        II, 0x7ff, 0x33d, "sgtw",
                    328:        II, 0x7ff, 0x23c, "shib",
                    329:        II, 0x7ff, 0x23f, "shid",
                    330:        II, 0x7ff, 0x23d, "shiw",
                    331:        II, 0x7ff, 0x5bc, "shsb",
                    332:        II, 0x7ff, 0x5bf, "shsd",
                    333:        II, 0x7ff, 0x5bd, "shsw",
                    334:        II, 0x7ff, 0x3bc, "sleb",
                    335:        II, 0x7ff, 0x3bf, "sled",
                    336:        II, 0x7ff, 0x3bd, "slew",
                    337:        II, 0x7ff, 0x53c, "slob",
                    338:        II, 0x7ff, 0x53f, "slod",
                    339:        II, 0x7ff, 0x53d, "slow",
                    340:        II, 0x7ff, 0x2bc, "slsb",
                    341:        II, 0x7ff, 0x2bf, "slsd",
                    342:        II, 0x7ff, 0x2bd, "slsw",
                    343:        II, 0x7ff, 0x63c, "sltb",
                    344:        II, 0x7ff, 0x63f, "sltd",
                    345:        II, 0x7ff, 0x63d, "sltw",
                    346:        II, 0x7ff, 0x0bc, "sneb",
                    347:        II, 0x7ff, 0x0bf, "sned",
                    348:        II, 0x7ff, 0x0bd, "snew",
                    349:        IM, 0xff, 0x62, "save",
                    350:        III3, 0x3fff, 0x184e, "sbitb",
                    351:        III3, 0x3fff, 0x1b4e, "sbitd",
                    352:        III3, 0x3fff, 0x1c4e, "sbitib",
                    353:        III3, 0x3fff, 0x1f4e, "sbitid",
                    354:        III3, 0x3fff, 0x1d4e, "sbitiw",
                    355:        III3, 0x3fff, 0x194e, "sbitw",
                    356:        ICFG, 0xf87fff, 0x000b0e, "setcfg",
                    357:        II3X, 0xf83fff, 0x00373e, "sfsr",
                    358:        INONE3, 0xffffff, 0x000c0e, "skpsb",
                    359:        INONE3, 0xffffff, 0x000d0e, "skpsw",
                    360:        INONE3, 0xffffff, 0x000f0e, "skpsd",
                    361:        INONE3, 0xffffff, 0x008c0e, "skpst",
                    362:        INONE3, 0xffffff, 0x010c0e, "skpsbb",
                    363:        INONE3, 0xffffff, 0x010d0e, "skpswb",
                    364:        INONE3, 0xffffff, 0x010f0e, "skpsdb",
                    365:        INONE3, 0xffffff, 0x018c0e, "skpstb",
                    366:        INONE3, 0xffffff, 0x020c0e, "skpsbw",
                    367:        INONE3, 0xffffff, 0x020d0e, "skpsww",
                    368:        INONE3, 0xffffff, 0x020f0e, "skpsdw",
                    369:        INONE3, 0xffffff, 0x028c0e, "skpstw",
                    370:        INONE3, 0xffffff, 0x030c0e, "skpsbbw",
                    371:        INONE3, 0xffffff, 0x030d0e, "skpswbw",
                    372:        INONE3, 0xffffff, 0x030f0e, "skpsdbw",
                    373:        INONE3, 0xffffff, 0x038c0e, "skpstbw",
                    374:        INONE3, 0xffffff, 0x060c0e, "skpsbu",
                    375:        INONE3, 0xffffff, 0x060d0e, "skpswu",
                    376:        INONE3, 0xffffff, 0x060f0e, "skpsdu",
                    377:        INONE3, 0xffffff, 0x068c0e, "skpstu",
                    378:        INONE3, 0xffffff, 0x070c0e, "skpsbbu",
                    379:        INONE3, 0xffffff, 0x070d0e, "skpswbu",
                    380:        INONE3, 0xffffff, 0x070f0e, "skpsdbu",
                    381:        INONE3, 0xffffff, 0x078c0e, "skpstbu",
                    382:        IMR, 0x7fff, 0x0f1e, "smr",
                    383:        IPR, 0x7f, 0x2c, "sprb",
                    384:        IPR, 0x7f, 0x2d, "sprw",
                    385:        IPR, 0x7f, 0x2f, "sprd",
                    386:        III, 0x3f, 0x20, "subb",
                    387:        III, 0x3f, 0x30, "subcb",
                    388:        III, 0x3f, 0x33, "subcd",
                    389:        III, 0x3f, 0x31, "subcw",
                    390:        III, 0x3f, 0x23, "subd",
                    391:        IFF, 0x3fff, 0x11be, "subf",
                    392:        IFF, 0x3fff, 0x10be, "subl",
                    393:        III3, 0x3fff, 0x2c4e, "subpb",
                    394:        III3, 0x3fff, 0x2f4e, "subpd",
                    395:        III3, 0x3fff, 0x2d4e, "subpw",
                    396:        III, 0x3f, 0x21, "subw",
                    397:        INONE, 0xff, 0xe2, "svc",
                    398:        III, 0x3f, 0x34, "tbitb",
                    399:        III, 0x3f, 0x37, "tbitd",
                    400:        III, 0x3f, 0x35, "tbitw",
                    401:        IFI, 0x3fff, 0x2c3e, "truncfb",
                    402:        IFI, 0x3fff, 0x2f3e, "truncfd",
                    403:        IFI, 0x3fff, 0x2d3e, "truncfw",
                    404:        IFI, 0x3fff, 0x283e, "trunclb",
                    405:        IFI, 0x3fff, 0x2b3e, "truncld",
                    406:        IFI, 0x3fff, 0x293e, "trunclw",
                    407:        INONE, 0xff, 0xb2, "wait",
                    408:        II3, 0x7ffff, 0x0071e, "wrval",
                    409:        III, 0x3f, 0x38, "xorb",
                    410:        III, 0x3f, 0x3b, "xord",
                    411:        III, 0x3f, 0x39, "xorw",
                    412: /* end */
                    413:        IHEX, 0x0, 0x0, "hex",
                    414: };
                    415: 
                    416: printins(asp)
                    417: int asp;
                    418: {
                    419:        register long o;
                    420:        register i, f;
                    421:        ADDR orig;
                    422: 
                    423:        isp = asp;
                    424:        o = ltow(lget(dot, asp));
                    425:        p = dot;
                    426:        orig = dot;
                    427:        for(i=0; t[i].f; i++)
                    428:                if((o&t[i].m) == t[i].v)
                    429:                        break;
                    430:        printf("%s      ", t[i].s);
                    431:        switch(t[i].f) {
                    432:        case IHEX:
                    433:                p += 1;
                    434:                printf("%02x", o & 0377);
                    435:                break;
                    436: 
                    437:        case INONE:
                    438:                p += 1;
                    439:                break;
                    440: 
                    441:        case INONE3:
                    442:                p += 3;
                    443:                break;
                    444: 
                    445:        case IDISP:
                    446:                p += 1;
                    447:                psymoff((WORD)ddisp(), isp, "");
                    448:                break;
                    449: 
                    450:        case IDMOD:
                    451:                p += 1;
                    452:                psymoff((WORD)mtotext(ddisp(), isp), isp, "");
                    453:                break;
                    454: 
                    455:        case IDPC:
                    456:                p += 1;
                    457:                psymoff((WORD)(ddisp()+dot), isp, "");
                    458:                break;
                    459: 
                    460:        case IFF:
                    461:                p += 3;
                    462:                f = (o>>8)|2;
                    463:                addr2((int)(o>>14), f, f);
                    464:                break;
                    465: 
                    466:        case IIF:
                    467:                p += 3;
                    468:                i = (o>>8);
                    469:                f = (o>>10)|2;
                    470:                addr2((int)(o>>14), i, f);
                    471:                break;
                    472: 
                    473:        case IFI:
                    474:                p += 3;
                    475:                i = (o>>8);
                    476:                f = (o>>10)|2;
                    477:                addr2((int)(o>>14), f, i);
                    478:                break;
                    479: 
                    480:        case III:
                    481:                p += 2;
                    482:                i = o;
                    483:                addr2((int)(o>>6), i, i);
                    484:                break;
                    485: 
                    486:        case III3:
                    487:                p += 3;
                    488:                i = (o>>8);
                    489:                addr2((int)(o>>14), i, i);
                    490:                break;
                    491: 
                    492:        case IIID3:
                    493:                p += 3;
                    494:                i = (o>>8);
                    495:                addr2((int)(o>>14), i, i);
                    496:                printf(",%r", ddisp());
                    497:                break;
                    498: 
                    499:        case II:
                    500:                p += 2;
                    501:                i = o;
                    502:                dgen((int)(o>>11), i, -1);
                    503:                break;
                    504: 
                    505:        case II3:
                    506:                p += 3;
                    507:                dgen((int)(o>>19), 3, -1);
                    508:                break;
                    509: 
                    510:        case II3X:
                    511:                p += 3;
                    512:                dgen((int)(o>>14), 3, -1);
                    513:                break;
                    514: 
                    515:        case IMD:
                    516:                p += 2;
                    517:                mask((int)(o>>8)&0xff);
                    518:                printf(",%R", ddisp());
                    519:                break;
                    520: 
                    521:        case IM:
                    522:                p += 2;
                    523:                mask((int)(o>>8)&0xff);
                    524:                break;
                    525: 
                    526:        case IN:
                    527:                p += 2;
                    528:                rmask((int)(o>>8)&0xff);
                    529:                break;
                    530: 
                    531:        case IQI:
                    532:                p += 2;
                    533:                i = o;
                    534:                printf("$");
                    535:                quick((int)(o>>7));
                    536:                printf(",");
                    537:                dgen((int)(o>>11), o, -1);
                    538:                break;
                    539: 
                    540:        case IRII:
                    541:                p += 3;
                    542:                printf("r%d,", (int)(o>>11)&0x7);
                    543:                i = o;
                    544:                addr2((int)(o>>14), i, i);
                    545:                break;
                    546: 
                    547:        case IRIID:
                    548:                p += 3;
                    549:                printf("r%d,", (int)(o>>11)&0x7);
                    550:                i = o;
                    551:                addr2((int)(o>>14), i, i);
                    552:                printf(",");
                    553:                psymoff((WORD)ddisp(), isp, "");
                    554:                break;
                    555: 
                    556:        case ICFG:
                    557:                p += 3;
                    558:                printf("[");
                    559:                if (o & 0x8000)
                    560:                        printf("I");
                    561:                if (o & 0x10000)
                    562:                        printf("F");
                    563:                if (o & 0x20000)
                    564:                        printf("M");
                    565:                if (o & 0x40000)
                    566:                        printf("C");
                    567:                printf("]");
                    568:                break;
                    569: 
                    570:        case IPR:
                    571:                p += 2;
                    572:                prreg((o >> 7) & 0xf);
                    573:                printf(",");
                    574:                dgen(o >> 11, o, -1);
                    575:                break;
                    576: 
                    577:        case IMR:
                    578:                p += 1;
                    579:                prmr((o >> 15) & 0xf);
                    580:                printf(",");
                    581:                dgen(o >> 19, 3, -1);
                    582:                break;
                    583:        }
                    584:        dotinc = p - orig;
                    585: }
                    586: 
                    587: static
                    588: addr2(o, i1, i2)
                    589: {
                    590:        register x1, x2, t;
                    591: 
                    592:        x1 = -1;
                    593:        x2 = -1;
                    594:        t = (o >> 5) & 0x1f;
                    595:        if (28 <= t && t <= 31)         /* index mode */
                    596:                x1 = cget(p++, isp);
                    597:        t = o & 0x1f;
                    598:        if (28 <= t && t <= 31)
                    599:                x2 = cget(p++, isp);
                    600:        dgen(o>>5, i1, x1);
                    601:        printf(",");
                    602:        dgen(o, i2, x2);
                    603: }
                    604: 
                    605: static
                    606: dgen(g, i, t)
                    607: {
                    608:        register long v, v1;
                    609:        register uchar pp;
                    610: 
                    611:        switch(g &= 0x1f) {
                    612:        default:
                    613:                printf("gok%d", g & 0x1f);
                    614:                break;
                    615: 
                    616:        case 0:
                    617:        case 1:
                    618:        case 2:
                    619:        case 3:
                    620:        case 4:
                    621:        case 5:
                    622:        case 6:
                    623:        case 7:
                    624:                printf("r%d", g);
                    625:                break;
                    626: 
                    627:        case 8:
                    628:        case 9:
                    629:        case 10:
                    630:        case 11:
                    631:        case 12:
                    632:        case 13:
                    633:        case 14:
                    634:        case 15:
                    635:                v = ddisp();
                    636:                psymoff((WORD)v, isp, "");
                    637:                printf("(r%d)", g-8);
                    638:                break;
                    639: 
                    640:        case 16:
                    641:        case 17:
                    642:        case 18:
                    643:                v = ddisp();
                    644:                v1 = ddisp();
                    645:                psymoff((WORD)v1, isp, "(");
                    646:                psymoff((WORD)v, isp, "");
                    647:                printf("(%c%c))", "fss"[g-16], "ppb"[g-16]);
                    648:                break;
                    649: 
                    650:        case 20:
                    651:                v = 0;
                    652:                pp = cget(p, isp);
                    653:                if(pp & 0200)
                    654:                switch(i & 3) {
                    655:                case 2: break;
                    656:                case 3: break;
                    657:                case 1: v = 0xffff0000L; break;
                    658:                case 0: v = 0xffffff00L; break;
                    659:                }
                    660:                switch(i & 3) {
                    661:                case 2: p += 4;
                    662:                case 3: v |= (long)cget(p++, isp) << 24;
                    663:                        v |= (long)cget(p++, isp) << 16;
                    664:                case 1: v |= (long)cget(p++, isp) << 8;
                    665:                case 0: v |= (long)cget(p++, isp);
                    666:                }
                    667:                printf("$");
                    668:                psymoff((WORD)v, isp, "");
                    669:                break;
                    670: 
                    671:        case 21:
                    672:                v = ddisp();
                    673:                printf("*");
                    674:                psymoff((WORD)v, isp, "");
                    675:                break;
                    676: 
                    677:        case 22:
                    678:                v = ddisp();
                    679:                v1 = ddisp();
                    680:                psymoff((WORD)(mtodata(v, isp)+v1), isp, "");
                    681:                break;
                    682: 
                    683:        case 23:
                    684:                printf("tos");
                    685:                break;
                    686: 
                    687:        case 24:
                    688:        case 25:
                    689:        case 26:
                    690:        case 27:
                    691:                v = ddisp();
                    692:                psymoff((WORD)v, isp, "");
                    693:                printf("(%c%c)", "fssp"[g-24], "ppbp"[g-24]);
                    694:                break;
                    695: 
                    696:        case 28:
                    697:        case 29:
                    698:        case 30:
                    699:        case 31:
                    700:                if (t == -1)
                    701:                        t = cget(p++, isp);
                    702:                dgen(t>>3, i, -1);
                    703:                printf("[r%d:%c]", t&07, "bwdq"[g&03]);
                    704:                break;
                    705:        }
                    706: }
                    707: 
                    708: static long
                    709: ddisp()
                    710: {
                    711:        register long o;
                    712: 
                    713:        o = cget(p++, isp);
                    714:        if(!(o & 0x80)) {
                    715:                if(o & 0x40)
                    716:                        o |= 0xffffff80;
                    717:                return o;
                    718:        }
                    719:        o = (o<<8) | cget(p++, isp);
                    720:        if(!(o & 0x4000)) {
                    721:                o &= 0x3fff;
                    722:                if(o & 0x2000)
                    723:                        o |= 0xffffc000;
                    724:                return o;
                    725:        }
                    726:        o = (o<<8) | cget(p++, isp);
                    727:        o = (o<<8) | cget(p++, isp);
                    728:        o &= 0x3fffffff;
                    729:        if(o & 0x20000000)
                    730:                o |= 0xc0000000;
                    731:        return o;
                    732: }
                    733: 
                    734: static
                    735: mask(m)
                    736: register int m;
                    737: {
                    738:        register int i;
                    739:        int first = 0;
                    740: 
                    741:        m &= 0xff;
                    742:        printf("[");
                    743:        for (i = 0; m; i++) {
                    744:                if (m & (1<<i)) {
                    745:                        if (first++)
                    746:                                printf(",");
                    747:                        printf("r%d", i);
                    748:                }
                    749:                m &=~ (1<<i);
                    750:        }
                    751:        printf("]");
                    752: }
                    753: 
                    754: static
                    755: rmask(m)
                    756: register int m;
                    757: {
                    758:        register int i;
                    759:        int first = 0;
                    760: 
                    761:        m &= 0xff;
                    762:        printf("[");
                    763:        for (i = 0; m; i++) {
                    764:                if (m & (0x80>>i)) {
                    765:                        if (first++)
                    766:                                printf(",");
                    767:                        printf("r%d", i);
                    768:                }
                    769:                m &=~ (0x80>>i);
                    770:        }
                    771:        printf("]");
                    772: }
                    773: 
                    774: static
                    775: quick(q)
                    776: register int q;
                    777: {
                    778: 
                    779:        q &= 0xf;
                    780:        if (q & 0x8)
                    781:                q |= ~0x7;
                    782:        printf("%r", q);
                    783: }
                    784: 
                    785: static char *pmrtab[] = {
                    786:        "bpr0", "bpr1", "2", "3",
                    787:        "pf0", "pf1", "6", "7",
                    788:        "sc", "9", "msr", "bcnt",
                    789:        "ptb0", "ptb1", "#d", "eia",
                    790: };
                    791: 
                    792: static
                    793: prmr(r)
                    794: int r;
                    795: {
                    796: 
                    797:        printf("%s", pmrtab[r]);
                    798: }
                    799: 
                    800: static char *pregtab[] = {
                    801:        "upsr", "1", "2", "3",
                    802:        "4", "5", "6", "7",
                    803:        "fp", "sp", "sb", "#b",
                    804:        "#c", "psr", "intbase", "mod",
                    805: };
                    806: 
                    807: static
                    808: prreg(r)
                    809: int r;
                    810: {
                    811: 
                    812:        printf("%s", pregtab[r]);
                    813: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.