comparison 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
comparison
equal deleted inserted replaced
875:0fdb001e456c 876:d03e5c73eb51
74 }; 74 };
75 75
76 static const gint xs_nenginelist = sizeof(xs_enginelist) / sizeof(xs_enginelist[0]); 76 static const gint xs_nenginelist = sizeof(xs_enginelist) / sizeof(xs_enginelist[0]);
77 77
78 78
79 static const XSROMImageData xs_rom_images[XS_C64_ROM_IMAGES] =
80 {
81 { "Kernal", "kernal", 8192 },
82 { "Basic", "basic", 8192 },
83 { "Chargen", "chargen", 4096 },
84 };
85
86
79 gboolean xs_init_emu_backend(XSEngineState *state, gint *preferred) 87 gboolean xs_init_emu_backend(XSEngineState *state, gint *preferred)
80 { 88 {
81 gint engine; 89 gint engine;
82 gboolean initialized = FALSE; 90 gboolean initialized = FALSE;
83 91
94 } 102 }
95 103
96 XSDEBUG("init#1: %s, %i\n", initialized ? "OK" : "FAILED", *preferred); 104 XSDEBUG("init#1: %s, %i\n", initialized ? "OK" : "FAILED", *preferred);
97 return initialized; 105 return initialized;
98 } 106 }
107
108
109 gboolean xs_load_rom_images(guint8 **roms)
110 {
111 gint i;
112
113 XSDEBUG("Loading C64 ROM images ...\n");
114
115 for (i = 0; i < XS_C64_ROM_IMAGES; i++)
116 {
117 const XSROMImageData *rom = &xs_rom_images[i];
118 size_t size = 0;
119
120 XSDEBUG("Trying ROM '%s' from '%s%s', %d bytes.\n",
121 rom->name, xs_cfg.romPath, rom->filename, rom->size);
122
123 if (!xs_fload_buffer_path(xs_cfg.romPath, rom->filename,
124 &roms[i], &size, rom->size, TRUE))
125 {
126 xs_error("Failed to load required %s ROM image '%s%s'.\n",
127 rom->name, xs_cfg.romPath, rom->filename);
128 return FALSE;
129 }
130
131 if (size < rom->size)
132 {
133 xs_error("ROM image %s '%s%s' size does not match: %d != %d\n",
134 rom->name, xs_cfg.romPath, rom->filename,
135 size, rom->size);
136 return FALSE;
137 }
138 }
139
140 return TRUE;
141 }