Browse code

(uxnasm) Added support for = and - runes

neauoire authored on 10/11/2022 00:21:07
Showing 1 changed files
... ...
@@ -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
 		}