(uxnasm) Cleanup

This commit is contained in:
neauoire 2021-11-27 14:07:25 -08:00
parent 4b6efa6fc6
commit fbbddf50d6
1 changed files with 31 additions and 35 deletions

View File

@ -14,10 +14,6 @@ WITH REGARD TO THIS SOFTWARE.
#define TRIM 0x0100 #define TRIM 0x0100
#define LENGTH 0x10000 #define LENGTH 0x10000
#define REFERENCES 2048
#define LABELS 512
#define MACROS 256
typedef unsigned char Uint8; typedef unsigned char Uint8;
typedef signed char Sint8; typedef signed char Sint8;
typedef unsigned short Uint16; typedef unsigned short Uint16;
@ -40,9 +36,9 @@ typedef struct {
typedef struct { typedef struct {
Uint8 data[LENGTH]; Uint8 data[LENGTH];
Uint16 ptr, length, llen, mlen, rlen; Uint16 ptr, length, llen, mlen, rlen;
Label labels[LABELS]; Label labels[512];
Macro macros[MACROS]; Macro macros[256];
Reference refs[REFERENCES]; Reference refs[2048];
char scope[64]; char scope[64];
} Program; } Program;
@ -132,7 +128,7 @@ makemacro(char *name, FILE *f)
return error("Macro name is hex number", name); return error("Macro name is hex number", name);
if(findopcode(name) || scmp(name, "BRK", 4) || !slen(name)) if(findopcode(name) || scmp(name, "BRK", 4) || !slen(name))
return error("Macro name is invalid", name); return error("Macro name is invalid", name);
if(p.mlen == MACROS) if(p.mlen == 256)
return error("Too many macros", name); return error("Too many macros", name);
m = &p.macros[p.mlen++]; m = &p.macros[p.mlen++];
scpy(name, m->name, 64); scpy(name, m->name, 64);
@ -156,7 +152,7 @@ makelabel(char *name)
return error("Label name is hex number", name); return error("Label name is hex number", name);
if(findopcode(name) || scmp(name, "BRK", 4) || !slen(name)) if(findopcode(name) || scmp(name, "BRK", 4) || !slen(name))
return error("Label name is invalid", name); return error("Label name is invalid", name);
if(p.llen == LABELS) if(p.llen == 512)
return error("Too many labels", name); return error("Too many labels", name);
l = &p.labels[p.llen++]; l = &p.labels[p.llen++];
l->addr = p.ptr; l->addr = p.ptr;
@ -165,20 +161,6 @@ makelabel(char *name)
return 1; return 1;
} }
static int
doinclude(const char *filename)
{
FILE *f;
char w[64];
if(!(f = fopen(filename, "r")))
return error("Include failed to open", filename);
while(fscanf(f, "%63s", w) == 1)
if(!tokenize(w, f))
return error("Unknown token", w);
fclose(f);
return 1;
}
static void static void
writebyte(Uint8 b, int lit) writebyte(Uint8 b, int lit)
{ {
@ -231,6 +213,20 @@ prefill(char *scope, char *label, Uint16 addr)
r->addr = addr; r->addr = addr;
} }
static int
doinclude(const char *filename)
{
FILE *f;
char w[64];
if(!(f = fopen(filename, "r")))
return error("Include failed to open", filename);
while(fscanf(f, "%63s", w) == 1)
if(!tokenize(w, f))
return error("Unknown token", w);
fclose(f);
return 1;
}
static int static int
tokenize(char *w, FILE *f) tokenize(char *w, FILE *f)
{ {
@ -368,18 +364,6 @@ resolve(void)
return 1; return 1;
} }
static void
review(char *filename)
{
int i;
for(i = 0; i < p.llen; ++i)
if(p.labels[i].name[0] >= 'A' && p.labels[i].name[0] <= 'Z')
continue; /* Ignore capitalized labels(devices) */
else if(!p.labels[i].refs)
fprintf(stderr, "--- Unused label: %s\n", p.labels[i].name);
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);
}
static int static int
assemble(FILE *f) assemble(FILE *f)
{ {
@ -392,6 +376,18 @@ assemble(FILE *f)
return 1; return 1;
} }
static void
review(char *filename)
{
int i;
for(i = 0; i < p.llen; ++i)
if(p.labels[i].name[0] >= 'A' && p.labels[i].name[0] <= 'Z')
continue; /* Ignore capitalized labels(devices) */
else if(!p.labels[i].refs)
fprintf(stderr, "--- Unused label: %s\n", p.labels[i].name);
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);
}
int int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {