diff options
author | 2013-05-24 18:11:39 +0000 | |
---|---|---|
committer | 2013-05-24 18:11:39 +0000 | |
commit | d3f09b6ff8d80aa9bc8c8cdc38668832f3dc3c36 (patch) | |
tree | 37fcf80bc87164cec2bb283ed4927056c079931d /src/emu/cpu/psx | |
parent | 08bf20d5863d26b791288fde15dcf593427dd38d (diff) |
slightly more defensive ram & rom mapping (nw)
Diffstat (limited to 'src/emu/cpu/psx')
-rw-r--r-- | src/emu/cpu/psx/psx.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/src/emu/cpu/psx/psx.c b/src/emu/cpu/psx/psx.c index 80747cad7ba..ece45b22636 100644 --- a/src/emu/cpu/psx/psx.c +++ b/src/emu/cpu/psx/psx.c @@ -1355,16 +1355,22 @@ void psxcpu_device::update_ram_config() UINT32 ram_size = m_ram->size(); UINT8 *pointer = m_ram->pointer(); - assert( window_size != 0 ); + if( ram_size > window_size ) + { + ram_size = window_size; + } - int start = 0; - while( start < window_size ) + if( ram_size > 0 ) { - m_program->install_ram( start + 0x00000000, start + 0x00000000 + ram_size - 1, pointer ); - m_program->install_ram( start + 0x80000000, start + 0x80000000 + ram_size - 1, pointer ); - m_program->install_ram( start + 0xa0000000, start + 0xa0000000 + ram_size - 1, pointer ); + int start = 0; + while( start < window_size ) + { + m_program->install_ram( start + 0x00000000, start + 0x00000000 + ram_size - 1, pointer ); + m_program->install_ram( start + 0x80000000, start + 0x80000000 + ram_size - 1, pointer ); + m_program->install_ram( start + 0xa0000000, start + 0xa0000000 + ram_size - 1, pointer ); - start += ram_size; + start += ram_size; + } } m_program->install_readwrite_handler( 0x00000000 + window_size, 0x1effffff, read32_delegate( FUNC(psxcpu_device::berr_r), this ), write32_delegate( FUNC(psxcpu_device::berr_w), this ) ); @@ -1384,21 +1390,22 @@ void psxcpu_device::update_rom_config() UINT32 rom_size = m_rom->bytes(); UINT8 *pointer = m_rom->base(); - if( rom_size > max_window_size ) + if( rom_size > window_size ) { - rom_size = max_window_size; + rom_size = window_size; } - assert( window_size != 0 ); - - int start = 0; - while( start < window_size ) + if( rom_size > 0 ) { - m_program->install_rom( start + 0x1fc00000, start + 0x1fc00000 + rom_size - 1, pointer ); - m_program->install_rom( start + 0x9fc00000, start + 0x9fc00000 + rom_size - 1, pointer ); - m_program->install_rom( start + 0xbfc00000, start + 0xbfc00000 + rom_size - 1, pointer ); + int start = 0; + while( start < window_size ) + { + m_program->install_rom( start + 0x1fc00000, start + 0x1fc00000 + rom_size - 1, pointer ); + m_program->install_rom( start + 0x9fc00000, start + 0x9fc00000 + rom_size - 1, pointer ); + m_program->install_rom( start + 0xbfc00000, start + 0xbfc00000 + rom_size - 1, pointer ); - start += rom_size; + start += rom_size; + } } if( window_size < max_window_size ) |