Mercurial > hg > xmms-sid
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; +}