//
#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 glob_flag; // Assume undefined symbols are global
int lsym_flag; // Include local symbols in object file
" a: ALCYON (use this for ST)\n"
" b: BSD (use this for Jaguar)\n"
" e: ELF\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"
" ~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
// Initialise modules
InitSymbolTable(); // Symbol table
InitMark(); // Mark tape-recorder
InitMacro(); // Macro processor
InitListing(); // Listing generator
+ 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;
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++;
// o save current section (no more code generation)
// o do auto-even of all sections (or boundary alignment as requested
// through '-r')
+ // o save the last pc value for 6502 (if we used 6502 at all) and
+ // detemine if the last section contains anything
// o determine name of object file:
// - "foo.o" for linkable output;
// - "foo.prg" for GEMDOS executable (-p flag).
SaveSection();
}
+ SwitchSection(M6502);
+
+ if (sloc != currentorg[0])
+ {
+ currentorg[1] = sloc;
+ currentorg += 2;
+ }
+
if (objfname == NULL)
{
if (firstfname == NULL)