diff options
author | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2018-10-08 23:11:43 +0300 |
---|---|---|
committer | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2018-10-08 23:26:31 +0300 |
commit | 105995c6cd3b07688d916f8fd311cbe2833c4f70 (patch) | |
tree | d1316bc07c9ac02259afe5b2aecd5e6cfea45994 | |
parent | bce3bc99e1c339999c87eb6b78311b0e72fb7383 (diff) |
Fix for labels in symbols generationsv3.1
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | source/command.c | 1 | ||||
-rw-r--r-- | source/defs.h | 1 | ||||
-rw-r--r-- | source/main.c | 2 | ||||
-rw-r--r-- | source/symbol.c | 20 |
5 files changed, 11 insertions, 15 deletions
@@ -1,4 +1,4 @@ -# nesasm CE v3.0b - a 6502 assembler with specific NES support +# nesasm CE v3.1 - a 6502 assembler with specific NES support Just another modification of nesasm. Based on modification by Tim Hentenaar which is based on modification by Bob Rost which is based on modification of nesasm 2.51 from MagicKit. diff --git a/source/command.c b/source/command.c index ba83ad7..226b334 100644 --- a/source/command.c +++ b/source/command.c @@ -349,6 +349,7 @@ do_equ(int *ip) return; /* assign value to the label */ + lablptr->equ = 1; labldef(value, 0); /* output line */ diff --git a/source/defs.h b/source/defs.h index d789f88..b55d9b0 100644 --- a/source/defs.h +++ b/source/defs.h @@ -182,6 +182,7 @@ typedef struct t_symbol { int pal; int refcnt; int reserved; + int equ; int data_type; int data_size; char name[SBOLSZ]; diff --git a/source/main.c b/source/main.c index 34457ca..ebdf9cd 100644 --- a/source/main.c +++ b/source/main.c @@ -25,7 +25,7 @@ * */ -#define VERSION "v3.0b" +#define VERSION "v3.1" #define DESCRIPTION "a 6502 assembler with specific NES support" #define GITHUB_URL "https://github.com/ClusterM/nesasm/" diff --git a/source/symbol.c b/source/symbol.c index 0e284b1..d1a7090 100644 --- a/source/symbol.c +++ b/source/symbol.c @@ -78,8 +78,6 @@ colsym(int *ip) /* error */ if (err) { fatal_error("Reserved symbol!"); -// symbol[0] = 0; -// symbol[1] = '\0'; return (0); } @@ -119,29 +117,24 @@ void stlist(char *file, int bank_offset) if (!sym) continue; do { - /* predefined symbols */ - if (strcmp(sym->name+1, "_bss_end") == 0) continue; - if (strcmp(sym->name+1, "_bank_base") == 0) continue; - if (strcmp(sym->name+1, "_nb_bank") == 0) continue; - if (strcmp(sym->name+1, "_call_bank") == 0) continue; + /* skipping reserved symbols and constants */ + if (sym->reserved || sym->equ) continue; bank = sym->value < 0x8000 ? -1 : sym->bank/2 + bank_offset; fnum = bank >= 0 ? bank : (sizeof(files) / sizeof(FILE*) - 1); files[fnum] = stlist_file(files[fnum], file, bank); - if (sym->data_size > 0) - fprintf(files[fnum], "$%04X#%s#\n", sym->value, sym->name+1); + fprintf(files[fnum], "$%04X#%s# %d %d\n", sym->value, sym->name+1, sym->reserved, sym->equ); for (j = 1; j < sym->data_size; j++) - fprintf(files[fnum], "$%04X#%s+%d#\n", sym->value+j, sym->name+1, j); + fprintf(files[fnum], "$%04X#%s+%d# %d %d\n", sym->value+j, sym->name+1, j, sym->reserved, sym->equ); local = sym->local; while (local) { bank = local->value < 0x8000 ? -1 : local->bank/2 + bank_offset; fnum = bank >= 0 ? bank : (sizeof(files) / sizeof(FILE*) - 1); files[fnum] = stlist_file(files[fnum], file, bank); - if (local->data_size > 0) - fprintf(files[fnum], "$%04X#%s (%s)#\n", local->value, local->name+1, sym->name+1); + fprintf(files[fnum], "$%04X#%s (%s)# %d %d\n", local->value, local->name+1, sym->name+1, local->reserved, local->equ); for (j = 1; j < sym->data_size; j++) - fprintf(files[fnum], "$%04X#%s+%d (%s)#\n", local->value+j, local->name+1, j, sym->name+1); + fprintf(files[fnum], "$%04X#%s+%d (%s)# %d %d\n", local->value+j, local->name+1, j, sym->name+1, local->reserved, local->equ); local = local->next; } } while ((sym = sym->next) != NULL); @@ -251,6 +244,7 @@ struct t_symbol *stinstall(int hash, int type) sym->pal = -1; sym->refcnt = 0; sym->reserved = 0; + sym->equ = 0; sym->data_type = -1; sym->data_size = 0; strcpy(sym->name, symbol); |