Macro names that begin with the name of an opcode were being rejected
incorrectly. “STA” would not be a valid macro name since it is an
opcode, but “STACK” should be fine.
... | ... |
@@ -99,30 +99,27 @@ findlabel(char *name) |
99 | 99 |
return NULL; |
100 | 100 |
} |
101 | 101 |
|
102 |
-static Uint8 |
|
103 |
-findmode(char *s) |
|
104 |
-{ |
|
105 |
- int i = 0; |
|
106 |
- while(s[0]) { |
|
107 |
- switch(s[0]) { |
|
108 |
- case '2': i |= (1 << 5); break; /* mode: short */ |
|
109 |
- case 'r': i |= (1 << 6); break; /* mode: return */ |
|
110 |
- case 'k': i |= (1 << 7); break; /* mode: keep */ |
|
111 |
- } |
|
112 |
- s++; |
|
113 |
- } |
|
114 |
- return i; |
|
115 |
-} |
|
116 |
- |
|
117 | 102 |
static Uint8 |
118 | 103 |
findopcode(char *s) |
119 | 104 |
{ |
120 | 105 |
int i; |
121 | 106 |
for(i = 0; i < 0x20; i++) { |
107 |
+ int m = 0; |
|
122 | 108 |
if(!scmp(ops[i], s, 3)) |
123 | 109 |
continue; |
124 | 110 |
if(!i) i |= (1 << 7); /* force keep for LIT */ |
125 |
- return i |= findmode(s + 3); |
|
111 |
+ while(s[3 + m]) { |
|
112 |
+ if(s[3 + m] == '2') |
|
113 |
+ i |= (1 << 5); /* mode: short */ |
|
114 |
+ else if(s[3 + m] == 'r') |
|
115 |
+ i |= (1 << 6); /* mode: return */ |
|
116 |
+ else if(s[3 + m] == 'k') |
|
117 |
+ i |= (1 << 7); /* mode: keep */ |
|
118 |
+ else |
|
119 |
+ return 0; /* failed to match */ |
|
120 |
+ m++; |
|
121 |
+ } |
|
122 |
+ return i; |
|
126 | 123 |
} |
127 | 124 |
return 0; |
128 | 125 |
} |