//
// RMAC - Reboot's Macro Assembler for the Atari Jaguar Console System
// RMAC.C - Main Application Code
-// Copyright (C) 199x Landon Dyer, 2011 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2011 - 2016 Reboot and Friends
// RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
// Source utilised with the kind permission of Landon Dyer
//
int obj_format; // Object format flag
int debug; // [1..9] Enable debugging levels
int err_flag; // '-e' specified
-int err_fd; // File to write error messages to
+int err_fd; // File to write error messages to
int rgpu, rdsp; // Assembling Jaguar GPU or DSP code
int list_fd; // File to write listing to
int regbank; // RISC register bank
int segpadsize; // Segment padding size
-int endian; // Host processor endianess
+int endian; // Host processor endianess (0 = LE, 1 = BE)
char * objfname; // Object filename pointer
char * firstfname; // First source filename
char * cmdlnexec; // Executable name, pointer to ARGV[0]
-char * searchpath; // Search path for include files
+char * searchpath; // Search path for include files
char defname[] = "noname.o"; // Default output filename
int optim_flags[OPT_COUNT]; // Specific optimisations on/off matrix
// Clobber any old extension, if requested
if (stripp)
{
- for(s=beg; *s && *s!='.'; ++s)
+ for(s=beg; *s && *s!='.'; ++s)
;
*s = '\0';
// Return 'item'nth element of semicolon-seperated pathnames specified in the
// enviroment string 's'. Copy the pathname to 'buf'. Return 0 if the 'item'
// nth path doesn't exist.
-//
+//
// ['item' ranges from 0 to N-1, where N = #elements in search path]
//
int nthpath(char * env_var, int itemno, char * buf)
" -f[format] Output object file format\n"
" a: ALCYON (use this for ST)\n"
" b: BSD (use this for Jaguar)\n"
+ " e: ELF\n"
" -i[path] Directory to search for include files\n"
" -l[filename] Create an output listing file\n"
" -n Don't do things behind your back in RISC assembler\n"
"| | | | | | | | (_| | (__ \n"
"|_| |_| |_| |_|\\__,_|\\___|\n"
"\nReboot's Macro Assembler\n"
- "Copyright (C) 199x Landon Dyer, 2011-2015 Reboot\n"
+ "Copyright (C) 199x Landon Dyer, 2011-2017 Reboot\n"
"V%01i.%01i.%01i %s (%s)\n\n", MAJOR, MINOR, PATCH, __DATE__, PLATFORM);
}
}
-//
+//
// Process command line arguments and do an assembly
//
int Process(int argc, char ** argv)
SYM * sy; // Pointer to a symbol record
char * s; // String pointer
int fd; // File descriptor
- char fnbuf[FNSIZ]; // Filename buffer
+ char fnbuf[FNSIZ]; // Filename buffer
int i; // Iterator
errcnt = 0; // Initialise error count
case 'A':
obj_format = ALCYON;
break;
- case 'b': // -fb = BSD (Jaguar Recommended)
+ case 'b': // -fb = BSD (Jaguar Recommended: 3 out 4 jaguars recommend it!)
case 'B':
obj_format = BSD;
break;
+ case 'e': // -fe = ELF
+ case 'E':
+ obj_format = ELF;
+ break;
default:
printf("-f: unknown object format specified\n");
errcnt++;
case 'R':
switch(argv[argno][2])
{
- case 'w': case 'W': segpadsize = 2; break;
+ case 'w': case 'W': segpadsize = 2; break;
case 'l': case 'L': segpadsize = 4; break;
case 'p': case 'P': segpadsize = 8; break;
case 'd': case 'D': segpadsize = 16; break;
// Set legacy optimisation flags to on
// and everything else to off
memset(optim_flags, 0, OPT_COUNT * sizeof(int));
- optim_flags[OPT_ABS_SHORT] =
+ optim_flags[OPT_ABS_SHORT] =
optim_flags[OPT_MOVEL_MOVEQ] =
- optim_flags[OPT_BSR_BCC_S] = 1;
+ optim_flags[OPT_BSR_BCC_S] = 1;
cmdlnexec = argv[0]; // Obtain executable name
// If commands were passed in, process them
if (argc > 1)
- return Process(argc - 1, argv + 1);
+ return Process(argc - 1, argv + 1);
DisplayVersion();
DisplayHelp();