home *** CD-ROM | disk | FTP | other *** search
- /*------------------------------------------------------------------*/
- /* */
- /* MC68000 Cross Assembler */
- /* */
- /* Copyright (c) 1985 by Brian R. Anderson */
- /* */
- /* #define statements - May 31, 1987 */
- /* */
- /* This program may be copied for personal, non-commercial use */
- /* only, provided that the above copyright notice is included */
- /* on all copies of the source code. Copying for any other use */
- /* without the consent of the author is prohibited. */
- /* */
- /*------------------------------------------------------------------*/
- /* */
- /* Originally published (in Modula-2) in */
- /* Dr. Dobb's Journal, April, May, and June 1986. */
- /* */
- /* AmigaDOS conversion copyright (c) 1987 by Charlie Gibbs. */
- /* */
- /*------------------------------------------------------------------*/
-
- #define TRUE 1
- #define FALSE 0
-
- /* Assembler configuration parameters */
- #define MAXLINE 128 /* Longest source line */
- #define MAXFN 41 /* Maximum length of file name */
- #define MAXSREC 16 /* Maximum S-record data length */
- #define MAXREF 4 /* Number of line numbers in reference entry */
- #define DEFHEAP 32768 /* Default size for main heap */
- #define DEFHEAP2 1024 /* Default size for secondary heap */
- #define ObjMAX 30 /* Max. hex object code digits in listing */
-
- /* Hunk number definitions */
- #define HunkNone 0 /* Not in a hunk */
- #define HunkUnit 999
- #define HunkName 1000
- #define HunkCode 1001
- #define HunkData 1002
- #define HunkBSS 1003
- #define HunkR32 1004
- #define HunkR16 1005
- #define HunkR8 1006
- #define HunkExt 1007
- #define HunkSym 1008
- #define HunkDbg 1009
- #define HunkEnd 1010
-
- #define MEMF_FAST 0x80000000L /* Hunk must load in FAST memory */
- #define MEMF_CHIP 0x40000000L /* Hunk must load in CHIP memory */
-
- /* Hunk numbers denoting special symbol attributes */
- #define ABSHUNK 32767 /* Absolute */
-
- /* Addressing mode flag values */
- #define DReg 1 /* Data Register */
- #define ARDir 2 /* Address Register Direct */
- #define ARInd 3 /* Address Register Indirect */
- #define ARPost 4 /* Address Register with Post-Increment */
- #define ARPre 5 /* Address Register with Pre-Decrement */
- #define ARDisp 6 /* Address Register with Displacement */
- #define ARDisX 7 /* Address Register with Disp. & Index */
- #define AbsW 8 /* Absolute Short (16-bit Address) */
- #define AbsL 9 /* Absolute Long (32-bit Address) */
- #define PCDisp 10 /* Program Counter Relative, with Displacement */
- #define PCDisX 11 /* Program Counter Relative, with Disp. & Index */
- #define Imm 12 /* Immediate */
- #define MultiM 13 /* Multiple Register Move */
- #define SR 14 /* Status Register */
- #define CCR 15 /* Condition Code Register */
- #define USP 16 /* User's Stack Pointer */
- #define Null 0 /* Error Condition, or Operand missing */
-
- #define X0 0 /* Register types */
- #define Dreg 1
- #define Areg 2
-
- #define S0 0 /* Size types */
- #define Byte 1
- #define Word 2
- #define S3 3
- #define Long 4
-
- #define JMP 0x4EC0
- #define JSR 0x4E80
- #define STOP 0x4E72
- #define LINK 0x4E50
- #define SWAP 0x4840
- #define UNLK 0x4E58
- #define NOP 0x4E71
- #define CMPM 0xB108
-
- #define None 0 /* Assembler directives */
- #define Org 1
- #define Equ 2
- #define DC 3
- #define DS 4
- #define Even 5
- #define End 6
- #define Xdef 7
- #define Xref 8
- #define Page 9
- #define DoList 10
- #define NoList 11
- #define Space 12
- #define Title 13
- #define Cnop 14
- #define Include 15
- #define Set 16
- #define Macro 17
- #define If 18
- #define EndC 19
- #define MacCall 20
- #define Section 21
- #define Idnt 22
- #define DCB 23
- #define Equr 24
- #define Reg 25
-
- /* BITSETs of the modes MISSING from effective address modes */
- #define ea 0x0000 /* Effective addressing - all modes */
- #define dea 0x0002 /* Data effective addressing */
- #define mea 0x0003 /* Memory effective addressing */
- #define cea 0x081B /* Control effective addressing */
- #define aea 0x0E00 /* Alterable effective addressing */
- #define xxx 0xE000 /* extra modes: CCR/SR/USP */
-
- #define IN & /* Simulated BITSET test */
-
- /* AdrModeA bit definitions */
- #define RegMem3 0x0001 /* 0 = register, 1 = memory */
- #define Ry02 0x0002 /* Register Rx - bits 0-2 */
- #define Rx911 0x0004 /* Register Ry - bits 9-11 */
- #define Data911 0x0008 /* Immediate data - bits 9-11 */
- #define CntR911 0x0010 /* Count register or immediate data */
- #define Brnch 0x0020 /* Relative branch */
- #define DecBr 0x0040 /* Decrement and branch */
- #define Data03 0x0080 /* TRAP vector in 0-3 */
- #define Data07 0x0100 /* Data in 0-7 (MOVEQ) */
- #define OpM68D 0x0200 /* Data register in 6-8 */
- #define OpM68A 0x0400 /* Address register in 6-8 (ADDA/CMPA/SUBA) */
- #define OpM68C 0x0800 /* CMP (Compare) */
- #define OpM68X 0x1000 /* EOR (Exclusive or) */
- #define OpM68S 0x2000 /* EXT (Sign extension) */
- #define OpM68R 0x4000 /* MOVEP (Register/memory) */
- #define OpM37 0x8000 /* EXG (Exchange registers) */
- #define TwoOpsA 0xDF4D /* Two operands are required */
-
- /* AdrModeB bit definitions */
- #define Bit811 0x0001 /* Bit operations - bits 8-11 as switch */
- #define Size67 0x0002 /* 00 = byte, 01 = word, 10 = long */
- #define Size6 0x0004 /* 0 = word, 1 = long */
- #define Sz1213A 0x0008 /* 01 = byte, 11 = word, 10 = long */
- #define Sz1213 0x0010 /* 11 = word, 10 = long */
- #define Exten 0x0020 /* Opcode extension is required */
- #define EA05a 0x0040 /* Effective address - all */
- #define EA05b 0x0080 /* All except ARDir */
- #define EA05c 0x0100 /* All except ARDIR and Imm */
- #define EA05d 0x0200 /* All except PCDisp, PCDisx, and Imm */
- #define EA05e 0x0400 /* All except ARDir, PCDisp, PCDisx, and Imm */
- #define EA05f 0x0800 /* All except Dreg, ARDir, ARPost, ARPre, Imm */
- #define EA05x 0x1000 /* Dual mode - AND/OR */
- #define EA05y 0x2000 /* Dual mode - ADD/SUB */
- #define EA05z 0x4000 /* Dual mode - MOVEM */
- #define EA611 0x8000 /* Eff. Adr. in 6-11 (used only by MOVE) */
- #define TwoOpsB 0xF3DD /* Two operands are required */
- #define ImmMode 0x0422 /* Immediate instructions */
-
- #define Dummy 0 /* Error codes */
- #define TooLong 1
- #define NoCode 2
- #define SymDup 3
- #define Undef 4
- #define ModeErr 5
- #define OperErr 6
- #define BraErr 7
- #define AddrErr 8
- #define SizeErr 9
- #define EndErr 10
- #define AbsReq 11
- #define RelErr 12
- #define ManyIncl 13
- #define NoIncl 14
- #define FwdRef 15
- #define NotSFmt 16
- #define NeedLab 17
- #define Phase 18
- #define NoENDM 19
- #define DCOflo 20
- #define ManySect 21
- #define NoSecNam 22
- #define WrongTyp 23
- #define DupMac 24
-
- #define ERRMAX 10 /* Size of error message table */
-