From aed95f3c6cf74b6c76a50ea214170aef2246385c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Sun, 10 Oct 2010 18:28:07 +0000 Subject: [PATCH] Also checksum the bootsector in the Atari version of haiku_loader. Remove duplicate of the checksum tool. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38939 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/boot/platform/atari_m68k/Jamfile | 21 +++++++++++ .../atari_m68k/fixup_tos_floppy_chksum.c | 35 ------------------- .../fixup_tos_boot_checksum.c | 1 + 3 files changed, 22 insertions(+), 35 deletions(-) delete mode 100644 src/system/boot/platform/atari_m68k/fixup_tos_floppy_chksum.c diff --git a/src/system/boot/platform/atari_m68k/Jamfile b/src/system/boot/platform/atari_m68k/Jamfile index d84529885c..8bae15782a 100644 --- a/src/system/boot/platform/atari_m68k/Jamfile +++ b/src/system/boot/platform/atari_m68k/Jamfile @@ -67,6 +67,27 @@ KernelMergeObject boot_platform_atari_m68k.o : boot_arch_m68k_040.o ; + +# the bootsector in haiku_loader must be checksummed + +rule ChecksumAtariLoader { + local haikuLoader = $(1) ; + local checksummer = fixup_tos_boot_checksum ; + + Depends $(haikuLoader) : $(checksummer) ; + + TARGET_CHECKSUM on $(haikuLoader) = $(checksummer) ; + +} + +actions ChecksumAtariLoader bind TARGET_CHECKSUM { + $(TARGET_CHECKSUM) $(1) +} + + +ChecksumAtariLoader haiku_loader ; + + # AUTO folder PRG target # based on KernelLd diff --git a/src/system/boot/platform/atari_m68k/fixup_tos_floppy_chksum.c b/src/system/boot/platform/atari_m68k/fixup_tos_floppy_chksum.c deleted file mode 100644 index 0c6ff4919b..0000000000 --- a/src/system/boot/platform/atari_m68k/fixup_tos_floppy_chksum.c +++ /dev/null @@ -1,35 +0,0 @@ -#include -#include -#include - -uint8_t sector[512]; - -int main(int argc, char **argv) -{ - int fd, i; - uint16_t sum; - uint8_t *p = sector; - fd = open(argv[1], O_RDWR); - if (fd < 0) { - return 1; - } - if (read(fd, sector, 512-2) < 512-2) { - perror("read"); - return 1; - } - for (sum = 0, i = 0; i < (512-2)/2; i++) { - uint16_t v; - v = *p++ << 8; - v += *p++; - sum += v; - } - sum = 0x1234 - sum /*+ 1*/; - //sum = 0xaa55; - // big endian - *p++ = (uint8_t)(sum >> 8); - *p++ = (uint8_t)sum; - //lseek(fd, 0LL, SEEK_SET); - write(fd, §or[512-2], 2); - close(fd); - return 0; -} diff --git a/src/tools/fixup_tos_boot_checksum/fixup_tos_boot_checksum.c b/src/tools/fixup_tos_boot_checksum/fixup_tos_boot_checksum.c index 674ca40bc3..60f8109936 100644 --- a/src/tools/fixup_tos_boot_checksum/fixup_tos_boot_checksum.c +++ b/src/tools/fixup_tos_boot_checksum/fixup_tos_boot_checksum.c @@ -31,5 +31,6 @@ int main(int argc, char **argv) *p++ = (uint8_t)sum; //lseek(fd, 0LL, SEEK_SET); write(fd, §or[512-2], 2); + close(fd); return 0; }