diff --git a/src/assembler.c b/src/assembler.c index c23fd8f..d041632 100644 --- a/src/assembler.c +++ b/src/assembler.c @@ -212,6 +212,7 @@ walktoken(char *w) case ']': return 0; case '.': return 2; /* zero-page: LIT addr-lb */ case ',': return 2; /* relative: LIT addr-rel */ + case ':': return 2; /* absolute: addr-hb addr-lb */ case ';': return 3; /* absolute: LIT addr-hb addr-lb */ case '$': return shex(w + 1); case '#': return slen(w + 1) == 4 ? 3 : 2; @@ -239,6 +240,9 @@ parsetoken(char *w) return error("Address is too far", w); pushbyte((Sint8)off, 1); return ++l->refs; + } else if(w[0] == ':' && (l = findlabel(w + 1))) { /* absolute */ + pushshort(l->addr, 0); + return ++l->refs; } else if(w[0] == ';' && (l = findlabel(w + 1))) { /* absolute */ pushshort(l->addr, 1); return ++l->refs;