| ... | ... |
@@ -316,9 +316,14 @@ parse(char *w, FILE *f) |
| 316 | 316 |
if(!writeshort(0xffff, 1)) return 0; |
| 317 | 317 |
break; |
| 318 | 318 |
case ':': /* raw short absolute */ |
| 319 |
+ case '=': |
|
| 319 | 320 |
makereference(p.scope, w, p.ptr); |
| 320 | 321 |
if(!writeshort(0xffff, 0)) return 0; |
| 321 | 322 |
break; |
| 323 |
+ case '-': /* raw byte absolute */ |
|
| 324 |
+ makereference(p.scope, w, p.ptr); |
|
| 325 |
+ if(!writebyte(0xff)) return 0; |
|
| 326 |
+ break; |
|
| 322 | 327 |
case '"': /* raw string */ |
| 323 | 328 |
i = 0; |
| 324 | 329 |
while((c = w[++i])) |
| ... | ... |
@@ -375,6 +380,7 @@ resolve(void) |
| 375 | 380 |
l->refs++; |
| 376 | 381 |
break; |
| 377 | 382 |
case ';': |
| 383 |
+ case '=': |
|
| 378 | 384 |
if(!(l = findlabel(r->name))) |
| 379 | 385 |
return error("Unknown absolute reference", r->name);
|
| 380 | 386 |
p.data[r->addr + 1] = l->addr >> 0x8; |
| ... | ... |
@@ -384,10 +390,16 @@ resolve(void) |
| 384 | 390 |
case ':': |
| 385 | 391 |
if(!(l = findlabel(r->name))) |
| 386 | 392 |
return error("Unknown absolute reference", r->name);
|
| 387 |
- p.data[r->addr + 0] = l->addr >> 0x8; |
|
| 393 |
+ p.data[r->addr] = l->addr >> 0x8; |
|
| 388 | 394 |
p.data[r->addr + 1] = l->addr & 0xff; |
| 389 | 395 |
l->refs++; |
| 390 | 396 |
break; |
| 397 |
+ case '-': |
|
| 398 |
+ if(!(l = findlabel(r->name))) |
|
| 399 |
+ return error("Unknown absolute reference", r->name);
|
|
| 400 |
+ p.data[r->addr] = l->addr & 0xff; |
|
| 401 |
+ l->refs++; |
|
| 402 |
+ break; |
|
| 391 | 403 |
default: |
| 392 | 404 |
return error("Unknown reference", r->name);
|
| 393 | 405 |
} |