//
// RMAC - Reboot's Macro Assembler for all Atari computers
// RMAC.C - Main Application Code
-// Copyright (C) 199x Landon Dyer, 2011-2018 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2011-2019 Reboot and Friends
// RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
// Source utilised with the kind permission of Landon Dyer
//
#include "6502.h"
#include "debug.h"
#include "direct.h"
+#include "dsp56k.h"
#include "error.h"
#include "expr.h"
#include "listing.h"
int err_flag; // '-e' specified
int err_fd; // File to write error messages to
int rgpu, rdsp; // Assembling Jaguar GPU or DSP code
+int robjproc; // Assembling Jaguar Object Processor code
int dsp56001; // Assembling DSP 56001 code
int list_fd; // File to write listing to
int regbank; // RISC register bank
int activefpu = FPU_NONE; // Active FPU (none by default)
+//
+// Convert a string to uppercase
+//
+void strtoupper(char * s)
+{
+ while (*s)
+ *s++ &= 0xDF;
+}
+
+
//
// Manipulate file extension.
//
" a: ALCYON (use this for ST)\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"
" -i[path] Directory to search for include files\n"
" -l[filename] Create an output listing file\n"
" 6502\n"
" tom\n"
" jerry\n"
+ " 56001\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"
"| | | | | | | | (_| | (__ \n"
"|_| |_| |_| |_|\\__,_|\\___|\n"
"\nReboot's Macro Assembler\n"
- "Copyright (C) 199x Landon Dyer, 2011-2017 Reboot\n"
+ "Copyright (C) 199x Landon Dyer, 2011-2018 Reboot\n"
"V%01i.%01i.%01i %s (%s)\n\n", MAJOR, MINOR, PATCH, __DATE__, PLATFORM);
}
err_flag = 0; // Initialise error flag
rgpu = 0; // Initialise GPU assembly flag
rdsp = 0; // Initialise DSP assembly flag
+ robjproc = 0; // Initialise OP assembly flag
lsym_flag = 1; // Include local symbols in object file
regbank = BANK_N; // No RISC register bank specified
orgactive = 0; // Not in RISC org section
case 'E':
obj_format = ELF;
break;
+ case 'l': // -fl = LOD
+ case 'L':
+ obj_format = LOD;
+ break;
+ case 'p': // -fp = P56
+ case 'P':
+ obj_format = P56;
+ break;
case 'x': // -fx = COM/EXE/XEX
case 'X':
obj_format = XEX;
// - "foo.o" for linkable output;
// - "foo.prg" for GEMDOS executable (-p flag).
SaveSection();
+ int temp_section = cursect;
for(i=TEXT; i<=BSS; i<<=1)
{
currentorg += 2;
}
+ // This looks like an awful kludge... !!! FIX !!!
+ if (temp_section & (M56001P | M56001X | M56001Y))
+ {
+ SwitchSection(temp_section);
+
+ if (chptr != dsp_currentorg->start)
+ {
+ dsp_currentorg->end = chptr;
+ dsp_currentorg++;
+ }
+ }
+
+ SwitchSection(TEXT);
+
if (objfname == NULL)
{
if (firstfname == NULL)
if (errcnt == 0)
{
if ((fd = open(objfname, _OPEN_FLAGS, _PERM_MODE)) < 0)
- cantcreat(objfname);
+ CantCreateFile(objfname);
if (verb_flag)
{