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 |
} |