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; }
void scld_dec_write( libspectrum_word port GCC_UNUSED, libspectrum_byte b ) { scld old_dec = scld_last_dec; scld new_dec; libspectrum_byte ink,paper; /* We use new_dec as we don't want to have the new colours, modes etc. to take effect until we have updated the critical region */ new_dec.byte = b; /* If we changed the active screen, or change the colour in hires * mode, update the critical region and mark the entire display file as * dirty so we redraw it on the next pass */ if( new_dec.mask.scrnmode != old_dec.mask.scrnmode || new_dec.name.hires != old_dec.name.hires || ( new_dec.name.hires && ( new_dec.mask.hirescol != old_dec.mask.hirescol ) ) ) { display_update_critical( 0, 0 ); display_refresh_main_screen(); } /* Commit change to scld_last_dec */ scld_last_dec = new_dec; /* If we just reenabled interrupts, check for a retriggered interrupt */ if( old_dec.name.intdisable && !scld_last_dec.name.intdisable ) z80_interrupt(); if( scld_last_dec.name.altmembank != old_dec.name.altmembank ) machine_current->memory_map(); display_parse_attr( hires_get_attr(), &ink, &paper ); display_set_hires_border( paper ); }
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; }