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 = NULL; // 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
" 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\n"
" -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"
" 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"
}
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))
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++;
break;
case 'i': // Set directory search path
case 'I':
+ {
searchpath = argv[argno] + 2;
+
+ // Check to see if include paths actually exist
+ if (strlen(searchpath) > 0)
+ {
+ DIR * test = opendir(searchpath);
+
+ if (test == NULL)
+ {
+ printf("Invalid include path: %s\n", searchpath);
+ errcnt++;
+ return errcnt;
+ }
+
+ closedir(test);
+ }
+
break;
+ }
case 'l': // Produce listing file
case 'L':
if (*(argv[argno] + 2) == '*')