Added _rune
This commit is contained in:
parent
02ecc2ee7d
commit
f59b214ac1
40
src/uxnasm.c
40
src/uxnasm.c
|
@ -303,26 +303,30 @@ parse(char *w, FILE *f)
|
||||||
if(!writeshort(shex(w + 1), 1)) return 0;
|
if(!writeshort(shex(w + 1), 1)) return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '.': /* literal byte zero-page */
|
case '_': /* raw byte relative */
|
||||||
makereference(p.scope, w, p.ptr);
|
makereference(p.scope, w, p.ptr);
|
||||||
if(!writelitbyte(0xff)) return 0;
|
if(!writebyte(0xff)) return 0;
|
||||||
break;
|
break;
|
||||||
case ',': /* literal byte relative */
|
case ',': /* literal byte relative */
|
||||||
makereference(p.scope, w, p.ptr);
|
makereference(p.scope, w, p.ptr);
|
||||||
if(!writelitbyte(0xff)) return 0;
|
if(!writelitbyte(0xff)) return 0;
|
||||||
break;
|
break;
|
||||||
case ';': /* literal short absolute */
|
case '-': /* raw byte absolute */
|
||||||
makereference(p.scope, w, p.ptr);
|
makereference(p.scope, w, p.ptr);
|
||||||
if(!writeshort(0xffff, 1)) return 0;
|
if(!writebyte(0xff)) return 0;
|
||||||
|
break;
|
||||||
|
case '.': /* literal byte zero-page */
|
||||||
|
makereference(p.scope, w, p.ptr);
|
||||||
|
if(!writelitbyte(0xff)) return 0;
|
||||||
break;
|
break;
|
||||||
case ':': /* raw short absolute */
|
case ':': /* raw short absolute */
|
||||||
case '=':
|
case '=':
|
||||||
makereference(p.scope, w, p.ptr);
|
makereference(p.scope, w, p.ptr);
|
||||||
if(!writeshort(0xffff, 0)) return 0;
|
if(!writeshort(0xffff, 0)) return 0;
|
||||||
break;
|
break;
|
||||||
case '-': /* raw byte absolute */
|
case ';': /* literal short absolute */
|
||||||
makereference(p.scope, w, p.ptr);
|
makereference(p.scope, w, p.ptr);
|
||||||
if(!writebyte(0xff)) return 0;
|
if(!writeshort(0xffff, 1)) return 0;
|
||||||
break;
|
break;
|
||||||
case '"': /* raw string */
|
case '"': /* raw string */
|
||||||
i = 0;
|
i = 0;
|
||||||
|
@ -365,10 +369,12 @@ resolve(void)
|
||||||
for(i = 0; i < p.rlen; i++) {
|
for(i = 0; i < p.rlen; i++) {
|
||||||
Reference *r = &p.refs[i];
|
Reference *r = &p.refs[i];
|
||||||
switch(r->rune) {
|
switch(r->rune) {
|
||||||
case '.':
|
case '_':
|
||||||
if(!(l = findlabel(r->name)))
|
if(!(l = findlabel(r->name)))
|
||||||
return error("Unknown zero-page reference", r->name);
|
return error("Unknown relative reference", r->name);
|
||||||
p.data[r->addr + 1] = l->addr & 0xff;
|
p.data[r->addr] = (Sint8)(l->addr - r->addr - 2);
|
||||||
|
if((Sint8)p.data[r->addr] != (l->addr - r->addr - 2))
|
||||||
|
return error("Relative reference is too far", r->name);
|
||||||
l->refs++;
|
l->refs++;
|
||||||
break;
|
break;
|
||||||
case ',':
|
case ',':
|
||||||
|
@ -379,11 +385,16 @@ resolve(void)
|
||||||
return error("Relative reference is too far", r->name);
|
return error("Relative reference is too far", r->name);
|
||||||
l->refs++;
|
l->refs++;
|
||||||
break;
|
break;
|
||||||
case ';':
|
case '-':
|
||||||
if(!(l = findlabel(r->name)))
|
if(!(l = findlabel(r->name)))
|
||||||
return error("Unknown absolute reference", r->name);
|
return error("Unknown absolute reference", r->name);
|
||||||
p.data[r->addr + 1] = l->addr >> 0x8;
|
p.data[r->addr] = l->addr & 0xff;
|
||||||
p.data[r->addr + 2] = l->addr & 0xff;
|
l->refs++;
|
||||||
|
break;
|
||||||
|
case '.':
|
||||||
|
if(!(l = findlabel(r->name)))
|
||||||
|
return error("Unknown zero-page reference", r->name);
|
||||||
|
p.data[r->addr + 1] = l->addr & 0xff;
|
||||||
l->refs++;
|
l->refs++;
|
||||||
break;
|
break;
|
||||||
case ':':
|
case ':':
|
||||||
|
@ -394,10 +405,11 @@ resolve(void)
|
||||||
p.data[r->addr + 1] = l->addr & 0xff;
|
p.data[r->addr + 1] = l->addr & 0xff;
|
||||||
l->refs++;
|
l->refs++;
|
||||||
break;
|
break;
|
||||||
case '-':
|
case ';':
|
||||||
if(!(l = findlabel(r->name)))
|
if(!(l = findlabel(r->name)))
|
||||||
return error("Unknown absolute reference", r->name);
|
return error("Unknown absolute reference", r->name);
|
||||||
p.data[r->addr] = l->addr & 0xff;
|
p.data[r->addr + 1] = l->addr >> 0x8;
|
||||||
|
p.data[r->addr + 2] = l->addr & 0xff;
|
||||||
l->refs++;
|
l->refs++;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue