1 #define align(x)		/* ((x) = ((int) (x) + (4-1)) & ~(4-1)) */
2 #define LOW_BYTE 0		/* must be changed for big-endian */
3 
4 /* const.h - constants for assembler */
5 
6 /* major switches */
7 
8 #undef  I80386			/* generate 80386 code */
9 #define MC6809			/* generate 6809 code */
10 #define MNSIZE			/* allow byte size in mnemonic, e.g. "movb" */
11 #undef  SOS_EDOS		/* source OS is EDOS */
12 
13 /* defaults */
14 
15 #define DIRCHAR '/'		/* character separating filename from dir */
16 #define INBUFSIZE 8192
17 #define SOS_EOLSTR "\012"
18 
19 /* defaults modified by switches */
20 
21 #ifdef SOS_EDOS
22 # undef INBUFSIZE
23 # define INBUFSIZE 512
24 # undef SOS_EOLSTR
25 # define SOS_EOLSTR "\015\012"
26 # define STAKSIZ 256		/* table grows up to stack less this */
27 #endif
28 
29 /* booleans */
30 
31 #define FALSE 0
32 #define TRUE 1
33 
34 /* ASCII constants */
35 
36 #define ETB  23
37 
38 /* C tricks */
39 
40 #define EXTERN extern
41 #define FORWARD static
42 #define PRIVATE static
43 #define PUBLIC
44 #define NULL 0
45 
46 /* O/S constants */
47 
48 #define CREAT_PERMS 0666
49 #define EOF (-1)
50 #define STDIN 0
51 #define STDOUT 1
52 
53 /* register codes (internal to assembler) */
54 
55 #ifdef I80386
56 
57 /* index regs must be first */
58 
59 #define BPREG 0
60 #define BXREG 1
61 #define DIREG 2
62 #define SIREG 3
63 #define MAX16BITINDREG 3
64 
65 #define EAXREG 4
66 #define EBPREG 5
67 #define EBXREG 6
68 #define ECXREG 7
69 #define EDIREG 8
70 #define EDXREG 9
71 #define ESIREG 10
72 #define ESPREG 11
73 #define MAXINDREG 11
74 
75 #define AXREG 12
76 #define CXREG 13
77 #define DXREG 14
78 #define SPREG 15
79 
80 #define AHREG 16
81 #define ALREG 17
82 #define BHREG 18
83 #define BLREG 19
84 #define CHREG 20
85 #define CLREG 21
86 #define DHREG 22
87 #define DLREG 23
88 
89 #define CSREG 24
90 #define DSREG 25
91 #define ESREG 26
92 #define FSREG 27
93 #define GSREG 28
94 #define SSREG 29
95 
96 #define CR0REG 30
97 #define CR2REG 31
98 #define CR3REG 32
99 #define DR0REG 33
100 #define DR1REG 34
101 #define DR2REG 35
102 #define DR3REG 36
103 #define DR6REG 37
104 #define DR7REG 38
105 #define TR6REG 39
106 #define TR7REG 40
107 
108 #define NOREG 41
109 
110 #endif				/* I80386 */
111 
112 #ifdef MC6809
113 
114 /* index regs must be first, then PC, then other regs */
115 
116 #define AREG  5
117 #define BREG  6
118 #define CCREG 7
119 #define DPREG 8
120 #define DREG  9
121 #define MAXINDREG 3
122 #define NOREG 10
123 #define PCREG 4
124 #define SREG  0
125 #define UREG  1
126 #define XREG  2
127 #define YREG  3
128 
129 #endif
130 
131 #ifdef I80386
132 
133 /* type and size keywords */
134 
135 #define BYTEOP     0
136 #define DWORDOP    1
137 #define FWORDOP    2
138 #define FAROP      3
139 #define PTROP      4
140 #define PWORDOP    5
141 #define QWORDOP    6
142 #define TBYTEOP    7
143 #define WORDOP     8
144 #endif
145 
146 /* special chars */
147 
148 #define EOL		0
149 #define MACROCHAR	'?'
150 
151 /* symbol codes */
152 
153 /* the first 2 must be from chars in identifiers */
154 #define IDENT		0
155 #define INTCONST	1
156 
157 /* the next few are best for other possibly-multi-char tokens */
158 #define ADDOP		2	/* also ++ */
159 #define BINCONST	3
160 #define CHARCONST	4
161 #define GREATERTHAN	5	/* also >> and context-sensitive */
162 #define HEXCONST	6
163 #define LESSTHAN	7	/* also << and context-sensitive */
164 #define SUBOP		8	/* also -- */
165 #define WHITESPACE	9
166 
167 #define ANDOP		10
168 #define COMMA		11
169 #define EOLSYM		12
170 #define EQOP		13
171 #define IMMEDIATE	14
172 #define INDIRECT	15
173 #define LBRACKET	16
174 #define LPAREN		17
175 #define MACROARG	18
176 #define NOTOP		19
177 #define OROP		20
178 #define OTHERSYM	21
179 #define POSTINCOP	22
180 #define PREDECOP	23
181 #define RBRACKET	24
182 #define RPAREN		25
183 #define SLASH		26	/* context-sensitive */
184 #define SLOP		27
185 #define SROP		28
186 #define STAR		29	/* context-sensitive */
187 #define STRINGCONST	30
188 #define COLON		31
189 
190 /* these are from assembler errors module */
191 
192 /* syntax errors */
193 
194 #define COMEXP 0
195 #define DELEXP 1
196 #define FACEXP 2
197 #define IREGEXP 3
198 #define LABEXP 4
199 #define LPEXP 5
200 #define OPEXP 6
201 #define RBEXP 7
202 #define REGEXP 8
203 #define RPEXP 9
204 #define SPEXP 10
205 
206 /* expression errors */
207 
208 #define ABSREQ 11
209 #define NONIMPREQ 12
210 #define RELBAD 13
211 
212 /* label errors */
213 
214 #define ILLAB 14
215 #define MACUID 15
216 #define MISLAB 16
217 #define MNUID 17
218 #define REGUID 18
219 #define RELAB 19
220 #define UNBLAB 20
221 #define UNLAB 21
222 #define VARLAB 22
223 
224 /* addressing errors */
225 
226 #define ABOUNDS 23
227 #define DBOUNDS 24
228 #define ILLMOD 25
229 #define ILLREG 26
230 
231 /* control structure errors */
232 
233 #define ELSEBAD 27
234 #define ELSEIFBAD 27
235 #define ENDBBAD 28
236 #define ENDIFBAD 27
237 #define EOFBLOCK 29
238 #define EOFIF 30
239 
240 #define EOFLC 31
241 #define EOFMAC 32
242 #define FAILERR 33
243 
244 /* overflow errors */
245 
246 #define BLOCKOV 34
247 #define BWRAP 35
248 #define COUNTOV 36
249 #define COUNTUN 37
250 #define GETOV 38
251 #define IFOV 39
252 
253 #define LINLONG 40
254 #define MACOV 41
255 #define OBJSYMOV 42
256 #define OWRITE 43
257 #define PAROV 44
258 #define SYMOV 45
259 #define SYMOUTOV 46
260 
261 /* i/o errors */
262 
263 #define OBJOUT 47
264 
265 /* miscellaneous errors */
266 
267 #define CTLINS 48
268 #define FURTHER 49
269 #define NOIMPORT 50
270 #define NOTIMPLEMENTED 51
271 #define REENTER 52
272 #define SEGREL 53
273 
274 /* warnings */
275 
276 #define MINWARN 54
277 #define ALREADY 54
278 #define SHORTB 55
279 
280 /* symbol table entry */
281 
282 				/* type entry contains following flags */
283 #define ENTBIT   (1<<0)		/* entry point (=OBJ_N_MASK) */
284 #define COMMBIT  (1<<1)		/* common */
285 #define LABIT    (1<<2)		/* label (a PC location or defined by EQU) */
286 #define MNREGBIT (1<<3)		/* mnemonic for op or pseudo-op, or register */
287 #define MACBIT   (1<<4)		/* macro */
288 #define REDBIT   (1<<5)		/* redefined */
289 #define VARBIT   (1<<6)		/* variable (i.e. something defined by SET) */
290 #define EXPBIT   (1<<7)		/* exported (= OBJ_E_MASK) */
291 
292 				/* data entry contains following flags, valid */
293 				/* for expressions as well as syms */
294 #define PAGE1    (1<<0)		/* page 1 machine op = MNREGBIT \ PAGE1 */
295 #define PAGE2    (1<<1)		/* page 2 machine op = MNREGBIT \ PAGE2 */
296 #define REGBIT   (1<<2)		/* register = MNREGBIT \ REGBIT */
297 #define SIZEBIT  (1<<3)		/* sizing mnemonic = MNREGBIT \ SIZEBIT */
298 #define SEGM     15		/* 1st 4 bits reused for segment if !MNREGBIT */
299 #define RELBIT   (1<<4)		/* relative (= OBJ_A_MASK) */
300 #define FORBIT   (1<<5)		/* forward referenced */
301 #define IMPBIT   (1<<6)		/* imported (= OBJ_I_MASK) */
302 #define UNDBIT   (1<<7)		/* undefined */
303 
304 /* pseudo-op routine numbers */
305 /* conditionals are first, this is used to test if op is a conditional */
306 
307 #define ELSEOP      0
308 #define ELSEIFOP    1
309 #define ELSEIFCOP   2
310 #define ENDIFOP     3
311 #define IFOP        4
312 #define IFCOP       5
313 #define MAXCOND     6		/* limit of conditionals */
314 
315 #define BLOCKOP     6
316 #define COMMOP      7
317 #define ENDOP       8
318 #define ENDBOP      9
319 #define ENTEROP    10
320 #define ENTRYOP    11
321 #define EQUOP      12
322 #define EXPORTOP   13
323 #define FAILOP     14
324 #define FCBOP      15
325 #define FCCOP      16
326 #define FDBOP      17
327 #define GETOP      18
328 #define IDENTOP    19
329 #define IMPORTOP   20
330 #define _LISTOP    21
331 #define LOCOP      22
332 #define _MACLISTOP 23
333 #define MACROOP    24
334 #define _MAPOP     25
335 #define ORGOP      26
336 #define RMBOP      27
337 #define SETOP      28
338 #define SETDPOP    29
339 #define _WARNOP    30
340 
341 #ifdef I80386
342 
343 /* further pseudo-ops */
344 
345 #define BSSOP      31
346 #define COMMOP1    32
347 #define DATAOP     33
348 #define TEXTOP     34
349 #define USE16OP    35
350 #define USE32OP    36
351 
352 /* machine-op routine numbers */
353 
354 #define ARPL       37
355 #define BCC        38
356 #define BOUND      39
357 #define CALL       40
358 #define DIVMUL     41
359 #define ENTER      42
360 #define GROUP1     43
361 #define GROUP2     44
362 #define GROUP6     45
363 #define GROUP7     46
364 #define GROUP8     47
365 #define GvEv       48
366 #define IMUL       49
367 #define IN         50
368 #define INCDEC     51
369 #define INHER      52
370 #define INHER16    53
371 #define INHER32    54
372 #define INHER_A    55
373 #define INT        56
374 #define JCC        57
375 #define JCXZ       58
376 #define LEA        59
377 #define LOAD_FULL_POINTER 60
378 #define MOV        61
379 #define MOVX       62
380 #define NEGNOT     63
381 #define OUT        64
382 #define PUSHPOP    65
383 #define RET        66
384 #define RETF       67
385 #define SEG        68
386 #define SETCC      69
387 #define SH_DOUBLE  70
388 #define TEST       71
389 #define XCHG       72
390 
391 /* further pseudo-ops */
392 
393 #define BLKWOP     73
394 #define EVENOP     74
395 #define FQBOP      75
396 #define ALIGNOP    76
397 
398 /* further machine-ops */
399 
400 #define CALLI      77
401 
402 /* yet further pseudo-ops */
403 
404 #define LCOMMOP    78
405 #define LCOMMOP1   79
406 
407 #endif				/* I80386 */
408 
409 #ifdef MC6809
410 
411 /* machine-op routine numbers */
412 
413 #define ALL        31		/* all address modes allowed, like LDA */
414 #define ALTER      32		/* all but immediate, like STA */
415 #define IMMED      33		/* immediate only (ANDCC, ORCC) */
416 #define INDEXD     34		/* indexed (LEA's) */
417 #define INHER      35		/* inherent, like CLC or CLRA */
418 #define LONG       36		/* long branches */
419 #define SHORT      37		/* short branches */
420 #define SSTAK      38		/* S-stack (PSHS, PULS) */
421 #define SWAP       39		/* TFR, EXG */
422 #define USTAK      40		/* U-stack (PSHU,PULU) */
423 
424 /* yet further pseudo-ops */
425 
426 #define LCOMMOP    41
427 
428 #endif
429 
430 /* object code format (Introl) */
431 
432 #define OBJ_SEGSZ_TWO  0x02	/* size 2 code for segment size descriptor */
433 
434 #define OBJ_MAX_ABS_LEN  64	/* max length of chunk of absolute code */
435 
436 #define OBJ_ABS        0x40	/* absolute code command */
437 #define OBJ_OFFSET_REL 0x80	/* offset relocation command */
438 #define OBJ_SET_SEG    0x20	/* set segment command */
439 #define OBJ_SKIP_1     0x11	/* skip with 1 byte count */
440 #define OBJ_SKIP_2     0x12	/* skip with 2 byte count */
441 #define OBJ_SKIP_4     0x13	/* skip with 4 byte count */
442 #define OBJ_SYMBOL_REL 0xC0	/* symbol relocation command */
443 
444 #define OBJ_A_MASK     0x10	/* absolute bit(symbols) */
445 #if OBJ_A_MASK - RELBIT		/* must match internal format (~byte 1 -> 0) */
446 oops - RELBIT misplaced
447 #endif
448 #define OBJ_E_MASK     0x80	/* exported bit (symbols) */
449 #if OBJ_E_MASK - EXPBIT		/* must match internal format (byte 0 -> 0) */
450 oops - EXPBIT misplaced
451 #endif
452 #define OBJ_I_MASK     0x40	/* imported bit (symbols) */
453 #if OBJ_I_MASK - IMPBIT		/* must match internal format (byte 1 -> 0) */
454 oops - IMPBIT misplaced
455 #endif
456 #define OBJ_N_MASK     0x01	/* entry bit (symbols) */
457 #if OBJ_N_MASK - ENTBIT		/* must match internal format (byte 0 -> 1) */
458 oops - ENTBIT misplaced
459 #endif
460 #define OBJ_SA_MASK    0x20	/* size allocation bit (symbols) */
461 #define OBJ_SZ_ONE     0x40	/* size one code for symbol value */
462 #define OBJ_SZ_TWO     0x80	/* size two code for symbol value */
463 #define OBJ_SZ_FOUR    0xC0	/* size four code for symbol value */
464 
465 #define OBJ_R_MASK     0x20	/* PC-rel bit (off & sym reloc commands) */
466 #define OBJ_SEGM_MASK  0x0F	/* segment mask (symbols, off reloc command) */
467 
468 #define OBJ_OF_MASK    0x03	/* offset size code for symbol reloc */
469 #define OBJ_S_MASK     0x04	/* symbol number size code for symbol reloc */
470 
471 #define SYMLIS_NAMELEN 26
472 #define SYMLIS_LEN (sizeof (struct sym_listing_s))
473 
474 #define FILNAMLEN 64		/* max length of a file name */
475 #define LINLEN 256		/* max length of input line */
476 #define LINUM_LEN 5		/* length of formatted line number */
477 
478 #define SPTSIZ 1024		/* number of symbol ptrs */
479 				/* pseudo-op flags */
480 #define POPHI 1			/* set to print hi byte of adr */
481 #define POPLO 2			/* to print lo byte of ADR */
482 #define POPLC 4			/* to print LC */
483 #define POPLONG 8		/* to print high word of ADR */
484 #define MAXBLOCK 8		/* max nesting level of BLOCK stack */
485 #define MAXGET 8		/* max nesting level of GET stack */
486 #define MAXIF 8			/* max nesting level of IF stack */
487 #define MACPSIZ (128/sizeof (struct schain_s))
488 				/* size of macro param buffer */
489 #define MAXMAC 8		/* max nesting level of macro stack */
490 #define NLOC 16			/* number of location counters */
491 #ifdef I80386
492 #define NO_SIB 0340		/* illegal sib (3 with 4) to mean no sib */
493 #endif
494 
495 /* special segments */
496 
497 #define BSSLOC 3
498 #define DATALOC 3
499 #define DPLOC 2
500 #define STRLOC 1
501 #define TEXTLOC 0
502