Mercurial > hg > dmlib
changeset 486:cb61c44f7846
Clean up PRG/RAW loading.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 11 Nov 2012 14:36:17 +0200 |
parents | c1d5cccbf5b3 |
children | b89598501cec |
files | objlink.c |
diffstat | 1 files changed, 63 insertions(+), 71 deletions(-) [+] |
line wrap: on
line diff
--- a/objlink.c Sun Nov 11 13:05:51 2012 +0200 +++ b/objlink.c Sun Nov 11 14:36:17 2012 +0200 @@ -462,58 +462,98 @@ } -int dmLoadPRG(const char *fname, BOOL forceAddr, int destAddr) +int dmLoadPRG(const char *filename, BOOL forceAddr, const ssize_t destAddr) { FILE *f; - ssize_t a, b, s; + ssize_t dataSize, loadAddr, endAddr; + Uint16 tmpAddr; // Open the input file - if ((f = fopen(fname, "rb")) == NULL) + if ((f = fopen(filename, "rb")) == NULL) { dmError("Error opening input file '%s' (%s).\n", - fname, strerror(errno)); + filename, strerror(errno)); return 1; } // Get filesize - if ((s = dmGetFileSize(f) - 2) < 0) + if ((dataSize = dmGetFileSize(f) - 2) < 0) { - dmError("Error getting file size for '%s'.\n", fname); + dmError("Error getting file size for '%s'.\n", filename); return 6; } // Get loading address - if ((a = fgetc(f)) < 0) + if (!dm_fread_le16(f, &tmpAddr)) { dmError("Error reading input file '%s' (%s).\n", - fname, strerror(errno)); + filename, strerror(errno)); return 2; } - if ((b = fgetc(f)) < 0) - { - dmError("Error reading input file '%s' (%s).\n", - fname, strerror(errno)); - return 3; - } - // Show information - if (forceAddr) - a = destAddr; - else - a = a + (b * 0x100); + loadAddr = forceAddr ? destAddr : tmpAddr; + endAddr = loadAddr + dataSize - 1; dmPrint(1, "* Loading '%s', %s at $%.4x-$%.4x", - fname, forceAddr ? "PRGA" : "PRG", a, (a + s - 1)); + filename, forceAddr ? "PRGA" : "PRG", loadAddr, endAddr); - if (a + s >= memModel->size) + if (endAddr >= memModel->size) { dmPrint(1, " .. Does not fit into the memory!\n"); return 5; } // Load data - if (fread(&memory[a], s, 1, f) < 1) + if (fread(&memory[loadAddr], dataSize, 1, f) < 1) + { + dmPrint(1, " .. Error: %s.\n", + strerror(errno)); + return 4; + } + + dmPrint(1, " .. OK\n"); + + // Add to list of blocks + reserveMemBlock(loadAddr, endAddr, filename, MTYPE_RES); + + return 0; +} + + +int dmLoadRAW(const char *filename, const ssize_t destAddr) +{ + FILE *f; + ssize_t dataSize, endAddr; + + // Open the input file + if ((f = fopen(filename, "rb")) == NULL) + { + dmError("Error opening input file '%s' (%s).\n", + filename, strerror(errno)); + return 1; + } + + // Get filesize + if ((dataSize = dmGetFileSize(f)) < 0) + { + dmError("Error getting file size for '%s'.\n", filename); + return 6; + } + + // Show information + endAddr = destAddr + dataSize - 1; + dmPrint(1, "* Loading '%s', RAW at $%.4x-$%.4x", + filename, destAddr, endAddr); + + if (endAddr >= memModel->size) + { + dmPrint(1, " .. Does not fit into the memory!\n"); + return 5; + } + + // Load data + if (fread(&memory[destAddr], dataSize, 1, f) < 1) { dmPrint(1, " .. Error: %s.\n", strerror(errno)); @@ -523,55 +563,7 @@ dmPrint(1, " .. OK\n"); // Add info to list - reserveMemBlock(a, (a + s + 1), fname, MTYPE_RES); - - return 0; -} - - -int dmLoadRAW(const char *fname, int destAddr) -{ - FILE *f; - ssize_t s; - - // Open the input file - if ((f = fopen(fname, "rb")) == NULL) - { - dmError("Error opening input file '%s' (%s).\n", - fname, strerror(errno)); - return 1; - } - - // Get filesize - s = dmGetFileSize(f); - if (s < 0) - { - dmError("Error getting file size for '%s'.\n", fname); - return 6; - } - - // Show information - dmPrint(1, "* Loading '%s', RAW at $%.4x-$%.4x", - fname, destAddr, (destAddr + s - 1)); - - if (destAddr + s >= memModel->size) - { - dmPrint(1, " .. Does not fit into the memory!\n"); - return 5; - } - - // Load data - if (fread(&memory[destAddr], s, 1, f) < 1) - { - dmPrint(1, " .. Error: %s.\n", - strerror(errno)); - return 4; - } - - dmPrint(1, " .. OK\n"); - - // Add info to list - reserveMemBlock(destAddr, (destAddr + s + 1), fname, MTYPE_RES); + reserveMemBlock(destAddr, endAddr, filename, MTYPE_RES); return 0; }