diff options
author | 2016-04-13 22:40:02 +0200 | |
---|---|---|
committer | 2016-04-13 22:40:02 +0200 | |
commit | 1c80bbd4352e4a4e0e55aad292e9e7d30e80147e (patch) | |
tree | fc4552f062e83e9e15693cdfea26d7ced34704ce /src | |
parent | 6d34356163f44f42e8aaf775e6ac9044bedd3a23 (diff) |
fixed regression of generic cart slot due to a wrong assumption.
code is still worked on, so the fix might evolve in next days. nw.
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/bus/generic/slot.h | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/src/devices/bus/generic/slot.h b/src/devices/bus/generic/slot.h index eaf901fd310..032193baa39 100644 --- a/src/devices/bus/generic/slot.h +++ b/src/devices/bus/generic/slot.h @@ -28,8 +28,11 @@ public: virtual void rom_alloc(size_t size, int width, endianness_t end, const char *tag); virtual void ram_alloc(UINT32 size); - UINT8* get_rom_base() { if (m_region.found()) return m_region->base(); return m_rom; } - UINT32 get_rom_size() { if (m_region.found()) return m_region->bytes(); return m_rom_size; } + UINT8* get_rom_base() { return m_rom; } + UINT32 get_rom_size() { return m_rom_size; } + + UINT8* get_region_base() { if (m_region.found()) return m_region->base(); return nullptr; } + UINT32 get_region_size() { if (m_region.found()) return m_region->bytes(); return 0; } UINT8* get_ram_base() { return &m_ram[0]; } UINT32 get_ram_size() { return m_ram.size(); } @@ -140,9 +143,27 @@ public: virtual void rom_alloc(size_t size, int width, endianness_t end) { if (m_cart) m_cart->rom_alloc(size, width, end, tag()); } virtual void ram_alloc(UINT32 size) { if (m_cart) m_cart->ram_alloc(size); } - UINT8* get_rom_base() { if (m_cart) return m_cart->get_rom_base(); return nullptr; } - UINT8* get_ram_base() { if (m_cart) return m_cart->get_ram_base(); return nullptr; } - UINT32 get_rom_size() { if (m_cart) return m_cart->get_rom_size(); return 0; } + UINT8* get_rom_base() { + if (m_cart) + { + if (!user_loadable()) + return m_cart->get_region_base(); + else + return m_cart->get_rom_base(); + } + return nullptr; + } + UINT32 get_rom_size() { + if (m_cart) + { + if (!user_loadable()) + return m_cart->get_region_size(); + else + return m_cart->get_rom_size(); + } + return 0; + } + UINT8* get_ram_base() { if (m_cart) return m_cart->get_ram_base(); return nullptr; } void save_ram() { if (m_cart && m_cart->get_ram_size()) m_cart->save_ram(); } |