EOY minor update.
[rmac] / 6502.c
diff --git a/6502.c b/6502.c
index 27a8e1ac9ac41f153c882c95d1f65c1149931d81..55eab740115446b4f1b3ad63437be70403bab82e 100644 (file)
--- a/6502.c
+++ b/6502.c
@@ -1,7 +1,7 @@
 //
 // RMAC - Reboot's Macro Assembler for all Atari computers
 // 6502.C - 6502 Assembler
-// Copyright (C) 199x Landon Dyer, 2011-2019 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2011-2020 Reboot and Friends
 // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
 // Source utilised with the kind permission of Landon Dyer
 //
@@ -645,46 +645,39 @@ badmode:
        if (sloc > 0x10000L)
                fatal("6502 code pointer > 64K");
 
-//Now why use this instead of at_eol()?
-       if (*tok != EOL)
-               error(extra_stuff);
+       ErrorIfNotAtEOL();
 }
 
 
 //
 // Generate 6502 object output file.
+// ggn: Converted to COM/EXE/XEX output format
 //
-// ggn: converted into a com/exe/xex output format
 void m6502obj(int ofd)
 {
-       uint16_t exeheader[3];
-       int headsize = 6;
-       uint16_t * headpoint = exeheader;
+       uint8_t header[4];
 
        CHUNK * ch = sect[M6502].scode;
 
-       // If no 6502 code was generated, forget it
+       // If no 6502 code was generated, bail out
        if ((ch == NULL) || (ch->challoc == 0))
                return;
 
-       exeheader[0] = 0xFFFF;          // Mandatory for first segment
        register uint8_t * p = ch->chptr;
 
+       // Write out mandatory $FFFF header
+       header[0] = header[1] = 0xFF;
+       uint32_t unused = write(ofd, header, 2);
+
        for(uint16_t * l=&orgmap[0][0]; l<currentorg; l+=2)
        {
-/*
-Why are we assuming endianness here? This is retarded
-*/
-               exeheader[1] = l[0];
-               exeheader[2] = l[1] - 1;
-
-               // Write header
-               size_t unused = write(ofd, headpoint, headsize);
-               unused = write(ofd, p + l[0], l[1] - l[0]);
+               SETLE16(header, 0, l[0]);
+               SETLE16(header, 2, l[1] - 1);
 
-               // Skip the $FFFF after first segment, it's not mandatory
-               headpoint = &exeheader[1];
-               headsize = 4;
+               // Write header for segment
+               unused = write(ofd, header, 4);
+               // Write the segment data
+               unused = write(ofd, p + l[0], l[1] - l[0]);
        }
 }