|
|
1.1 ! root 1: head 1.2; ! 2: access ; ! 3: symbols ; ! 4: locks bin:1.2; ! 5: comment @ * @; ! 6: ! 7: ! 8: 1.2 ! 9: date 91.02.06.20.43.18; author bin; state Exp; ! 10: branches ; ! 11: next 1.1; ! 12: ! 13: 1.1 ! 14: date 91.02.06.20.43.10; author bin; state Exp; ! 15: branches ; ! 16: next ; ! 17: ! 18: ! 19: desc ! 20: @steve 2/6/91 ! 21: Initial MWC RCS revision. ! 22: @ ! 23: ! 24: ! 25: 1.2 ! 26: log ! 27: @steve 2/6/91 ! 28: Extensive changes from cef for 80286 and floating point opcodes. ! 29: @ ! 30: text ! 31: @/* ! 32: * Machine specific header file. ! 33: * Intel iAPX-86. ! 34: * Small addressing model. ! 35: */ ! 36: #define HEX 1 ! 37: #define LOHI 1 ! 38: #define CLIST BLIST ! 39: #define CPU "Intel iAPX-86" ! 40: #define MINIT 1 ! 41: #define NB 128 ! 42: ! 43: /* ! 44: * Formats and things for ! 45: * the part of the assembler that ! 46: * makes the listings. ! 47: */ ! 48: #define NBOL 8 ! 49: #define ADRFMT " %04x" ! 50: #define BFMT " %02x" ! 51: #define WFMT " %04x" ! 52: #define SKIP " " ! 53: ! 54: typedef unsigned address; ! 55: ! 56: #define fbyte(x) (((int) x)&0xFF) ! 57: #define sbyte(x) ((((int) x)>>8)&0xFF) ! 58: #define locrup(x) (((unsigned)(x)+01)&~01) ! 59: ! 60: /* ! 61: * Symbol flags. ! 62: */ ! 63: #define S_OBL 0200 /* w:s literal usable */ ! 64: #define S_NW 0201 /* Floating point no wait ops. */ ! 65: #define S_FIX 0202 /* Kludge for fdiv, fdivr, fsub, fsubr. */ ! 66: ! 67: /* ! 68: * Symbol kinds. ! 69: * Basicly one per type of ! 70: * operation. ! 71: */ ! 72: #define S_INH 50 /* One byte */ ! 73: #define S_INT 51 /* Interrupt */ ! 74: #define S_JMP 52 /* Jumps */ ! 75: #define S_CALL 53 /* Call */ ! 76: #define S_XOP 54 /* Xcall and xjmp */ ! 77: #define S_RET 55 /* Return */ ! 78: #define S_MUL 56 /* Mul, div */ ! 79: #define S_MULB 57 /* Ditto, but byte op. */ ! 80: #define S_REL 58 /* Relative, no adjust (jcxz) */ ! 81: #define S_DOP 59 /* Doubles */ ! 82: #define S_IN 60 /* in */ ! 83: #define S_PUSH 61 /* Push/pop */ ! 84: #define S_SHL 62 /* Shift */ ! 85: #define S_MOV 63 /* Moves */ ! 86: #define S_XCHG 64 /* Exchanges */ ! 87: #define S_IJMP 65 /* Icall and ijmp */ ! 88: #define S_LEA 67 /* Load address */ ! 89: #define S_SHLB 68 /* Shifts, byte */ ! 90: #define S_OVER 69 /* Overide prefix */ ! 91: #define S_SOP 70 /* Single op. */ ! 92: #define S_SOPB 71 /* Ditto, but bytes */ ! 93: #define S_ESC 73 /* Escape */ ! 94: #define S_EVEN 74 /* .even */ ! 95: #define S_ODD 75 /* .odd */ ! 96: #define S_SYS 76 /* sys */ ! 97: #define S_OUT 77 /* out */ ! 98: #define S_FP_F 78 /* Floating fixed format */ ! 99: #define S_FP_S 79 /* Floating stack format */ ! 100: #define S_FP_SP 80 /* Floating stack pop */ ! 101: #define S_FP_S1 81 /* Floating stack single operand format */ ! 102: #define S_FP_M 82 /* Floating memory format */ ! 103: #define S_PROT0 83 /* Protection Control 0 */ ! 104: #define S_PROT1 84 /* Protection Control 1 */ ! 105: #define S_PROTR 85 /* Protection Control to register */ ! 106: #define S_ENTER 86 /* Enter procedure */ ! 107: ! 108: /* ! 109: * Register names. ! 110: * The low 3 bit hold the register ! 111: * number, as coded in the type. ! 112: * The upper bits hold the register's ! 113: * type (0 => word, 1 => byte, 2 => seg ! 114: * and 3 => flags). ! 115: * This tracks the BR, WR and SR mode ! 116: * definitions. ! 117: */ ! 118: #define AX 0 ! 119: #define CX 1 ! 120: #define DX 2 ! 121: #define BX 3 ! 122: #define SP 4 ! 123: #define BP 5 ! 124: #define SI 6 ! 125: #define DI 7 ! 126: ! 127: #define AL 010 ! 128: #define CL 011 ! 129: #define DL 012 ! 130: #define BL 013 ! 131: #define AH 014 ! 132: #define CH 015 ! 133: #define DH 016 ! 134: #define BH 017 ! 135: ! 136: #define ES 020 ! 137: #define CS 021 ! 138: #define SS 022 ! 139: #define DS 023 ! 140: ! 141: #define ST 040 ! 142: #define ST1 041 ! 143: #define ST2 042 ! 144: #define ST3 043 ! 145: #define ST4 044 ! 146: #define ST5 045 ! 147: #define ST6 046 ! 148: #define ST7 047 ! 149: ! 150: /* ! 151: * Address modes. ! 152: * These go in the e_mode field of ! 153: * and expression. Basicly the bottom 3 ! 154: * bits go in the instruction, and the ! 155: * rest express the mode. ! 156: */ ! 157: #define WR (0<<3) /* Word register */ ! 158: #define BR (1<<3) /* Byte register */ ! 159: #define SEGR (2<<3) /* Segment register */ ! 160: #define IM (4<<3) /* Immediate */ ! 161: #define DIR (5<<3) /* Direct */ ! 162: #define IDX (6<<3) /* (dx) */ ! 163: #define ICL (7<<3) /* (cl) */ ! 164: #define X (8<<3) /* Index */ ! 165: ! 166: #define NONE (-1) /* No legal mode */ ! 167: #define MMASK 0170 /* Mode mask */ ! 168: #define RMASK 07 /* Register mask */ ! 169: ! 170: #define reg(x) (x&RMASK) ! 171: #define mof(x) ((x).e_mode&MMASK) ! 172: #define rof(x) ((x).e_mode&RMASK) ! 173: ! 174: /* ! 175: * Other magic. ! 176: */ ! 177: #define MULDIV 0366 ! 178: #define INCDEC 0376 ! 179: #define NOTNEG 0366 ! 180: #define IDREG 0100 ! 181: #define AAM 0324 ! 182: #define AAD 0325 ! 183: #define APB 0012 ! 184: #define FWAIT 0233 ! 185: #define FNOP 0220 ! 186: #define S 02 ! 187: #define SEGPFX 0046 ! 188: #define SHL 0320 ! 189: #define SHLI 0300 ! 190: #define TESTB 0204 ! 191: #define TESTAB 0250 ! 192: #define TESTMB 0366 ! 193: #define TESTW 0205 ! 194: #define TESTAW 0251 ! 195: #define TESTMW 0367 ! 196: #define XCHGR 0220 ! 197: #define W 01 ! 198: #define D 02 ! 199: #define V 02 ! 200: #define CMPB 0246 ! 201: #define CMPW 0247 ! 202: #define DXOP 0202 ! 203: #define XOP 0377 ! 204: #define DCALL 0350 ! 205: #define IJORC 0377 ! 206: #define LJMP 0351 ! 207: #define JMP 0353 ! 208: #define DJMP 0351 ! 209: #define INT3 0314 ! 210: #define INT 0315 ! 211: #define PUSHSR 0006 ! 212: #define PUSHR 0120 ! 213: #define PUSHIW 0150 ! 214: #define PUSHIB 0152 ! 215: #define PUSHF 0234 ! 216: #define PUSH 0377 ! 217: #define POPSR 0007 ! 218: #define POPR 0130 ! 219: #define POPF 0235 ! 220: #define POP 0217 ! 221: #define ESC 0330 ! 222: #define MOVB 0244 ! 223: #define MOVSEG 0214 ! 224: #define MVIB 0260 ! 225: #define MVIW 0270 ! 226: #define MVI 0306 ! 227: #define MOVAM 0242 ! 228: #define MOVMA 0240 ! 229: #define ARPL 0143 ! 230: #define CLTS 0006 ! 231: #define ENTER 0310 ! 232: ! 233: /* Floating point two-byte opcodes. */ ! 234: #define FOP(x,y) (((x)<<8)|(y)) ! 235: #define BYTE1(x) ((x)>>8) ! 236: #define BYTE2(x) ((x)&0xFF) ! 237: @ ! 238: ! 239: ! 240: 1.1 ! 241: log ! 242: @Initial revision ! 243: @ ! 244: text ! 245: @d34 2 ! 246: d68 9 ! 247: d111 8 ! 248: d154 2 ! 249: d159 1 ! 250: d183 2 ! 251: d199 8 ! 252: @
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.