From e3cbe8f7712fe97d90ff1fb5c675df9a1632eb45 Mon Sep 17 00:00:00 2001 From: Bobby Bingham Date: Sat, 11 Jul 2015 11:56:16 -0500 Subject: make systemid structure match memory layout This will be useful when it comes time to share this structure definition with the bootloader code. Additionally, it makes the write_output function simpler, as we can output most of the fields with a single write() call. --- src/bootinfo.h | 7 ++++++- src/satmkboot.c | 23 ++++++++--------------- 2 files changed, 14 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/bootinfo.h b/src/bootinfo.h index 976f8e1..a40ca40 100644 --- a/src/bootinfo.h +++ b/src/bootinfo.h @@ -4,20 +4,25 @@ #include struct systemid { - char title [112]; + char magic [ 16]; char maker [ 16]; char product [ 10]; char version [ 6]; char reldate [ 8]; char device [ 8]; char regions [ 10]; + char padding1 [ 6]; char peripherals[ 16]; + char title [112]; + uint32_t padding2[4]; uint32_t bootsize; + uint32_t padding3; uint32_t stack_master; uint32_t stack_slave; uint32_t load_addr; uint32_t load_size; + uint32_t padding4[2]; }; #endif diff --git a/src/satmkboot.c b/src/satmkboot.c index b86a769..3b71fe5 100644 --- a/src/satmkboot.c +++ b/src/satmkboot.c @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -8,7 +9,7 @@ #include "symbols.h" static struct systemid sysid = { - .title = "TEST TITLE ", + .magic = "SEGA SEGASATURN ", .maker = "SEGA TP T-000 ", .product = "T-000000G ", .version = "V0.001", @@ -16,6 +17,8 @@ static struct systemid sysid = { .device = "CD-1/1 ", .regions = " ", .peripherals = " ", + .padding1 = " ", + .title = "TEST TITLE ", .bootsize = 0xe00, .stack_master = 0, .stack_slave = 0, @@ -41,29 +44,19 @@ static void serialize_region_code(char *out, const struct symbolname *region) static int write_output(FILE *fp) { - static const unsigned char zeros[16]; extern const unsigned char securitycode[]; extern const size_t securitycode_size; /* system id - 0x100 bytes */ - WRITE (fp, "SEGA SEGASATURN ", 16); - WRITE (fp, sysid.maker, 16); - WRITE (fp, sysid.product, 10); - WRITE (fp, sysid.version, 6); - WRITE (fp, sysid.reldate, 8); - WRITE (fp, sysid.device, 8); - WRITE (fp, sysid.regions, 10); - WRITE (fp, " ", 6); - WRITE (fp, sysid.peripherals, 16); - WRITE (fp, sysid.title, 112); - WRITE (fp, zeros, 16); /* reserved bytes */ + WRITE (fp, &sysid, offsetof(struct systemid, bootsize)); WRITE32(fp, sysid.bootsize); - WRITE (fp, zeros, 4); /* reserved bytes */ + WRITE32(fp, 0); /* reserved bytes */ WRITE32(fp, sysid.stack_master); WRITE32(fp, sysid.stack_slave); WRITE32(fp, sysid.load_addr); WRITE32(fp, sysid.load_size); - WRITE (fp, zeros, 8); /* reserved bytes */ + WRITE32(fp, 0); /* reserved bytes */ + WRITE32(fp, 0); /* reserved bytes */ /* security code */ WRITE(fp, securitycode, securitycode_size); -- cgit v1.2.3