Annotation of coherent/d/bin/as/i8086/asmch.h, revision 1.1.1.1

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)

unix.superglobalmegacorp.com

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