From bc17e8d75410d40c8d67ad415ed63f8f5761a724 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sat, 28 Oct 2017 18:41:19 +0100 Subject: [PATCH] z80as: change object file format to fixed sized symbol records This makes life a lot easier for the other tools --- Applications/MWC/cmd/asz80/as4.c | 12 +++--------- Applications/MWC/cmd/asz80/nm.c | 15 +++++---------- Applications/MWC/cmd/asz80/obj.h | 7 +++++-- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/Applications/MWC/cmd/asz80/as4.c b/Applications/MWC/cmd/asz80/as4.c index 340d0be8..170f7268 100644 --- a/Applications/MWC/cmd/asz80/as4.c +++ b/Applications/MWC/cmd/asz80/as4.c @@ -141,15 +141,9 @@ static void putsymbol(SYM *s, FILE *ofp) flag |= s->s_segment; } putc(flag, ofp); - for (i = 0; i < 16; i++) { - putc(s->s_id[i], ofp); - if (!s->s_id[i]) - break; - } - if (!(flag & S_UNKNOWN)) { - putc(s->s_value, ofp); - putc(s->s_value >> 8, ofp); - } + fwrite(cs->s_id, 16, 1, ofp); + putc(s->s_value, ofp); + putc(s->s_value >> 8, ofp); } static void enumerate(SYM *s, FILE *dummy) diff --git a/Applications/MWC/cmd/asz80/nm.c b/Applications/MWC/cmd/asz80/nm.c index 49d8be4a..c96be538 100644 --- a/Applications/MWC/cmd/asz80/nm.c +++ b/Applications/MWC/cmd/asz80/nm.c @@ -54,19 +54,14 @@ static int do_nm(FILE *fp, const char *name) return 0; type = (uint8_t)c; base++; - for (i = 0; i < 16; i++) { - c = fgetc(fp); - base++; - symname[i] = (char)c; - if (c == 0) - break; - } + fread(symname, 16, 1, fp); + base += 16; symname[16] = 0; /* Address if defined */ + addr = fgetc(fp); + addr |= fgetc(fp) << 8; + base += 2; if (!(type & S_UNKNOWN)) { - addr = fgetc(fp); - addr |= fgetc(fp) << 8; - base += 2; c = segname[type & S_SEGMENT]; /* Showing undefined only */ if (show_undef) diff --git a/Applications/MWC/cmd/asz80/obj.h b/Applications/MWC/cmd/asz80/obj.h index c441e009..003dd35d 100644 --- a/Applications/MWC/cmd/asz80/obj.h +++ b/Applications/MWC/cmd/asz80/obj.h @@ -42,12 +42,15 @@ struct objhdr /* symbols and debug are in the format uint8_t flags - char name[1..16] (0 terminated if < 16) - uint16_t data if not unknown */ + char name[16] (0 terminated if < 16) + uint16_t data */ #define S_UNKNOWN 0x80 #define S_PUBLIC 0x40 /* unknown is public .. */ #define S_SEGMENT 0x0F /* 00 means absolute */ +#define S_SIZE 19 + + -- 2.34.1