Load files to ram
authorLauri Kasanen <cand@gmx.com>
Thu, 27 May 2021 12:41:52 +0000 (15:41 +0300)
committerLauri Kasanen <cand@gmx.com>
Thu, 27 May 2021 12:41:52 +0000 (15:41 +0300)
main.c

diff --git a/main.c b/main.c
index 99c1041dbb2b182fc386d7e835ce901eac189a7b..54b34659551d86672fbbc6fbbf2fba87c58a2459 100644 (file)
--- a/main.c
+++ b/main.c
@@ -154,7 +154,7 @@ static void parsesprs(const char name[], struct kvm_regs *regs) {
        fclose(f);
 }
 
-static void load(const char arg[]) {
+static void load(const char arg[], uint8_t *ram) {
 
        char name[PATH_MAX];
        const char *ptr = strchr(arg, ':');
@@ -180,7 +180,13 @@ static void load(const char arg[]) {
        const unsigned len = ftell(f);
        rewind(f);
 
-       // TODO copy it up
+       if (addr + len >= RAMSIZE) {
+               printf("Tried to use too much RAM\n");
+               exit(1);
+       }
+
+       if (fread(&ram[addr], len, 1, f) != 1)
+               abort();
 
        fclose(f);
 }
@@ -211,6 +217,11 @@ int main(int argc, char **argv) {
        uint8_t *ram, *progmem;
        const char *binpath;
 
+       // Yes, we're frugal
+       if (posix_memalign((void **) &ram, 64 * 1024, RAMSIZE))
+               abort();
+       memset(ram, 0, RAMSIZE);
+
        memset(&regs, 0, sizeof(struct kvm_regs));
        memset(&fpregs, 0, sizeof(struct kvm_fpu));
 
@@ -247,7 +258,7 @@ int main(int argc, char **argv) {
                                parsesprs(optarg, &regs);
                        break;
                        case 'l':
-                               load(optarg);
+                               load(optarg, ram);
                        break;
                        case 'd':
                                if (num_dumps >= MAXDUMPS) {
@@ -282,11 +293,6 @@ int main(int argc, char **argv) {
                help(argv[0]);
        }
 
-       // Yes, we're frugal
-       if (posix_memalign((void **) &ram, 64 * 1024, RAMSIZE))
-               abort();
-       memset(ram, 0, RAMSIZE);
-
        fseek(binary, 0, SEEK_END);
        const unsigned binlen = ftell(binary);
        rewind(binary);