X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=rmac.h;h=357d70e7babf507457bcb1c3356a68901946a806;hp=48317499ddf7114a71efdf67555b736a25b20ac6;hb=9afaf60ca24cdb08f900ae584107e29e3af46566;hpb=29b32d134bc12831a8ddd098bf9aeeda26dcfe7c diff --git a/rmac.h b/rmac.h index 4831749..357d70e 100644 --- a/rmac.h +++ b/rmac.h @@ -1,7 +1,7 @@ // // RMAC - Reboot's Macro Assembler for all Atari computers // RMAC.H - Main Application Code -// Copyright (C) 199x Landon Dyer, 2011-2017 Reboot and Friends +// Copyright (C) 199x Landon Dyer, 2011-2020 Reboot and Friends // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986 // Source utilised with the kind permission of Landon Dyer // @@ -137,6 +137,12 @@ { (a)[(r + 0)] = (uint8_t)((v) & 0xFF); \ (a)[(r + 1)] = (uint8_t)((v) >> 8); } +// In DSP56001 mode, this is useful: +#define SETBE24(a, v) \ + { (a)[0] = (uint8_t)(((v) >> 16) & 0xFF); \ + (a)[1] = (uint8_t)(((v) >> 8) & 0xFF); \ + (a)[2] = (uint8_t)((v) & 0xFF); } + // Byteswap crap #define BYTESWAP16(x) ((((x) & 0x00FF) << 8) | (((x) & 0xFF00) >> 8)) #define BYTESWAP32(x) ((((x) & 0x000000FF) << 24) | (((x) & 0x0000FF00) << 8) | (((x) & 0x00FF0000) >> 8) | (((x) & 0xFF000000) >> 24)) @@ -147,6 +153,7 @@ // Non-target specific stuff // #include +#include #include "symbol.h" #define BYTE uint8_t @@ -171,12 +178,12 @@ enum { ALCYON, // Alcyon/DRI C object format -MWC, // Mark Williams object format BSD, // BSD object format ELF, // ELF object format LOD, // DSP 56001 object format P56, // DSP 56001 object format XEX, // COM/EXE/XEX/whatever a8 object format +RAW, // Output at absolute address }; // Assembler token @@ -212,14 +219,21 @@ PTR #define EQUATED 0x0800 // Symbol was equated #define SDECLLIST 0x0400 // Symbol is on 'sdecl'-order list #define FLOAT 0x0200 // Symbol is a floating point value +#define RISCREG 0x0100 // Symbol is a RISC register // Expression spaces, ORed with symbol and expression attributes above #define ABS 0x0000 // In absolute space #define TEXT 0x0001 // Relative to text #define DATA 0x0002 // Relative to data #define BSS 0x0004 // Relative to BSS +//OK, this is bad, mmkay? These are treated as indices into an array which means that this was never meant to be defined this way--at least if it was, it was a compromise that has come home to bite us all in the ass. !!! FIX !!! #define M6502 0x0008 // 6502/microprocessor (absolute) -#define TDB (TEXT|DATA|BSS) // Mask for text+data+bss +#define M56001P 0x0010 // DSP 56001 Program RAM +#define M56001X 0x0020 // DSP 56001 X RAM +#define M56001Y 0x0040 // DSP 56001 Y RAM +#define M56001L 0x0080 // DSP 56001 L RAM +#define TDB (TEXT|DATA|BSS) // Mask for TEXT+DATA+BSS +#define M56KPXYL (M56001P|M56001X|M56001Y|M56001L) // Mask for 56K stuff // Sizes #define SIZB 0x0001 // .b @@ -270,11 +284,14 @@ enum OPT_ABS_SHORT = 0, OPT_MOVEL_MOVEQ = 1, OPT_BSR_BCC_S = 2, - OPT_INDIRECT_DISP = 3, + OPT_OUTER_DISP = 3, OPT_LEA_ADDQ = 4, - OPT_BASE_DISP = 5, + OPT_020_DISP = 5, // 020+ base and outer displacements (bd, od) absolute long to short OPT_NULL_BRA = 6, OPT_CLR_DX = 7, + OPT_ADDA_ADDQ = 8, + OPT_ADDA_LEA = 9, + OPT_PC_RELATIVE = 10, // Enforce PC relative OPT_COUNT // Dummy, used to count number of optimisation switches }; @@ -282,6 +299,7 @@ enum extern int verb_flag; extern int debug; extern int rgpu, rdsp; +extern int robjproc; extern int dsp56001; extern int err_flag; extern int err_fd; @@ -294,7 +312,7 @@ extern int m6502; extern int list_flag; extern int glob_flag; extern int lsym_flag; -extern int sbra_flag; +extern int optim_warn_flag; extern int obj_format; extern int legacy_flag; extern int prg_flag; // 1 = write ".PRG" relocatable executable @@ -302,8 +320,11 @@ extern LONG PRGFLAGS; extern int optim_flags[OPT_COUNT]; extern int activecpu; extern int activefpu; +extern uint32_t org68k_address; +extern int org68k_active; // Exported functions +void strtoupper(char * s); char * fext(char *, char *, int); int nthpath(char *, int, char *); int ParseOptimization(char * optstring);