2 // RMAC - Reboot's Macro Assembler for the Atari Jaguar Console System
3 // PARMODE.C - Addressing Modes Parser Include
4 // Copyright (C) 199x Landon Dyer, 2011 Reboot and Friends
5 // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
6 // Source Utilised with the Kind Permission of Landon Dyer
9 // This file is included (twice) to parse two addressing modes, into slightly
10 // different var names
15 if ((*tok >= KW_D0) && (*tok <= KW_D7))
20 else if ((*tok >= KW_A0) && (*tok <= KW_A7))
29 if (expr(AnEXPR, &AnEXVAL, &AnEXATTR, &AnESYM) != OK)
36 // (An,Xn[.siz][*scale])
37 // (PC,Xn[.siz][*scale])
39 // (d8,An,Xn[.siz][*scale])
41 // (d8,PC,Xn[.siz][*scale])
50 if ((*tok >= KW_A0) && (*tok <= KW_A7))
70 goto AMn_IX0; // Handle ",Xn[.siz][*scale])"
72 else if (*tok == KW_PC)
73 { // (PC,Xn[.siz][*scale])
77 // Common index handler; enter here with `tok' pointing at the comma.
79 AMn_IX0: // Handle indexed with missing expr
82 AnEXATTR = ABS | DEFINED;
84 AMn_IXN: // Handle any indexed (tok -> a comma)
89 if (*tok < KW_D0 || *tok > KW_A7)
92 AnIXREG = *tok++ & 15;
95 { // Index reg size: <empty> | .W | .L
105 case DOTB: // .B not allowed here...
110 { // scale: *1, *2, *4, *8
113 if (*tok++ != CONST || *tok > 8)
134 if (*tok++ != ')') // final ")"
139 else if (*tok == '[')
145 if (expr(AnEXPR, &AnEXVAL, &AnEXATTR, &AnESYM) != OK)
151 if ((*tok >= KW_A0) && (*tok <= KW_A7))
161 else if (*tok == ')')
170 else if (*tok == KW_PC)
177 else if (*tok == ')')
179 AMn = PCDISP; // expr(PC)
190 else if (*tok=='-' && tok[1]=='(' && ((tok[2]>=KW_A0) && (tok[2]<=KW_A7)) && tok[3]==')')
196 else if (*tok == KW_CCR)
202 else if (*tok == KW_SR)
208 else if (*tok == KW_USP)
223 if (expr(AnEXPR, &AnEXVAL, &AnEXATTR, &AnESYM) != OK)
233 else if (*tok != '(')
238 // Defined, absolute values from $FFFF8000..$00007FFF get optimized
240 if ((AnEXATTR & (TDB|DEFINED)) == DEFINED && (AnEXVAL + 0x8000) < 0x10000)
243 // Is .L forced here?
255 if ((*tok >= KW_A0) && (*tok <= KW_A7))
269 else if (*tok == KW_PC)
284 // Addressing mode OK
290 // Cleanup dirty little macros