//
#include "rmac.h"
+#include "6502.h"
+#include "debug.h"
+#include "direct.h"
#include "error.h"
-#include "listing.h"
-#include "procln.h"
-#include "token.h"
#include "expr.h"
-#include "sect.h"
+#include "listing.h"
#include "mark.h"
#include "macro.h"
+#include "object.h"
+#include "procln.h"
#include "riscasm.h"
-#include "direct.h"
-#include "version.h"
-#include "debug.h"
+#include "sect.h"
#include "symbol.h"
-#include "object.h"
+#include "token.h"
+#include "version.h"
int perm_verb_flag; // Permanently verbose, interactive mode
int list_flag; // "-l" listing flag on command line
+int list_pag = 1; // Enable listing pagination by default
int verb_flag; // Be verbose about what's going on
int m6502; // 1, assembling 6502 code
int as68_flag; // as68 kludge mode
int err_flag; // '-e' specified
int err_fd; // File to write error messages to
int rgpu, rdsp; // Assembling Jaguar GPU or DSP code
+int dsp56001; // Assembling DSP 56001 code
int list_fd; // File to write listing to
int regbank; // RISC register bank
int segpadsize; // Segment padding size
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 activecpu=CPU_68000; // Active 68k CPU (68000 by default)
+int activefpu=FPU_NONE; // Active FPU (none by default)
//
// Manipulate file extension.
" a: ALCYON (use this for ST)\n"
" b: BSD (use this for Jaguar)\n"
" e: ELF\n"
- " x: com/exe/xex (Atari 800)\n"
+ " x: com/exe/xex (Atari 800)\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"
" -n Don't do things behind your back in RISC assembler\n"
" -o file Output file name\n"
" +o[value] Turn a specific optimisation on\n"
- " Available optimisation values and default settings:\n"
- " o0: Absolute long adddresses to word (on)\n"
- " o1: move.l #x,dn/an to moveq (on)\n"
- " o2: Word branches to short (on)\n"
- " o3: Outer displacement 0(an) to (an) (off)\n"
+ " Available optimisation values and default settings:\n"
+ " o0: Absolute long adddresses to word (on)\n"
+ " o1: move.l #x,dn/an to moveq (on)\n"
+ " o2: Word branches to short (on)\n"
+ " o3: Outer displacement 0(an) to (an) (off)\n"
+ " o4: lea size(An),An to addq #size,An (off)\n"
+ " o5: Absolute long base displacement to word (off)\n"
" ~o[value] Turn a specific optimisation off\n"
" +oall Turn all optimisations on\n"
" ~oall Turn all optimisations off\n"
orgactive = 0; // Not in RISC org section
orgwarning = 0; // No ORG warning issued
segpadsize = 2; // Initialise segment padding size
- m6502 = 0; // 6502 mode off by default
+ m6502 = 0; // 6502 mode off by default
// Initialise modules
InitSymbolTable(); // Symbol table
InitMark(); // Mark tape-recorder
InitMacro(); // Macro processor
InitListing(); // Listing generator
- Init6502(); // 6502 assembler
+ Init6502(); // 6502 assembler
// Process command line arguments and assemble source files
- for(argno=0; argno<argc; ++argno)
+ for(argno=0; argno<argc; argno++)
{
if (*argv[argno] == '-')
{
case 'E':
obj_format = ELF;
break;
- case 'x': // -fx = COM/EXE/XEX
- case 'X':
- obj_format = XEX;
- break;
+ case 'x': // -fx = COM/EXE/XEX
+ case 'X':
+ obj_format = XEX;
+ break;
default:
printf("-f: unknown object format specified\n");
errcnt++;
break;
case 'l': // Produce listing file
case 'L':
- list_fname = argv[argno] + 2;
+ if (*(argv[argno] + 2) == '*')
+ {
+ list_fname = argv[argno] + 3;
+ list_pag = 0; // Special case - turn off pagination
+ }
+ else
+ {
+ list_fname = argv[argno] + 2;
+ }
+
listing = 1;
list_flag = 1;
lnsave++;
SaveSection();
}
- SwitchSection(M6502);
- if (sloc != currentorg[0])
- {
- currentorg[1] = sloc;
- currentorg += 2;
- }
+ SwitchSection(M6502);
+
+ if (sloc != currentorg[0])
+ {
+ currentorg[1] = sloc;
+ currentorg += 2;
+ }
if (objfname == NULL)
{