X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=rmac.c;h=bcb587a8925e64d79a6699966da33328617b5bdd;hp=b6a7afe3745aca10df0829264af59157045149d9;hb=fbbe9b115f949735421485513154ce8abb8453eb;hpb=2037569179a89c7ea99abf7c3e75f23448ff54ff diff --git a/rmac.c b/rmac.c index b6a7afe..bcb587a 100644 --- a/rmac.c +++ b/rmac.c @@ -1,7 +1,7 @@ // // RMAC - Reboot's Macro Assembler for all Atari computers // RMAC.C - Main Application Code -// Copyright (C) 199x Landon Dyer, 2011-2019 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 // @@ -53,9 +53,11 @@ char * cmdlnexec; // Executable name, pointer to ARGV[0] char * searchpath; // Search path for include files char defname[] = "noname.o"; // Default output filename int optim_flags[OPT_COUNT]; // Specific optimisations on/off matrix +int optim_pc = 0; // Enforce PC relative int activecpu = CPU_68000; // Active 68k CPU (68000 by default) int activefpu = FPU_NONE; // Active FPU (none by default) - +int org68k_active = 0; // .org switch for 68k (only with RAW output format) +uint32_t org68k_address; // .org for 68k // // Convert a string to uppercase @@ -146,12 +148,13 @@ void DisplayHelp(void) " -dsymbol[=value] Define symbol (with optional value, default=0)\n" " -e[errorfile] Send error messages to file, not stdout\n" " -f[format] Output object file format\n" - " a: ALCYON (use this for ST)\n" + " a: ALCYON\n" " b: BSD (use this for Jaguar)\n" " e: ELF\n" " p: P56 (use this for DSP56001 only)\n" " l: LOD (use this for DSP56001 only)\n" " x: com/exe/xex (Atari 800)\n" + " r: absolute address" " -i[path] Directory to search for include files\n" " -l[filename] Create an output listing file\n" " -l*[filename] Create an output listing file without pagination\n" @@ -171,13 +174,13 @@ void DisplayHelp(void) " o7: clr.l Dx to moveq #0,Dx (off)\n" " o8: adda.w/l #x,Dy to addq.w/l #x,Dy (off)\n" " o9: adda.w/l #x,Dy to lea x(Dy),Dy (off)\n" + " op: Enforce PC relative (off)\n" " ~o[value] Turn a specific optimisation off\n" " +oall Turn all optimisations on\n" " ~oall Turn all optimisations off\n" - " -p Create an ST .prg (without symbols)\n" - " -ps Create an ST .prg (with symbols)\n" - " -px Create an ST .prg (with exsymbols)\n" - " Forces -fa\n" + " -p Create an ST .prg (without symbols). Forces -fa\n" + " -ps Create an ST .prg (with symbols). Forces -fa\n" + " -px Create an ST .prg (with exsymbols). Forces -fa\n" " -r[size] Pad segments to boundary size specified\n" " w: word (2 bytes, default alignment)\n" " l: long (4 bytes)\n" @@ -205,7 +208,7 @@ void DisplayVersion(void) "| | | | | | | | (_| | (__ \n" "|_| |_| |_| |_|\\__,_|\\___|\n" "\nReboot's Macro Assembler\n" - "Copyright (C) 199x Landon Dyer, 2011-2019 Reboot\n" + "Copyright (C) 199x Landon Dyer, 2011-2020 Reboot\n" "V%01i.%01i.%01i %s (%s)\n\n", MAJOR, MINOR, PATCH, __DATE__, PLATFORM); } @@ -231,6 +234,12 @@ int ParseOptimization(char * optstring) } else if (optstring[1] == 'o' || optstring[1] == 'O') // Turn on specific optimisation { + if (optstring[2] == 'p' || optstring[2] == 'P') + { + optim_pc = 1; + return OK; + } + int opt_no = atoi(&optstring[2]); if ((opt_no >= 0) && (opt_no < OPT_COUNT)) @@ -368,6 +377,10 @@ int Process(int argc, char ** argv) case 'X': obj_format = XEX; break; + case 'r': // -fr = Absolute address + case 'R': + obj_format = RAW; + break; default: printf("-f: unknown object format specified\n"); errcnt++;