diff src/xs_backend.c @ 876:d03e5c73eb51

Add ROM image loading.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 09 Nov 2012 05:13:29 +0200
parents 50111e99456a
children 4c6c5247de7d
line wrap: on
line diff
--- a/src/xs_backend.c	Fri Nov 09 05:10:28 2012 +0200
+++ b/src/xs_backend.c	Fri Nov 09 05:13:29 2012 +0200
@@ -76,6 +76,14 @@
 static const gint xs_nenginelist = sizeof(xs_enginelist) / sizeof(xs_enginelist[0]);
 
 
+static const XSROMImageData xs_rom_images[XS_C64_ROM_IMAGES] =
+{
+    { "Kernal",  "kernal",  8192 },
+    { "Basic",   "basic",   8192 },
+    { "Chargen", "chargen", 4096 },
+};
+
+
 gboolean xs_init_emu_backend(XSEngineState *state, gint *preferred)
 {
     gint engine;
@@ -96,3 +104,38 @@
     XSDEBUG("init#1: %s, %i\n", initialized ? "OK" : "FAILED", *preferred);
     return initialized;
 }
+
+
+gboolean xs_load_rom_images(guint8 **roms)
+{
+    gint i;
+
+    XSDEBUG("Loading C64 ROM images ...\n");
+
+    for (i = 0; i < XS_C64_ROM_IMAGES; i++)
+    {
+        const XSROMImageData *rom = &xs_rom_images[i];
+        size_t size = 0;
+
+        XSDEBUG("Trying ROM '%s' from '%s%s', %d bytes.\n",
+            rom->name, xs_cfg.romPath, rom->filename, rom->size);
+
+        if (!xs_fload_buffer_path(xs_cfg.romPath, rom->filename,
+            &roms[i], &size, rom->size, TRUE))
+        {
+            xs_error("Failed to load required %s ROM image '%s%s'.\n",
+                rom->name, xs_cfg.romPath, rom->filename);
+            return FALSE;
+        }
+
+        if (size < rom->size)
+        {
+            xs_error("ROM image %s '%s%s' size does not match: %d != %d\n",
+                rom->name, xs_cfg.romPath, rom->filename,
+                size, rom->size);
+            return FALSE;
+        }
+    }
+
+    return TRUE;
+}