diff options
author | Aaron Giles <aaron@aarongiles.com> | 2010-06-09 22:02:21 +0000 |
---|---|---|
committer | Aaron Giles <aaron@aarongiles.com> | 2010-06-09 22:02:21 +0000 |
commit | 019793c78fa965057d97e9d082f7479c53ed867e (patch) | |
tree | c889d259d9e9b43f910be30675d03e0a1da5dc03 | |
parent | dc7d48d23ea8bb19249f0b1db4cff79d662ea99e (diff) |
Cache pointer to exit function to prevent crashes on teardown.
-rw-r--r-- | src/emu/devcpu.c | 32 | ||||
-rw-r--r-- | src/emu/devcpu.h | 1 |
2 files changed, 15 insertions, 18 deletions
diff --git a/src/emu/devcpu.c b/src/emu/devcpu.c index f9e12f162c9..b44d58f8424 100644 --- a/src/emu/devcpu.c +++ b/src/emu/devcpu.c @@ -222,25 +222,22 @@ cpu_device::cpu_device(running_machine &machine, const cpu_device_config &config m_debug(NULL), m_cpu_config(config), m_token(NULL), - m_set_info(NULL), - m_execute(NULL), + m_set_info(reinterpret_cast<cpu_set_info_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_SET_INFO))), + m_execute(reinterpret_cast<cpu_execute_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_EXECUTE))), + m_burn(reinterpret_cast<cpu_burn_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_BURN))), + m_translate(reinterpret_cast<cpu_translate_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_TRANSLATE))), + m_read(reinterpret_cast<cpu_read_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_READ))), + m_write(reinterpret_cast<cpu_write_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_WRITE))), + m_readop(reinterpret_cast<cpu_readop_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_READOP))), + m_disassemble(reinterpret_cast<cpu_disassemble_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_DISASSEMBLE))), + m_state_import(reinterpret_cast<cpu_state_io_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_IMPORT_STATE))), + m_state_export(reinterpret_cast<cpu_state_io_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_EXPORT_STATE))), + m_string_export(reinterpret_cast<cpu_string_io_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_EXPORT_STRING))), + m_exit(reinterpret_cast<cpu_exit_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_EXIT))), m_using_legacy_state(false) { memset(&m_partial_frame_period, 0, sizeof(m_partial_frame_period)); - // pre-fetch function pointers for frequently-called functions - m_set_info = reinterpret_cast<cpu_set_info_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_SET_INFO)); - m_execute = reinterpret_cast<cpu_execute_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_EXECUTE)); - m_burn = reinterpret_cast<cpu_burn_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_BURN)); - m_translate = reinterpret_cast<cpu_translate_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_TRANSLATE)); - m_read = reinterpret_cast<cpu_read_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_READ)); - m_write = reinterpret_cast<cpu_write_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_WRITE)); - m_readop = reinterpret_cast<cpu_readop_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_READOP)); - m_disassemble = reinterpret_cast<cpu_disassemble_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_DISASSEMBLE)); - m_state_import = reinterpret_cast<cpu_state_io_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_IMPORT_STATE)); - m_state_export = reinterpret_cast<cpu_state_io_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_EXPORT_STATE)); - m_string_export = reinterpret_cast<cpu_string_io_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_EXPORT_STRING)); - int tokenbytes = m_cpu_config.get_legacy_config_int(CPUINFO_INT_CONTEXT_SIZE); if (tokenbytes == 0) throw emu_fatalerror("Device %s specifies a 0 context size!\n", tag()); @@ -257,9 +254,8 @@ cpu_device::cpu_device(running_machine &machine, const cpu_device_config &config cpu_device::~cpu_device() { // call the CPU's exit function if present - cpu_exit_func exit = reinterpret_cast<cpu_exit_func>(m_cpu_config.get_legacy_config_fct(CPUINFO_FCT_EXIT)); - if (exit != NULL) - (*exit)(this); + if (m_exit != NULL) + (*m_exit)(this); } diff --git a/src/emu/devcpu.h b/src/emu/devcpu.h index 25bb49d3006..693bf3ceb06 100644 --- a/src/emu/devcpu.h +++ b/src/emu/devcpu.h @@ -529,6 +529,7 @@ protected: cpu_state_io_func m_state_import; // cpu_state_io_func m_state_export; // cpu_string_io_func m_string_export; // + cpu_exit_func m_exit; // UINT64 m_state_io; // temporary buffer for state I/O bool m_using_legacy_state; // true if we are using the old-style state access |