summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/psx
diff options
context:
space:
mode:
author smf- <smf-@users.noreply.github.com>2013-05-24 18:11:39 +0000
committer smf- <smf-@users.noreply.github.com>2013-05-24 18:11:39 +0000
commitd3f09b6ff8d80aa9bc8c8cdc38668832f3dc3c36 (patch)
tree37fcf80bc87164cec2bb283ed4927056c079931d /src/emu/cpu/psx
parent08bf20d5863d26b791288fde15dcf593427dd38d (diff)
slightly more defensive ram & rom mapping (nw)
Diffstat (limited to 'src/emu/cpu/psx')
-rw-r--r--src/emu/cpu/psx/psx.c41
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 )