| ... | ... |
@@ -135,14 +135,16 @@ makemacro(char *name, FILE *f) |
| 135 | 135 |
if(findopcode(name) || scmp(name, "BRK", 4) || !slen(name)) |
| 136 | 136 |
return error("Macro name is invalid", name);
|
| 137 | 137 |
if(p.mlen == 256) |
| 138 |
- return error("Too many macros", name);
|
|
| 138 |
+ return error("Macros limit exceeded", name);
|
|
| 139 | 139 |
m = &p.macros[p.mlen++]; |
| 140 | 140 |
scpy(name, m->name, 64); |
| 141 | 141 |
while(fscanf(f, "%63s", word) == 1) {
|
| 142 | 142 |
if(word[0] == '{') continue;
|
| 143 | 143 |
if(word[0] == '}') break; |
| 144 |
- if(m->len > 64) |
|
| 145 |
- return error("Macro too large", name);
|
|
| 144 |
+ if(word[0] == '%') |
|
| 145 |
+ return error("Macro error", name);
|
|
| 146 |
+ if(m->len >= 64) |
|
| 147 |
+ return error("Macro size exceeded", name);
|
|
| 146 | 148 |
scpy(word, m->items[m->len++], 64); |
| 147 | 149 |
} |
| 148 | 150 |
return 1; |
| ... | ... |
@@ -159,7 +161,7 @@ makelabel(char *name) |
| 159 | 161 |
if(findopcode(name) || scmp(name, "BRK", 4) || !slen(name)) |
| 160 | 162 |
return error("Label name is invalid", name);
|
| 161 | 163 |
if(p.llen == 512) |
| 162 |
- return error("Too many labels", name);
|
|
| 164 |
+ return error("Labels limit exceeded", name);
|
|
| 163 | 165 |
l = &p.labels[p.llen++]; |
| 164 | 166 |
l->addr = p.ptr; |
| 165 | 167 |
l->refs = 0; |
| ... | ... |
@@ -173,7 +175,7 @@ makereference(char *scope, char *label, Uint16 addr) |
| 173 | 175 |
char subw[64]; |
| 174 | 176 |
Reference *r; |
| 175 | 177 |
if(p.rlen == 2048) |
| 176 |
- return error("Too many references", label);
|
|
| 178 |
+ return error("References limit exceeded", label);
|
|
| 177 | 179 |
r = &p.refs[p.rlen++]; |
| 178 | 180 |
if(label[1] == '&') |
| 179 | 181 |
scpy(sublabel(subw, scope, label + 2), r->name, 64); |
| ... | ... |
@@ -187,6 +189,8 @@ makereference(char *scope, char *label, Uint16 addr) |
| 187 | 189 |
static void |
| 188 | 190 |
writebyte(Uint8 b) |
| 189 | 191 |
{
|
| 192 |
+ if(p.ptr < TRIM) |
|
| 193 |
+ fprintf(stderr, "-- Writing in zero-page: %02x\n", b); |
|
| 190 | 194 |
p.data[p.ptr++] = b; |
| 191 | 195 |
p.length = p.ptr; |
| 192 | 196 |
litlast = 0; |
| ... | ... |
@@ -221,7 +225,7 @@ doinclude(const char *filename) |
| 221 | 225 |
FILE *f; |
| 222 | 226 |
char w[64]; |
| 223 | 227 |
if(!(f = fopen(filename, "r"))) |
| 224 |
- return error("Include failed to open", filename);
|
|
| 228 |
+ return error("Include missing", filename);
|
|
| 225 | 229 |
while(fscanf(f, "%63s", w) == 1) |
| 226 | 230 |
if(!tokenize(w, f)) |
| 227 | 231 |
return error("Unknown token", w);
|
| ... | ... |
@@ -390,8 +394,14 @@ review(char *filename) |
| 390 | 394 |
if(p.labels[i].name[0] >= 'A' && p.labels[i].name[0] <= 'Z') |
| 391 | 395 |
continue; /* Ignore capitalized labels(devices) */ |
| 392 | 396 |
else if(!p.labels[i].refs) |
| 393 |
- fprintf(stderr, "--- Unused label: %s\n", p.labels[i].name); |
|
| 394 |
- fprintf(stderr, "Assembled %s in %d bytes(%.2f%% used), %d labels, %d macros.\n", filename, p.length - TRIM, p.length / 652.80, p.llen, p.mlen); |
|
| 397 |
+ fprintf(stderr, "-- Unused label: %s\n", p.labels[i].name); |
|
| 398 |
+ fprintf(stderr, |
|
| 399 |
+ "Assembled %s in %d bytes(%.2f%% used), %d labels, %d macros.\n", |
|
| 400 |
+ filename, |
|
| 401 |
+ p.length - TRIM, |
|
| 402 |
+ p.length / 652.80, |
|
| 403 |
+ p.llen, |
|
| 404 |
+ p.mlen); |
|
| 395 | 405 |
} |
| 396 | 406 |
|
| 397 | 407 |
int |
| ... | ... |
@@ -401,7 +411,7 @@ main(int argc, char *argv[]) |
| 401 | 411 |
if(argc < 3) |
| 402 | 412 |
return !error("usage", "input.tal output.rom");
|
| 403 | 413 |
if(!(src = fopen(argv[1], "r"))) |
| 404 |
- return !error("Invalid Input", argv[1]);
|
|
| 414 |
+ return !error("Invalid input", argv[1]);
|
|
| 405 | 415 |
if(!assemble(src)) |
| 406 | 416 |
return !error("Assembly", "Failed to assemble rom.");
|
| 407 | 417 |
if(!(dst = fopen(argv[2], "wb"))) |