int spec128_memory_map( void ) { int page, screen, rom; size_t i; page = machine_current->ram.last_byte & 0x07; screen = ( machine_current->ram.last_byte & 0x08 ) ? 7 : 5; rom = ( machine_current->ram.last_byte & 0x10 ) >> 4; /* If we changed the active screen, mark the entire display file as dirty so we redraw it on the next pass */ if( memory_current_screen != screen ) { display_update_critical( 0, 0 ); display_refresh_main_screen(); memory_current_screen = screen; } spec128_select_rom( rom ); spec128_select_page( page ); for( i = 0; i < 8; i++ ) memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; memory_romcs_map(); return 0; }
static int pentagon_memory_map( void ) { int rom, page, screen; size_t i; screen = ( machine_current->ram.last_byte & 0x08 ) ? 7 : 5; if( memory_current_screen != screen ) { display_update_critical( 0, 0 ); display_refresh_main_screen(); memory_current_screen = screen; } if( beta_active && !( machine_current->ram.last_byte & 0x10 ) ) { rom = 2; } else { rom = ( machine_current->ram.last_byte & 0x10 ) >> 4; } machine_current->ram.current_rom = rom; spec128_select_rom( rom ); page = machine_current->ram.last_byte & 0x07; page += ( machine_current->ram.last_byte & 0xC0 ) >> 3; spec128_select_page( page ); machine_current->ram.current_page = page; for( i = 0; i < 8; i++ ) memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; memory_romcs_map(); return 0; }