diff options
author | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2020-12-20 19:05:01 +0300 |
---|---|---|
committer | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2020-12-20 19:05:01 +0300 |
commit | c5bea4967c6905b770af30a134ba898da63b6639 (patch) | |
tree | 3a9b2116186514e5396da72e8b78b4a94279d0ed /source | |
parent | 1808604f06bdfce915dc890c3b3f3e3e2d5f7d54 (diff) |
Arrays in .nl files
Diffstat (limited to 'source')
-rw-r--r-- | source/symbol.c | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/source/symbol.c b/source/symbol.c index 7ab96ea..306043b 100644 --- a/source/symbol.c +++ b/source/symbol.c @@ -110,7 +110,7 @@ void stlist(char *file, int bank_offset) struct t_symbol *local; FILE *files[256]; memset(files, 0, sizeof(files)); - int i, j, bank, fnum; + int i, bank, fnum; for (i = 0; i < sizeof(hash_tbl) / sizeof(hash_tbl[0]); i++) { sym = hash_tbl[i]; @@ -123,23 +123,22 @@ void stlist(char *file, int bank_offset) 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); - //fprintf(files[fnum], "$%04X#%s# %d %d\n", sym->value, sym->name+1, sym->reserved, sym->equ); - fprintf(files[fnum], "$%04X#%s#\n", sym->value, sym->name+1); - for (j = 1; j < sym->data_size; j++) - //fprintf(files[fnum], "$%04X#%s+%d# %d %d\n", sym->value+j, sym->name+1, j, sym->reserved, sym->equ); - fprintf(files[fnum], "$%04X#%s+%d#\n", sym->value+j, sym->name+1, j); + if (sym->data_size <= 1) + fprintf(files[fnum], "$%04X#%s#\n", sym->value, sym->name+1); + else + fprintf(files[fnum], "$%04X/%02X#%s#\n", sym->value, sym->data_size, sym->name+1); + 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); - //fprintf(files[fnum], "$%04X#%s (%s)# %d %d\n", local->value, local->name+1, sym->name+1, local->reserved, local->equ); - fprintf(files[fnum], "$%04X#%s (%s)#\n", local->value, local->name+1, sym->name+1); - for (j = 1; j < sym->data_size; j++) - //fprintf(files[fnum], "$%04X#%s+%d (%s)# %d %d\n", local->value+j, local->name+1, j, sym->name+1, local->reserved, local->equ); - fprintf(files[fnum], "$%04X#%s+%d (%s)#\n", local->value+j, local->name+1, j, sym->name+1); - local = local->next; + if (sym->data_size <= 1) + fprintf(files[fnum], "$%04X#%s (%s)#\n", local->value, local->name+1, sym->name+1); + else + fprintf(files[fnum], "$%04X/%02X#%s (%s)#\n", local->value, local->data_size, local->name+1, sym->name+1); + local = local->next; } } while ((sym = sym->next) != NULL); } @@ -192,7 +191,7 @@ struct t_symbol *stlook(int flag) else { /* search symbol */ hash = symhash(); - sym = hash_tbl[hash]; + sym = hash_tbl[hash]; while (sym) { if (!strcmp(symbol, sym->name)) break; @@ -236,15 +235,15 @@ struct t_symbol *stinstall(int hash, int type) } /* init the symbol struct */ - sym->type = if_expr ? IFUNDEF : UNDEF; + sym->type = if_expr ? IFUNDEF : UNDEF; sym->value = 0; sym->local = NULL; - sym->proc = NULL; - sym->bank = RESERVED_BANK; - sym->nb = 0; - sym->size = 0; - sym->page = -1; - sym->vram = -1; + sym->proc = NULL; + sym->bank = RESERVED_BANK; + sym->nb = 0; + sym->size = 0; + sym->page = -1; + sym->vram = -1; sym->pal = -1; sym->refcnt = 0; sym->reserved = 0; @@ -334,7 +333,7 @@ labldef(int lval, int flag) /* second pass */ else { if ((lablptr->value != lval) || - ((flag) && (bank < bank_limit) && (lablptr->bank != bank_base + bank))) + ((flag) && (bank < bank_limit) && (lablptr->bank != bank_base + bank))) { fatal_error("Internal error[1]!"); return (-1); |