890fb8492dd406ede14f7aba092e44f38359bf7a
[fw/sdcc] / as / mcs51 / i8051.h
1 /* i8051.h */
2
3 /*
4  * (C) Copyright 1989,1990
5  * All Rights Reserved
6  *
7  * Alan R. Baldwin
8  * 721 Berkeley St.
9  * Kent, Ohio  44240
10  *
11  * Ported from 8085 to 8051 by John Hartman 30-Apr-1995
12  * Continued, 2-Jun-95
13  */
14
15 /*)BUILD
16         $(PROGRAM) =    AS8051
17         $(INCLUDE) = {
18                 ASM.H
19                 I8051.H
20         }
21         $(FILES) = {
22                 I51EXT.C
23                 I51MCH.C
24                 I51PST.C
25                 ASMAIN.C
26                 ASLEX.C
27                 ASSYM.C
28                 ASSUBR.C
29                 ASEXPR.C
30                 ASDATA.C
31                 ASLIST.C
32                 ASOUT.C
33         }
34         $(STACK) = 2000
35 */
36
37 /*
38  * Symbol types.
39  */
40 #define S_INH   50              /* One byte inherent */
41 #define S_JMP11 51              /* Jump and call 11 bit. */
42 #define S_JMP16 52              /* Jump and call 16 bit */
43 #define S_ACC   53              /* Accumulator */
44 #define S_TYP1  54              /* Type 1 (inc and dec) */
45 #define S_TYP2  55              /* Type 2 (arith ops) */
46 #define S_TYP3  56              /* Type 3 (logic ops) */
47 #define S_TYP4  57              /* Type 4 (XCH) */
48 #define S_MOV   58              /* MOV */
49 #define S_BITBR 59              /* bit branch */
50 #define S_BR    60              /* branch */
51 #define S_ACBIT 61              /* CLR, CPL */
52 #define S_CJNE  62              /* CJNE */
53 #define S_DJNZ  63              /* DJNZ */
54 #define S_JMP   64              /* JMP */
55 #define S_MOVC  65              /* MOVC */
56 #define S_MOVX  66              /* MOVX */
57 #define S_AB    67              /* AB (div and mul) */
58 #define S_CPL   68              /* CPL */
59 #define S_SETB  69              /* SETB */
60 #define S_DIRECT 70             /* DIRECT (pusha and pop) */
61 #define S_XCHD  71              /* XCHD */
62
63 /* Addressing modes */
64 #define S_A      30             /* A */
65 /* #define S_B   31 */          /* B */
66 #define S_C      32             /* C (carry) */
67 #define S_RAB    33             /* AB */
68 #define S_DPTR   34             /* DPTR */
69 #define S_REG    35             /* Register R0-R7 */
70 #define S_IMMED  36             /* immediate */
71 #define S_DIR    37             /* direct */
72 #define S_EXT    38             /* extended */
73 #define S_PC     39             /* PC (for addressing mode) */
74
75 #define S_AT_R   40             /* @R0 or @R1 */
76 #define S_AT_DP  41             /* @DPTR */
77 #define S_AT_APC 42             /* @A+PC */
78 #define S_AT_ADP 43             /* @A+DPTR */
79 #define S_NOT_BIT 44             /* /BIT (/DIR) */
80
81 /*
82  * Registers.  Value  == address in RAM, except for PC
83  */
84 #define R0      0
85 #define R1      1
86 #define R2      2
87 #define R3      3
88 #define R4      4
89 #define R5      5
90 #define R6      6
91 #define R7      7
92 #define A       0xE0
93 #define DPTR    0x82
94 #define PC      0xFF            /* dummy number for register ID only */
95 #define AB      0xFE            /* dummy number for register ID only */
96 #define C       0xFD            /* dummy number for register ID only */
97
98 struct adsym
99 {
100         char    a_str[5];       /* addressing string (length for DPTR+null)*/
101         int     a_val;          /* addressing mode value */
102 };
103
104 /* pre-defined symbol structure: name and value */
105 struct PreDef
106 {
107    char id[NCPS];
108    int  value;
109 };
110 extern struct PreDef preDef[];
111
112         /* machine dependent functions */
113
114         /* i51mch.c */
115 extern  int             comma();
116 extern  VOID            minit();
117 extern  int             reg();