|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.