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