From a3c1553ea25eb431cce9959c8503ac523cc63170 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sat, 28 Oct 2017 23:24:59 +0100 Subject: [PATCH] asz80: fixes to output format logic --- Applications/MWC/cmd/asz80/as.h | 2 ++ Applications/MWC/cmd/asz80/as0.c | 1 + Applications/MWC/cmd/asz80/as4.c | 19 +++++++++++++------ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Applications/MWC/cmd/asz80/as.h b/Applications/MWC/cmd/asz80/as.h index b36cb4a3..0aaeb398 100644 --- a/Applications/MWC/cmd/asz80/as.h +++ b/Applications/MWC/cmd/asz80/as.h @@ -233,3 +233,5 @@ extern void outeof(void); extern void outbyte(uint8_t); extern void outflush(void); extern void syminit(void); + +#include "obj.h" diff --git a/Applications/MWC/cmd/asz80/as0.c b/Applications/MWC/cmd/asz80/as0.c index f3bbaca6..28514fc3 100644 --- a/Applications/MWC/cmd/asz80/as0.c +++ b/Applications/MWC/cmd/asz80/as0.c @@ -107,6 +107,7 @@ int main(int argc, char *argv[]) asmline(); } } + pass = 1; outeof(); exit(GOOD); } diff --git a/Applications/MWC/cmd/asz80/as4.c b/Applications/MWC/cmd/asz80/as4.c index 170f7268..de60662d 100644 --- a/Applications/MWC/cmd/asz80/as4.c +++ b/Applications/MWC/cmd/asz80/as4.c @@ -5,7 +5,6 @@ */ #include "as.h" -#include "obj.h" static uint16_t segsize[NSEGMENT]; static uint16_t truesize[NSEGMENT]; @@ -22,10 +21,10 @@ void outpass(void) if (pass == 1) { /* Lay the file out */ for (i = 1; i < NSEGMENT; i++) { + segbase[i] = base; if (i != BSS) { obh.o_segbase[i] = base; - segbase[i] = base; - base += segsize[i]; + base += segsize[i] + 2; /* 2 for the EOF mark */ } obh.o_size[i] = truesize[i]; } @@ -102,8 +101,8 @@ void outab(uint8_t b) if (segment == ABSOLUTE) err('A', MUST_BE_ABSOLUTE); outbyte(b); - if (b == 0xDA) /* Quote relocation markers */ - outbyte(0x00); + if (b == REL_ESC) /* Quote relocation markers */ + outbyte(REL_REL); ++dot[segment]; ++truesize[segment]; if (truesize[segment] == 0 || dot[segment] == 0) @@ -141,7 +140,7 @@ static void putsymbol(SYM *s, FILE *ofp) flag |= s->s_segment; } putc(flag, ofp); - fwrite(cs->s_id, 16, 1, ofp); + fwrite(s->s_id, 16, 1, ofp); putc(s->s_value, ofp); putc(s->s_value >> 8, ofp); } @@ -196,6 +195,14 @@ void outeof(void) if (noobj || pass == 0) return; + segment = CODE; + outsegment(CODE); + outbyte(REL_ESC); + outbyte(REL_EOF); + segment = DATA; + outsegment(DATA); + outbyte(REL_ESC); + outbyte(REL_EOF); writesymbols(uhash, ofp); rewind(ofp); obh.o_magic = MAGIC_OBJ; -- 2.34.1