//
-// RMAC - Reboot's Macro Assembler for the Atari Jaguar Console System
+// RMAC - Reboot's Macro Assembler for all Atari computers
// PROCLN.C - Line Processing
-// Copyright (C) 199x Landon Dyer, 2017 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2011-2017 Reboot and Friends
// RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
// Source utilised with the kind permission of Landon Dyer
//
const char lab_ignored[] = "label ignored";
// Table to convert an addressing-mode number to a bitmask.
-LONG amsktab[0112] = {
+LONG amsktab[0124] = {
M_DREG, M_DREG, M_DREG, M_DREG,
M_DREG, M_DREG, M_DREG, M_DREG,
M_AINDEXED, M_AINDEXED, M_AINDEXED, M_AINDEXED,
M_AINDEXED, M_AINDEXED, M_AINDEXED, M_AINDEXED,
- M_ABSW, // 070
- M_ABSL, // 071
- M_PCDISP, // 072
- M_PCINDEXED, // 073
- M_IMMED, // 074
- 0L, // 075
- 0L, // 076
- 0L, // 077
- M_ABASE, // 0100
- M_MEMPOST, // 0101
- M_MEMPRE, // 0102
- M_PCBASE, // 0103
- M_PCMPOST, // 0104
- M_PCMPRE, // 0105
- M_AM_USP, // 0106
- M_AM_SR, // 0107
- M_AM_CCR, // 0110
- M_AM_NONE // 0111
-}; // 0112 length
+ M_ABSW, // 070
+ M_ABSL, // 071
+ M_PCDISP, // 072
+ M_PCINDEXED, // 073
+ M_IMMED, // 074
+ 0L, // 075
+ 0L, // 076
+ 0L, // 077
+ M_ABASE, // 0100
+ M_MEMPOST, // 0101
+ M_MEMPRE, // 0102
+ M_PCBASE, // 0103
+ M_PCMPOST, // 0104
+ M_PCMPRE, // 0105
+ M_AM_USP, // 0106
+ M_AM_SR, // 0107
+ M_AM_CCR, // 0110
+ M_AM_NONE, // 0111
+ 0x30, // 0112
+ 0x30, // 0113
+ 0L, // 0114
+ 0L, // 0115
+ 0L, // 0116
+ 0L, // 0117
+ M_CREG, // 0120 (caches - TODO: is this correct or does it need its own bitfield?)
+ M_CREG, // 0121
+ M_FREG, // 0122
+ M_FPSCR // 0123
+}; // 0123 length
// Function prototypes
// First token MUST be a symbol (Shamus: not sure why :-/)
if (*tok != SYMBOL)
{
+ if (*tok>=KW_D0 && *tok<=KW_R31)
+ error("cannot use reserved keyword as label name or .equ");
+ else
error("syntax error; expected symbol");
goto loop;
}
siz = SIZL, tok++;
else if (*tok == DOTB)
siz = SIZB, tok++;
+ else if(*tok == DOTD)
+ siz = SIZD, tok++;
+ else if(*tok == DOTP)
+ siz = SIZP, tok++;
+ else if(*tok == DOTQ)
+ siz = SIZQ, tok++;
+ else if(*tok == DOTS)
+ siz = SIZS, tok++;
+ else if(*tok == DOTX)
+ siz = SIZX, tok++;
+
// Do special directives (500..999) (These must be handled in "real time")
if (state >= 500 && state < 1000)