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