... | ... |
@@ -185,13 +185,15 @@ makelabel(char *name) |
185 | 185 |
} |
186 | 186 |
|
187 | 187 |
static int |
188 |
-addref(Label *l) |
|
188 |
+addref(Label *l, Uint8 rel) |
|
189 | 189 |
{ |
190 |
- int pos = cpos(l->name, '/'); |
|
191 |
- if(pos != -1) { |
|
192 |
- char root[64]; |
|
193 |
- Label *rl = findlabel(scpy(l->name, root, pos)); |
|
194 |
- ++rl->refs; |
|
190 |
+ if(rel) { |
|
191 |
+ int pos = cpos(l->name, '/'); |
|
192 |
+ if(pos != -1) { |
|
193 |
+ char root[64]; |
|
194 |
+ Label *rl = findlabel(scpy(l->name, root, pos)); |
|
195 |
+ ++rl->refs; |
|
196 |
+ } |
|
195 | 197 |
} |
196 | 198 |
return ++l->refs; |
197 | 199 |
} |
... | ... |
@@ -244,19 +246,19 @@ parsetoken(char *w) |
244 | 246 |
if(l->addr > 0xff) |
245 | 247 |
return error("Address is not in zero page", w); |
246 | 248 |
pushbyte(l->addr, 1); |
247 |
- return addref(l); |
|
249 |
+ return addref(l, 1); |
|
248 | 250 |
} else if(w[0] == ',' && (l = findlabel(w + 1))) { /* relative */ |
249 | 251 |
int off = l->addr - p.ptr - 3; |
250 | 252 |
if(off < -126 || off > 126) |
251 | 253 |
return error("Address is too far", w); |
252 | 254 |
pushbyte((Sint8)off, 1); |
253 |
- return addref(l); |
|
255 |
+ return addref(l, 0); |
|
254 | 256 |
} else if(w[0] == ':' && (l = findlabel(w + 1))) { /* raw */ |
255 | 257 |
pushshort(l->addr, 0); |
256 |
- return addref(l); |
|
258 |
+ return addref(l, 1); |
|
257 | 259 |
} else if(w[0] == ';' && (l = findlabel(w + 1))) { /* absolute */ |
258 | 260 |
pushshort(l->addr, 1); |
259 |
- return addref(l); |
|
261 |
+ return addref(l, 1); |
|
260 | 262 |
} else if(findopcode(w) || scmp(w, "BRK", 4)) { /* opcode */ |
261 | 263 |
pushbyte(findopcode(w), 0); |
262 | 264 |
return 1; |