* asranlib/asranlib.c, link/lkar.h, link/lkar.c:
[fw/sdcc] / as / mcs51 / i51pst.c
1 /* i85pst.c
2
3    Copyright (C) 1989-1995 Alan R. Baldwin
4    721 Berkeley St., Kent, Ohio 44240
5
6 This program is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the
8 Free Software Foundation; either version 3, or (at your option) any
9 later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program.  If not, see <http://www.gnu.org/licenses/>. */
18
19 /*
20  * 28-Oct-97 Ported from 8085 to 8051 by John Hartman
21  * 30-Jan-98 JLH: add memory-space flags for .AREA
22  */
23
24 #include <stdio.h>
25 #include <setjmp.h>
26 #include "asm.h"
27 #include "i8051.h"
28
29 struct  mne     mne[] = {
30
31         /* machine */
32
33         /* system */
34
35         { NULL, "CON",          S_ATYP,         0,      A_CON},
36         { NULL, "OVR",          S_ATYP,         0,      A_OVR},
37         { NULL, "REL",          S_ATYP,         0,      A_REL},
38         { NULL, "ABS",          S_ATYP,         0,      A_ABS},
39         { NULL, "NOPAG",        S_ATYP,         0,      A_NOPAG},
40         { NULL, "PAG",          S_ATYP,         0,      A_PAG},
41
42         { NULL, "CODE",         S_ATYP,         0,      A_CODE},
43         { NULL, "DATA",         S_ATYP,         0,      A_DATA},
44         { NULL, "XDATA",        S_ATYP,         0,      A_XDATA},
45         { NULL, "BIT",          S_ATYP,         0,      A_BIT},
46
47         { NULL, ".byte",        S_BYTE,         0,      0},
48         { NULL, ".db",          S_BYTE,         0,      0},
49         { NULL, ".word",        S_WORD,         0,      0},
50         { NULL, ".dw",          S_WORD,         0,      0},
51         { NULL, ".ascii",       S_ASCII,        0,      0},
52         { NULL, ".asciz",       S_ASCIZ,        0,      0},
53         { NULL, ".blkb",        S_BLK,          0,      1},
54         { NULL, ".ds",          S_BLK,          0,      1},
55         { NULL, ".blkw",        S_BLK,          0,      2},
56         { NULL, ".page",        S_PAGE,         0,      0},
57         { NULL, ".title",       S_TITLE,        0,      0},
58         { NULL, ".sbttl",       S_SBTL,         0,      0},
59         { NULL, ".globl",       S_GLOBL,        0,      0},
60         { NULL, ".area",        S_DAREA,        0,      0},
61         { NULL, ".even",        S_EVEN,         0,      0},
62         { NULL, ".odd",         S_ODD,          0,      0},
63         { NULL, ".if",          S_IF,           0,      0},
64         { NULL, ".else",        S_ELSE,         0,      0},
65         { NULL, ".endif",       S_ENDIF,        0,      0},
66         { NULL, ".include",     S_INCL,         0,      0},
67         { NULL, ".radix",       S_RADIX,        0,      0},
68         { NULL, ".org",         S_ORG,          0,      0},
69         { NULL, ".module",      S_MODUL,        0,      0},
70         { NULL, ".ascis",       S_ASCIS,        0,      0},
71     { NULL, ".flat24",  S_FLAT24,       0,      0},
72     { NULL, ".optsdcc", S_OPTSDCC,      0,      0},
73
74         /* 8051 */
75
76         { NULL, "a",            S_A,            0,      A},
77         { NULL, "ab",           S_AB,           0,      0},
78         { NULL,   "dptr",         S_DPTR,         0,      DPTR},
79         { NULL,   "pc",           S_PC,           0,      PC},
80         { NULL, "r0",           S_REG,          0,      R0},
81         { NULL, "r1",           S_REG,          0,      R1},
82         { NULL,   "r2",           S_REG,          0,      R2},
83         { NULL,   "r3",           S_REG,          0,      R3},
84         { NULL,   "r4",           S_REG,          0,      R4},
85         { NULL,   "r5",           S_REG,          0,      R5},
86         { NULL,   "r6",           S_REG,          0,      R6},
87         { NULL,   "r7",           S_REG,          0,      R7},
88
89         { NULL, "nop",          S_INH,          0,      0x00},
90         { NULL, "ret",          S_INH,          0,      0x22},
91         { NULL, "reti",         S_INH,          0,      0x32},
92
93         { NULL, "ajmp",         S_JMP11,        0,      0x01},
94         { NULL, "acall",        S_JMP11,        0,      0x11},
95         { NULL, "ljmp",         S_JMP16,        0,      0x02},
96         { NULL, "lcall",        S_JMP16,        0,      0x12},
97
98         { NULL, "rr",           S_ACC,          0,      0x03},
99         { NULL, "rrc",          S_ACC,          0,      0x13},
100         { NULL, "rl",           S_ACC,          0,      0x23},
101         { NULL, "rlc",          S_ACC,          0,      0x33},
102         { NULL, "swap",         S_ACC,          0,      0xC4},
103         { NULL, "da",           S_ACC,          0,      0xD4},
104
105         { NULL, "inc",          S_TYP1,         0,      0x00},
106         { NULL, "dec",          S_TYP1,         0,      0x10},
107
108         { NULL, "add",          S_TYP2,         0,      0x20},
109         { NULL, "addc",         S_TYP2,         0,      0x30},
110         { NULL, "subb",         S_TYP2,         0,      0x90},
111
112         { NULL, "orl",          S_TYP3,         0,      0x40},
113         { NULL, "anl",          S_TYP3,         0,      0x50},
114         { NULL, "xrl",          S_TYP3,         0,      0x60},
115
116         { NULL, "xch",          S_TYP4,         0,      0xC0},
117
118         { NULL, "mov",          S_MOV,          0,      0x00},
119
120         { NULL, "jbc",          S_BITBR,        0,      0x10},
121         { NULL, "jb",           S_BITBR,        0,      0x20},
122         { NULL, "jnb",          S_BITBR,        0,      0x30},
123
124         { NULL,   "jc",           S_BR,           0,      0x40},
125         { NULL,   "jnc",          S_BR,           0,      0x50},
126         { NULL,   "jz",           S_BR,           0,      0x60},
127         { NULL,   "jnz",          S_BR,           0,      0x70},
128         { NULL,   "sjmp",         S_BR,           0,      0x80},
129
130         { NULL,   "cjne",         S_CJNE,         0,      0xB0},
131         { NULL,   "djnz",         S_DJNZ,         0,      0xD0},
132         { NULL,   "jmp",          S_JMP,          0,      0x73},
133         { NULL,   "movc",         S_MOVC,         0,      0x83},
134         { NULL,   "movx",         S_MOVX,         0,      0x00},
135         { NULL,   "div",          S_AB,           0,      0x84},
136         { NULL,   "mul",          S_AB,           0,      0xA4},
137         { NULL,   "clr",          S_ACBIT,        0,      0xC2},
138         { NULL,   "cpl",          S_ACBIT,        0,      0xB2},
139         { NULL,   "setb",         S_SETB,         0,      0xD2},
140         { NULL,   "push",         S_DIRECT,       0,      0xC0},
141         { NULL,   "pop",          S_DIRECT,       0,      0xD0},
142         { NULL,   "xchd",         S_XCHD,         S_END,  0xD6}
143 };
144
145 struct PreDef preDef[] = {
146    {"AC",     0x00D6},
147    {"ac",     0x00D6},
148    {"A",      0x00D6},
149    {"a",      0x00D6},
150    {"ACC",    0x00E0},
151    {"acc",    0x00E0},
152    {"ACC.0",  0x00E0},
153    {"ACC.1",  0x00E1},
154    {"ACC.2",  0x00E2},
155    {"ACC.3",  0x00E3},
156    {"ACC.4",  0x00E4},
157    {"ACC.5",  0x00E5},
158    {"ACC.6",  0x00E6},
159    {"ACC.7",  0x00E7},
160    {"acc.0",  0x00E0},
161    {"acc.1",  0x00E1},
162    {"acc.2",  0x00E2},
163    {"acc.3",  0x00E3},
164    {"acc.4",  0x00E4},
165    {"acc.5",  0x00E5},
166    {"acc.6",  0x00E6},
167    {"acc.7",  0x00E7},
168    {"B",      0x00F0},
169    {"B.0",    0x00F0},
170    {"B.1",    0x00F1},
171    {"B.2",    0x00F2},
172    {"B.3",    0x00F3},  
173    {"B.4",    0x00F4},  
174    {"B.5",    0x00F5},  
175    {"B.6",    0x00F6},  
176    {"B.7",    0x00F7},  
177    {"b",      0x00F0},
178    {"b.0",    0x00F0},
179    {"b.1",    0x00F1},
180    {"b.2",    0x00F2},
181    {"b.3",    0x00F3},  
182    {"b.4",    0x00F4},  
183    {"b.5",    0x00F5},  
184    {"b.6",    0x00F6},  
185    {"b.7",    0x00F7},  
186    {"CPRL2",  0x00C8},  
187    {"cprl2",  0x00C8},  
188    {"CT2",    0x00C9},  
189    {"ct2",    0x00C9},  
190    {"CY",     0x00D7},  
191    {"cy",     0x00D7},  
192    {"DPH",    0x0083},  
193    {"DPL",    0x0082},  
194    {"dph",    0x0083},  
195    {"dpl",    0x0082},  
196    {"EA",     0x00AF},  
197    {"ea",     0x00AF},  
198    {"ES",     0x00AC},  
199    {"es",     0x00AC},  
200    {"ET0",    0x00A9},  
201    {"et0",    0x00A9},  
202    {"ET1",    0x00AB},  
203    {"et1",    0x00AB},  
204    {"ET2",    0x00AD},  
205    {"et2",    0x00AD},  
206    {"EX0",    0x00A8},  
207    {"ex0",    0x00A8},  
208    {"EX1",    0x00AA},  
209    {"ex1",    0x00AA},  
210    {"EXEN2",  0x00CB},  
211    {"exen2",  0x00CB},  
212    {"EXF2",   0x00CE},  
213    {"exf2",   0x00CE},  
214    {"F0",     0x00D5},  
215    {"f0",     0x00D5},  
216    {"IE",     0x00A8},  
217    {"IE.0",   0x00A8},  
218    {"IE.1",   0x00A9},  
219    {"IE.2",   0x00AA},  
220    {"IE.3",   0x00AB},  
221    {"IE.4",   0x00AC},  
222    {"IE.5",   0x00AD},  
223    {"IE.7",   0x00AF},  
224    {"ie",     0x00A8},  
225    {"ie.0",   0x00A8},  
226    {"ie.1",   0x00A9},  
227    {"ie.2",   0x00AA},  
228    {"ie.3",   0x00AB},  
229    {"ie.4",   0x00AC},  
230    {"ie.5",   0x00AD},  
231    {"ie.7",   0x00AF},  
232    {"IE0",    0x0089},  
233    {"ie0",    0x0089},  
234    {"IE1",    0x008B},  
235    {"ie1",    0x008B},  
236    {"INT0",   0x00B2},  
237    {"int0",   0x00B2},  
238    {"INT1",   0x00B3},  
239    {"int1",   0x00B3},  
240    {"IP",     0x00B8},  
241    {"IP.0",   0x00B8},  
242    {"IP.1",   0x00B9},  
243    {"IP.2",   0x00BA},  
244    {"IP.3",   0x00BB},  
245    {"IP.4",   0x00BC},  
246    {"IP.5",   0x00BD},  
247    {"ip",     0x00B8},  
248    {"ip.0",   0x00B8},  
249    {"ip.1",   0x00B9},  
250    {"ip.2",   0x00BA},  
251    {"ip.3",   0x00BB},  
252    {"ip.4",   0x00BC},  
253    {"ip.5",   0x00BD},  
254    {"IT0",    0x0088},  
255    {"it0",    0x0088},  
256    {"IT1",    0x008A},  
257    {"it1",    0x008A},  
258    {"OV",     0x00D2},  
259    {"ov",     0x00D2},  
260    {"P",      0x00D0},  
261    {"p",      0x00D0},  
262    {"P0",     0x0080},  
263    {"P0.0",   0x0080},  
264    {"P0.1",   0x0081},  
265    {"P0.2",   0x0082},  
266    {"P0.3",   0x0083},  
267    {"P0.4",   0x0084}, 
268    {"P0.5",   0x0085}, 
269    {"P0.6",   0x0086}, 
270    {"P0.7",   0x0087}, 
271    {"p0",     0x0080},  
272    {"p0.0",   0x0080},  
273    {"p0.1",   0x0081},  
274    {"p0.2",   0x0082},  
275    {"p0.3",   0x0083},  
276    {"p0.4",   0x0084}, 
277    {"p0.5",   0x0085}, 
278    {"p0.6",   0x0086}, 
279    {"p0.7",   0x0087}, 
280    {"P1",     0x0090}, 
281    {"P1.0",   0x0090}, 
282    {"P1.1",   0x0091}, 
283    {"P1.2",   0x0092}, 
284    {"P1.3",   0x0093}, 
285    {"P1.4",   0x0094}, 
286    {"P1.5",   0x0095}, 
287    {"P1.6",   0x0096}, 
288    {"P1.7",   0x0097}, 
289    {"p1",     0x0090}, 
290    {"p1.0",   0x0090}, 
291    {"p1.1",   0x0091}, 
292    {"p1.2",   0x0092}, 
293    {"p1.3",   0x0093}, 
294    {"p1.4",   0x0094}, 
295    {"p1.5",   0x0095}, 
296    {"p1.6",   0x0096}, 
297    {"p1.7",   0x0097}, 
298    {"P2",     0x00A0}, 
299    {"P2.0",   0x00A0}, 
300    {"P2.1",   0x00A1}, 
301    {"P2.2",   0x00A2},
302    {"P2.3",   0x00A3},
303    {"P2.4",   0x00A4},
304    {"P2.5",   0x00A5},
305    {"P2.6",   0x00A6}, 
306    {"P2.7",   0x00A7},
307    {"p2",     0x00A0}, 
308    {"p2.0",   0x00A0}, 
309    {"p2.1",   0x00A1}, 
310    {"p2.2",   0x00A2},
311    {"p2.3",   0x00A3},
312    {"p2.4",   0x00A4},
313    {"p2.5",   0x00A5},
314    {"p2.6",   0x00A6}, 
315    {"p2.7",   0x00A7},
316    {"P3",     0x00B0},
317    {"P3.0",   0x00B0},
318    {"P3.1",   0x00B1},
319    {"P3.2",   0x00B2},
320    {"P3.3",   0x00B3},
321    {"P3.4",   0x00B4},
322    {"P3.5",   0x00B5},
323    {"P3.6",   0x00B6},
324    {"P3.7",   0x00B7},
325    {"p3",     0x00B0},
326    {"p3.0",   0x00B0},
327    {"p3.1",   0x00B1},
328    {"p3.2",   0x00B2},
329    {"p3.3",   0x00B3},
330    {"p3.4",   0x00B4},
331    {"p3.5",   0x00B5},
332    {"p3.6",   0x00B6},
333    {"p3.7",   0x00B7},
334    {"PCON",   0x0087},
335    {"pcon",   0x0087},
336    {"PS",     0x00BC},
337    {"ps",     0x00BC},
338    {"PSW",    0x00D0},
339    {"PSW.0",  0x00D0},
340    {"PSW.1",  0x00D1},
341    {"PSW.2",  0x00D2},
342    {"PSW.3",  0x00D3},
343    {"PSW.4",  0x00D4},
344    {"PSW.5",  0x00D5},
345    {"PSW.6",  0x00D6},
346    {"PSW.7",  0x00D7},
347    {"psw",    0x00D0},
348    {"psw.0",  0x00D0},
349    {"psw.1",  0x00D1},
350    {"psw.2",  0x00D2},
351    {"psw.3",  0x00D3},
352    {"psw.4",  0x00D4},
353    {"psw.5",  0x00D5},
354    {"psw.6",  0x00D6},
355    {"psw.7",  0x00D7},
356    {"PT0",    0x00B9},
357    {"pt0",    0x00B9},
358    {"PT1",    0x00BB},
359    {"pt1",    0x00BB},
360    {"PT2",    0x00BD},
361    {"pt2",    0x00BD},
362    {"PX0",    0x00B8},
363    {"px0",    0x00B8},
364    {"PX1",    0x00BA},
365    {"px1",    0x00BA},
366    {"RB8",    0x009A},
367    {"rb8",    0x009A},
368    {"RCAP2H", 0x00CB},
369    {"rcap2h", 0x00CB},
370    {"RCAP2L", 0x00CA},
371    {"rcap2l", 0x00CA},
372    {"RCLK",   0x00CD},
373    {"rclk",   0x00CD},
374    {"REN",    0x009C},
375    {"ren",    0x009C},
376    {"RI",     0x0098},
377    {"ri",     0x0098},
378    {"RS0",    0x00D3},
379    {"rs0",    0x00D3},
380    {"RS1",    0x00D4},
381    {"rs1",    0x00D4},
382    {"rxd",    0x00B0},
383    {"RXD",    0x00B0},
384    {"SBUF",   0x0099},
385    {"sbuf",   0x0099},
386    {"SCON",   0x0098},
387    {"SCON.0", 0x0098},
388    {"SCON.1", 0x0099},
389    {"SCON.2", 0x009A},
390    {"SCON.3", 0x009B},
391    {"SCON.4", 0x009C},
392    {"SCON.5", 0x009D},
393    {"SCON.6", 0x009E},
394    {"SCON.7", 0x009F},
395    {"scon",   0x0098},
396    {"scon.0", 0x0098},
397    {"scon.1", 0x0099},
398    {"scon.2", 0x009A},
399    {"scon.3", 0x009B},
400    {"scon.4", 0x009C},
401    {"scon.5", 0x009D},
402    {"scon.6", 0x009E},
403    {"scon.7", 0x009F},
404    {"SM0",    0x009F},
405    {"sm0",    0x009F},
406    {"SM1",    0x009E},
407    {"sm1",    0x009E},
408    {"SM2",    0x009D},
409    {"sm2",    0x009D},
410    {"SP",     0x0081},
411    {"sp",     0x0081},
412    {"T2CON",  0x00C8},
413    {"T2CON.0",0x00C8},
414    {"T2CON.1",0x00C9},
415    {"T2CON.2",0x00CA},
416    {"T2CON.3",0x00CB},
417    {"T2CON.4",0x00CC},
418    {"T2CON.5",0x00CD},
419    {"T2CON.6",0x00CE},
420    {"T2CON.7",0x00CF},
421    {"t2con",  0x00C8},
422    {"t2con.0",0x00C8},
423    {"t2con.1",0x00C9},
424    {"t2con.2",0x00CA},
425    {"t2con.3",0x00CB},
426    {"t2con.4",0x00CC},
427    {"t2con.5",0x00CD},
428    {"t2con.6",0x00CE},
429    {"t2con.7",0x00CF},
430    {"TB8",    0x009B},
431    {"tb8",    0x009B},
432    {"TCLK",   0x00CC},
433    {"tclk",   0x00CC},
434    {"TCON",   0x0088},
435    {"TCON.0", 0x0088},
436    {"TCON.1", 0x0089},
437    {"TCON.2", 0x008A},
438    {"TCON.3", 0x008B},
439    {"TCON.4", 0x008C},
440    {"TCON.5", 0x008D},
441    {"TCON.6", 0x008E},
442    {"TCON.7", 0x008F},
443    {"tcon",   0x0088},
444    {"tcon.0", 0x0088},
445    {"tcon.1", 0x0089},
446    {"tcon.2", 0x008A},
447    {"tcon.3", 0x008B},
448    {"tcon.4", 0x008C},
449    {"tcon.5", 0x008D},
450    {"tcon.6", 0x008E},
451    {"tcon.7", 0x008F},
452    {"TF0",    0x008D},
453    {"tf0",    0x008D},
454    {"TF1",    0x008F},
455    {"tf1",    0x008F},
456    {"TF2",    0x00CF},
457    {"tf2",    0x00CF},
458    {"TH0",    0x008C},
459    {"th0",    0x008C},
460    {"TH1",    0x008D},
461    {"th1",    0x008D},
462    {"TH2",    0x00CD},
463    {"th2",    0x00CD},
464    {"TI",     0x0099},
465    {"ti",     0x0099},
466    {"TL0",    0x008A},
467    {"tl0",    0x008A},
468    {"TL1",    0x008B},
469    {"tl1",    0x008B},
470    {"TL2",    0x00CC},
471    {"tl2",    0x00CC},
472    {"TMOD",   0x0089},
473    {"tmod",   0x0089},
474    {"TR0",    0x008C},
475    {"tr0",    0x008C},
476    {"TR1",    0x008E},
477    {"tr1",    0x008E},
478    {"TR2",    0x00CA},
479    {"tr2",    0x00CA},
480    {"TXD",    0x00B1},
481    {"txd",    0x00B1},
482    {"",       0x0000},
483 };