uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit ad6528be661d815e49e8299668b7d99fc04fa4a7
parent a2ed2226f304b767538ef33e93b269be895978a3
Author: Devine Lu Linvega <aliceffekt@gmail.com>
Date:   Tue, 26 Mar 2024 13:03:47 -0700

(uxnasm) Clearer error for subroutine ref error

Diffstat:
Msrc/uxnasm.c | 13++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/uxnasm.c b/src/uxnasm.c @@ -398,12 +398,13 @@ resolve(void) Uint16 a; for(i = 0; i < p.refs_len; i++) { Reference *r = &p.refs[i]; + Uint8 *rom = p.data + r->addr; switch(r->rune) { case '_': case ',': if(!(l = findlabel(r->name))) return error_top("Unknown relative reference", r->name); - p.data[r->addr] = (Sint8)(l->addr - r->addr - 2); + *rom = (Sint8)(l->addr - r->addr - 2); if((Sint8)p.data[r->addr] != (l->addr - r->addr - 2)) return error_top("Relative reference is too far", r->name); l->refs++; @@ -412,7 +413,7 @@ resolve(void) case '.': if(!(l = findlabel(r->name))) return error_top("Unknown zero-page reference", r->name); - p.data[r->addr] = l->addr & 0xff; + *rom = l->addr & 0xff; l->refs++; break; case ':': @@ -420,18 +421,16 @@ resolve(void) case ';': if(!(l = findlabel(r->name))) return error_top("Unknown absolute reference", r->name); - p.data[r->addr] = l->addr >> 0x8; - p.data[r->addr + 1] = l->addr & 0xff; + *rom++ = l->addr >> 0x8, *rom = l->addr & 0xff; l->refs++; break; case '?': case '!': default: if(!(l = findlabel(r->name))) - return error_top("Unknown absolute reference", r->name); + return error_top("Unknown subroutine reference", r->name); a = l->addr - r->addr - 2; - p.data[r->addr] = a >> 0x8; - p.data[r->addr + 1] = a & 0xff; + *rom++ = a >> 0x8, *rom = a & 0xff; l->refs++; break; }