/* The set of peripherals available on the 128K and similar machines */ void machines_periph_128( void ) { base_peripherals_48_128(); periph_set_present( PERIPH_TYPE_AY, PERIPH_PRESENT_ALWAYS ); periph_set_present( PERIPH_TYPE_128_MEMORY, PERIPH_PRESENT_ALWAYS ); }
/* The set of peripherals available on the +3 and similar machines */ void machines_periph_plus3( void ) { base_peripherals(); periph_set_present( PERIPH_TYPE_AY_PLUS3, PERIPH_PRESENT_ALWAYS ); periph_set_present( PERIPH_TYPE_PARALLEL_PRINTER, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_PLUS3_MEMORY, PERIPH_PRESENT_ALWAYS ); }
/* The set of peripherals available on the 48K and similar machines */ void machines_periph_48( void ) { base_peripherals_48_128(); periph_set_present( PERIPH_TYPE_FULLER, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_ZXPRINTER, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_DISCIPLE, PERIPH_PRESENT_OPTIONAL ); }
static int specplus3e_reset( void ) { int error; error = machine_load_rom( 0, settings_current.rom_plus3e_0, settings_default.rom_plus3e_0, 0x4000 ); if( error ) return error; error = machine_load_rom( 1, settings_current.rom_plus3e_1, settings_default.rom_plus3e_1, 0x4000 ); if( error ) return error; error = machine_load_rom( 2, settings_current.rom_plus3e_2, settings_default.rom_plus3e_2, 0x4000 ); if( error ) return error; error = machine_load_rom( 3, settings_current.rom_plus3e_3, settings_default.rom_plus3e_3, 0x4000 ); if( error ) return error; error = specplus3_plus2a_common_reset(); if( error ) return error; periph_clear(); machines_periph_plus3(); periph_set_present( PERIPH_TYPE_UPD765, PERIPH_PRESENT_ALWAYS ); periph_update(); specplus3_765_reset(); specplus3_menu_items(); spec48_common_display_setup(); return 0; }
/* Peripherals generally available on all machines; the Timex machines and Russian clones remove some items from this list */ static void base_peripherals( void ) { periph_set_present( PERIPH_TYPE_DIVIDE, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_KEMPSTON, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_KEMPSTON_MOUSE, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_SIMPLEIDE, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_SPECCYBOOT, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_SPECTRANET, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_ULA, PERIPH_PRESENT_ALWAYS ); periph_set_present( PERIPH_TYPE_ZXATASP, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_ZXCF, PERIPH_PRESENT_OPTIONAL ); }
/* Peripherals available on the 48K and 128K */ static void base_peripherals_48_128( void ) { base_peripherals(); periph_set_present( PERIPH_TYPE_BETA128, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_INTERFACE1, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_INTERFACE2, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_MELODIK, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_OPUS, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_PLUSD, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_SPECDRUM, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_USOURCE, PERIPH_PRESENT_OPTIONAL ); }
/* The set of peripherals available on the Pentagon and Scorpion */ void machines_periph_pentagon( void ) { base_peripherals(); /* 128K-style memory paging available */ periph_set_present( PERIPH_TYPE_128_MEMORY, PERIPH_PRESENT_ALWAYS ); /* AY available */ periph_set_present( PERIPH_TYPE_AY, PERIPH_PRESENT_ALWAYS ); /* ULA uses full decoding */ periph_set_present( PERIPH_TYPE_ULA, PERIPH_PRESENT_NEVER ); periph_set_present( PERIPH_TYPE_ULA_FULL_DECODE, PERIPH_PRESENT_ALWAYS ); /* All machines have a built-in Betadisk 128 interface, which also handles Kempston joystick as they share a port; we don't add the actual Betadisk interface here as it differs slightly between the (original) Pentagon and the Scorpion/Pentagon 1024 */ periph_set_present( PERIPH_TYPE_KEMPSTON, PERIPH_PRESENT_NEVER ); }
/* The set of peripherals available on the TC2068 and TS2068 */ void machines_periph_timex( void ) { base_peripherals(); /* ULA uses full decoding */ periph_set_present( PERIPH_TYPE_ULA, PERIPH_PRESENT_NEVER ); periph_set_present( PERIPH_TYPE_ULA_FULL_DECODE, PERIPH_PRESENT_ALWAYS ); /* SCLD always present */ periph_set_present( PERIPH_TYPE_SCLD, PERIPH_PRESENT_ALWAYS ); /* AY chip with joystick always present */ periph_set_present( PERIPH_TYPE_AY_TIMEX_WITH_JOYSTICK, PERIPH_PRESENT_ALWAYS ); /* ZX Printer and Interface 2 available */ periph_set_present( PERIPH_TYPE_INTERFACE2, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_ZXPRINTER_FULL_DECODE, PERIPH_PRESENT_OPTIONAL ); }
static int tc2048_reset( void ) { size_t i, j; int error; error = machine_load_rom( 0, settings_current.rom_tc2048, settings_default.rom_tc2048, 0x4000 ); if( error ) return error; /* 0x0000: ROM 0 */ scld_home_map_16k( 0x0000, memory_map_rom, 0 ); /* 0x4000: RAM 5, contended */ memory_ram_set_16k_contention( 5, 1 ); scld_home_map_16k( 0x4000, memory_map_ram, 5 ); /* 0x8000: RAM 2, not contended */ memory_ram_set_16k_contention( 2, 0 ); scld_home_map_16k( 0x8000, memory_map_ram, 2 ); /* 0xc000: RAM 0, not contended */ memory_ram_set_16k_contention( 0, 0 ); scld_home_map_16k( 0xc000, memory_map_ram, 0 ); periph_clear(); machines_periph_48(); /* ULA uses full decoding */ periph_set_present( PERIPH_TYPE_ULA, PERIPH_PRESENT_NEVER ); periph_set_present( PERIPH_TYPE_ULA_FULL_DECODE, PERIPH_PRESENT_ALWAYS ); /* As does the ZX Printer */ periph_set_present( PERIPH_TYPE_ZXPRINTER, PERIPH_PRESENT_NEVER ); periph_set_present( PERIPH_TYPE_ZXPRINTER_FULL_DECODE, PERIPH_PRESENT_OPTIONAL ); /* SCLD always present */ periph_set_present( PERIPH_TYPE_SCLD, PERIPH_PRESENT_ALWAYS ); /* TC2048 has a built-in Kempston joystick, which uses the "loose" decoding */ periph_set_present( PERIPH_TYPE_KEMPSTON, PERIPH_PRESENT_NEVER ); periph_set_present( PERIPH_TYPE_KEMPSTON_LOOSE, PERIPH_PRESENT_ALWAYS ); /* SpeccyBoot doesn't seem to work on the TC2048 */ periph_set_present( PERIPH_TYPE_SPECCYBOOT, PERIPH_PRESENT_NEVER ); periph_update(); beta_builtin = 0; for( i = 0; i < 8; i++ ) for( j = 0; j < MEMORY_PAGES_IN_8K; j++ ) { memory_page *dock_page, *exrom_page; dock_page = &timex_dock[i * MEMORY_PAGES_IN_8K + j]; *dock_page = tc2068_empty_mapping[j]; dock_page->page_num = i; exrom_page = &timex_exrom[i * MEMORY_PAGES_IN_8K + j]; *exrom_page = tc2068_empty_mapping[j]; exrom_page->page_num = i; } tc2068_tc2048_common_reset(); return 0; }