From dab559f2aa1cbc0a399eff314f564c8aeafe8867 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Tue, 21 Feb 2012 10:27:17 +0000 Subject: [PATCH] Added helpers for loading file for slot determination (no whatsnew) --- src/emu/diimage.c | 28 +++++++++++++++++++++++++--- src/emu/diimage.h | 3 ++- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/emu/diimage.c b/src/emu/diimage.c index bf5f4a3cb5a..18f4d3806d5 100644 --- a/src/emu/diimage.c +++ b/src/emu/diimage.c @@ -38,6 +38,7 @@ ***************************************************************************/ #include "emu.h" +#include "emuopts.h" #include "ui.h" #include "zippath.h" #include "uiimage.h" @@ -845,7 +846,7 @@ bool device_image_interface::load_software(char *swlist, char *swname, rom_entry load_internal - core image loading -------------------------------------------------*/ -bool device_image_interface::load_internal(const char *path, bool is_create, int create_format, option_resolution *create_args) +bool device_image_interface::load_internal(const char *path, bool is_create, int create_format, option_resolution *create_args, bool just_load) { UINT32 open_plan[4]; int i; @@ -926,6 +927,10 @@ bool device_image_interface::load_internal(const char *path, bool is_create, int /* success! */ done: + if (just_load) { + if(m_err) clear(); + return m_err ? IMAGE_INIT_FAIL : IMAGE_INIT_PASS; + } if (m_err!=0) { if (!m_init_phase) { @@ -962,9 +967,26 @@ done: bool device_image_interface::load(const char *path) { - return load_internal(path, FALSE, 0, NULL); + return load_internal(path, FALSE, 0, NULL, FALSE); } +/*------------------------------------------------- + load_for_slot - load an image for slot device +-------------------------------------------------*/ + +bool device_image_interface::load_for_slot(emu_options &options) +{ + const char* path = options.value(instance_name()); + if (strlen(path)>0) + { + set_init_phase(); + if (load_internal(path, FALSE, 0, NULL, TRUE)==IMAGE_INIT_PASS) + { + if (software_entry()==NULL) return true; + } + } + return false; +} /*------------------------------------------------- image_finish_load - special call - only use @@ -1016,7 +1038,7 @@ bool device_image_interface::finish_load() bool device_image_interface::create(const char *path, const image_device_format *create_format, option_resolution *create_args) { int format_index = (create_format != NULL) ? create_format->m_index : 0; - return load_internal(path, TRUE, format_index, create_args); + return load_internal(path, TRUE, format_index, create_args, FALSE); } diff --git a/src/emu/diimage.h b/src/emu/diimage.h index 9ed0c97e4f5..16c0783d13c 100644 --- a/src/emu/diimage.h +++ b/src/emu/diimage.h @@ -246,6 +246,7 @@ public: image_device_format *formatlist() const { return m_formatlist; } bool load(const char *path); + bool load_for_slot(emu_options &options); bool finish_load(); void unload(); bool create(const char *path, const image_device_format *create_format, option_resolution *create_args); @@ -253,7 +254,7 @@ public: int reopen_for_write(const char *path); protected: - bool load_internal(const char *path, bool is_create, int create_format, option_resolution *create_args); + bool load_internal(const char *path, bool is_create, int create_format, option_resolution *create_args, bool just_load); void determine_open_plan(int is_create, UINT32 *open_plan); image_error_t load_image_by_path(UINT32 open_flags, const char *path); void clear();