//
-// RMAC - Reboot's Macro Assembler for all Atari computers
+// RMAC - Renamed Macro Assembler for all Atari computers
// RMAC.H - Main Application Code
-// Copyright (C) 199x Landon Dyer, 2011-2020 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2011-2021 Reboot and Friends
// RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
// Source utilised with the kind permission of Landon Dyer
//
#define _OPEN_FLAGS _O_TRUNC|_O_CREAT|_O_BINARY|_O_RDWR
#define _OPEN_INC _O_RDONLY|_O_BINARY
#define _PERM_MODE _S_IREAD|_S_IWRITE
+ #define PATH_SEPS ";"
#ifdef _MSC_VER
#if _MSC_VER > 1000
#define STRINGIZE(x) STRINGIZE_HELPER(x)
#define WARNING(desc) __pragma(message(__FILE__ "(" STRINGIZE(__LINE__) ") : Warning: " #desc))
#define inline __inline
-
// usage:
// WARNING(FIXME: Code removed because...)
#define _OPEN_FLAGS O_TRUNC|O_CREAT|O_RDWR
#define _OPEN_INC O_RDONLY
#define _PERM_MODE S_IRUSR|S_IWUSR
+ #define PATH_SEPS ";:"
#ifdef __MINGW32__
#define off64_t long
#define _OPEN_FLAGS O_TRUNC|O_CREAT|O_RDWR
#define _OPEN_INC O_RDONLY
#define _PERM_MODE S_IREAD|S_IWRITE
+ #define PATH_SEPS ":;"
// Defined here, even though the platform may not support it...
#define DO_PRAGMA(x) _Pragma (#x)
#define WARNING(desc) DO_PRAGMA(message (#desc))
#include <dirent.h>
#include "symbol.h"
+#if defined(WIN32) || defined(WIN64)
+// Ever since Visual Studio... 2017? 2019? the following constants come defined in the
+// platform SDK, which leads to endless warnings from the compiler. So let's just
+// put the pacifier on and undef them, sheesh! (No, we won't rename the defines,
+// we've been here since 1986, Visual Studio wasn't even a glimpse in the milkman's eyes,
+// if you catch my drift)
+#undef CONST
+#undef ERROR
+#undef TEXT
+#endif
+
#define BYTE uint8_t
#define WORD uint16_t
#define LONG uint32_t
// Optimisation defines
enum
{
+ // These will be set to on/off when .opt "+Oall"/"~Oall" is called
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_COUNT // Dummy, used to count number of optimisation switches
+ OPT_56K_SHORT = 10,
+ OPT_56K_AUTO_LONG = 11,
+ OPT_COUNT, // Dummy, used to count number of optimisation switches
+ // These will be unaffected by "Oall"
+ OPT_PC_RELATIVE = 30, // Enforce PC relative
+ OPT_COUNT_ALL // Dummy, used to count all switches
};
// Exported variables
extern char * firstfname;
extern int list_fd;
extern int list_pag;
-extern int as68_flag;
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
extern LONG PRGFLAGS;
-extern int optim_flags[OPT_COUNT];
-extern int optim_pc;
+extern int optim_flags[OPT_COUNT_ALL];
extern int activecpu;
extern int activefpu;
extern uint32_t org68k_address;