From: <pa...@us...> - 2011-01-18 23:29:41
|
Revision: 4264 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4264&view=rev Author: pak21 Date: 2011-01-18 23:29:34 +0000 (Tue, 18 Jan 2011) Log Message: ----------- Use new peripheral framework for the ZX Printer and 128K AY chip. Modified Paths: -------------- trunk/fuse/ay.c trunk/fuse/hacking/ChangeLog trunk/fuse/machines/pentagon.c trunk/fuse/machines/pentagon1024.c trunk/fuse/machines/scorpion.c trunk/fuse/machines/spec128.c trunk/fuse/machines/spec16.c trunk/fuse/machines/spec48.c trunk/fuse/machines/spec48_ntsc.c trunk/fuse/machines/spec_se.c trunk/fuse/machines/specplus2a.c trunk/fuse/machines/specplus3.c trunk/fuse/machines/tc2048.c trunk/fuse/machines/tc2068.c trunk/fuse/periph.h trunk/fuse/printer.c trunk/fuse/printer.h Modified: trunk/fuse/ay.c =================================================================== --- trunk/fuse/ay.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/ay.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -30,6 +30,7 @@ #include "compat.h" #include "machine.h" #include "module.h" +#include "periph.h" #include "printer.h" #include "psg.h" #include "sound.h" @@ -57,10 +58,25 @@ }; +static periph_t ay_peripherals[] = { + { 0xc002, 0xc000, ay_registerport_read, ay_registerport_write }, + { 0xc002, 0x8000, NULL, ay_dataport_write }, + { 0, 0, NULL, NULL } +}; + +static periph_t ay_peripherals_full_decode[] = { + { 0xffff, 0xfffd, ay_registerport_read, ay_registerport_write }, + { 0xffff, 0xbffd, NULL, ay_dataport_write }, + { 0, 0, NULL, NULL } +}; + int ay_init( void ) { module_register( &ay_module_info ); + periph_register_type( PERIPH_TYPE_AY, NULL, ay_peripherals ); + periph_register_type( PERIPH_TYPE_AY_FULL_DECODE, NULL, + ay_peripherals_full_decode ); return 0; } Modified: trunk/fuse/hacking/ChangeLog =================================================================== --- trunk/fuse/hacking/ChangeLog 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/hacking/ChangeLog 2011-01-18 23:29:34 UTC (rev 4264) @@ -3435,3 +3435,7 @@ specplus3.c,pentagon1024.c,tc2048.c,spec128.c,tc2068.c,scorpion.c, spec48_ntsc.c},periph.[ch],ula.[ch]: use new peripheral framework to handle the ULA. +20110118 ay.c,machines/{pentagon1024.c,pentagon.c,scorpion.c,spec128.c,spec16.c, + spec48.c,spec48_ntsc.c,specplus2a.c,specplus3.c,spec_se.c,tc2048.c, + tc2068.c},periph.h,printer.[ch]: use new peripheral framework for the + ZX Printer and 128K AY chip. Modified: trunk/fuse/machines/pentagon.c =================================================================== --- trunk/fuse/machines/pentagon.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/machines/pentagon.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -51,8 +51,6 @@ { 0x00ff, 0x005f, beta_sec_read, beta_sec_write }, { 0x00ff, 0x007f, beta_dr_read, beta_dr_write }, { 0x00ff, 0x00ff, pentagon_select_ff_read, beta_sp_write }, - { 0xc002, 0xc000, ay_registerport_read, ay_registerport_write }, - { 0xc002, 0x8000, NULL, ay_dataport_write }, { 0x8002, 0x0000, NULL, spec128_memoryport_write }, }; Modified: trunk/fuse/machines/pentagon1024.c =================================================================== --- trunk/fuse/machines/pentagon1024.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/machines/pentagon1024.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -54,8 +54,6 @@ { 0x00ff, 0x005f, beta_sec_read, beta_sec_write }, { 0x00ff, 0x007f, beta_dr_read, beta_dr_write }, { 0x00ff, 0x00ff, beta_sp_read, beta_sp_write }, - { 0xc002, 0xc000, ay_registerport_read, ay_registerport_write }, - { 0xc002, 0x8000, NULL, ay_dataport_write }, { 0xc002, 0x4000, NULL, pentagon1024_memoryport_write }, { 0xf008, 0xe000, NULL, pentagon1024_v22_memoryport_write }, /* v2.2 */ }; Modified: trunk/fuse/machines/scorpion.c =================================================================== --- trunk/fuse/machines/scorpion.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/machines/scorpion.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -56,8 +56,6 @@ { 0x00ff, 0x005f, beta_sec_read, beta_sec_write }, { 0x00ff, 0x007f, beta_dr_read, beta_dr_write }, { 0x00ff, 0x00ff, beta_sp_read, beta_sp_write }, - { 0xc002, 0xc000, ay_registerport_read, ay_registerport_write }, - { 0xc002, 0x8000, NULL, ay_dataport_write }, { 0xc002, 0x4000, NULL, spec128_memoryport_write }, { 0xf002, 0x1000, NULL, specplus3_memoryport2_write }, }; Modified: trunk/fuse/machines/spec128.c =================================================================== --- trunk/fuse/machines/spec128.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/machines/spec128.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -46,8 +46,6 @@ static int spec128_reset( void ); const periph_t spec128_peripherals[] = { - { 0xc002, 0xc000, ay_registerport_read, ay_registerport_write }, - { 0xc002, 0x8000, NULL, ay_dataport_write }, { 0x8002, 0x0000, NULL, spec128_memoryport_write }, }; @@ -109,6 +107,7 @@ specplus3_common_peripherals(); /* Peripherals available on the 48K and 128K */ + periph_set_present( PERIPH_TYPE_AY, PERIPH_PRESENT_ALWAYS ); 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 ); Modified: trunk/fuse/machines/spec16.c =================================================================== --- trunk/fuse/machines/spec16.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/machines/spec16.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -46,13 +46,6 @@ static libspectrum_byte empty_chunk[ MEMORY_PAGE_SIZE ]; static memory_page empty_mapping; -static const periph_t peripherals[] = { - { 0x0004, 0x0000, printer_zxp_read, printer_zxp_write }, -}; - -static const size_t peripherals_count = - sizeof( peripherals ) / sizeof( periph_t ); - int spec16_init( fuse_machine_info *machine ) { machine->machine = LIBSPECTRUM_MACHINE_16; @@ -92,7 +85,7 @@ settings_default.rom_16, 0x4000 ); if( error ) return error; - error = periph_setup( peripherals, peripherals_count ); + error = periph_setup( NULL, 0 ); if( error ) return error; spec48_common_peripherals(); Modified: trunk/fuse/machines/spec48.c =================================================================== --- trunk/fuse/machines/spec48.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/machines/spec48.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -44,13 +44,6 @@ static int spec48_reset( void ); -static const periph_t peripherals[] = { - { 0x0004, 0x0000, printer_zxp_read, printer_zxp_write }, -}; - -static const size_t peripherals_count = - sizeof( peripherals ) / sizeof( periph_t ); - int spec48_port_from_ula( libspectrum_word port ) { @@ -88,7 +81,7 @@ settings_default.rom_48, 0x4000 ); if( error ) return error; - error = periph_setup( peripherals, peripherals_count ); + error = periph_setup( NULL, 0 ); if( error ) return error; spec48_common_peripherals(); @@ -109,9 +102,13 @@ { spec128_common_peripherals(); + /* No AY chip on the 48K */ + periph_set_present( PERIPH_TYPE_AY, PERIPH_PRESENT_NEVER ); + /* These peripherals valid for the 48K and very similar machines only */ periph_set_present( PERIPH_TYPE_FULLER, PERIPH_PRESENT_OPTIONAL ); periph_set_present( PERIPH_TYPE_MELODIK, PERIPH_PRESENT_OPTIONAL ); + periph_set_present( PERIPH_TYPE_ZXPRINTER, PERIPH_PRESENT_OPTIONAL ); } void Modified: trunk/fuse/machines/spec48_ntsc.c =================================================================== --- trunk/fuse/machines/spec48_ntsc.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/machines/spec48_ntsc.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -42,13 +42,6 @@ static int spec48_ntsc_reset( void ); -static const periph_t peripherals[] = { - { 0x0004, 0x0000, printer_zxp_read, printer_zxp_write }, -}; - -static const size_t peripherals_count = - sizeof( peripherals ) / sizeof( periph_t ); - int spec48_ntsc_init( fuse_machine_info *machine ) { machine->machine = LIBSPECTRUM_MACHINE_48_NTSC; @@ -80,7 +73,7 @@ settings_default.rom_48, 0x4000 ); if( error ) return error; - error = periph_setup( peripherals, peripherals_count ); + error = periph_setup( NULL, 0 ); if( error ) return error; spec48_common_peripherals(); Modified: trunk/fuse/machines/spec_se.c =================================================================== --- trunk/fuse/machines/spec_se.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/machines/spec_se.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -62,13 +62,6 @@ static const periph_t peripherals[] = { { 0x00ff, 0x00f4, scld_hsr_read, scld_hsr_write }, - /* TS2040/Alphacom printer */ - { 0x00ff, 0x00fb, printer_zxp_read, printer_zxp_write }, - - /* FIXME: The SE has an 8k SRAM attached to its AY dataport */ - { 0xffff, 0xfffd, ay_registerport_read, ay_registerport_write }, - { 0xffff, 0xbffd, NULL, ay_dataport_write }, - { 0xffff, 0x7ffd, NULL, spec_se_memoryport_write }, /* FIXME: The SE has an 8k SRAM attached to its AY dataport */ @@ -148,6 +141,13 @@ periph_set_present( PERIPH_TYPE_ULA, PERIPH_PRESENT_NEVER ); periph_set_present( PERIPH_TYPE_ULA_FULL_DECODE, PERIPH_PRESENT_ALWAYS ); + /* As does the AY chip */ + periph_set_present( PERIPH_TYPE_AY, PERIPH_PRESENT_NEVER ); + periph_set_present( PERIPH_TYPE_AY_FULL_DECODE, PERIPH_PRESENT_ALWAYS ); + + /* ZX Printer available */ + periph_set_present( PERIPH_TYPE_ZXPRINTER_FULL_DECODE, PERIPH_PRESENT_ALWAYS ); + periph_update(); /* Mark as present/writeable */ Modified: trunk/fuse/machines/specplus2a.c =================================================================== --- trunk/fuse/machines/specplus2a.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/machines/specplus2a.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -42,8 +42,6 @@ static int specplus2a_reset( void ); static const periph_t peripherals[] = { - { 0xc002, 0xc000, ay_registerport_read, ay_registerport_write }, - { 0xc002, 0x8000, ay_registerport_read, ay_dataport_write }, { 0xc002, 0x4000, NULL, spec128_memoryport_write }, { 0xf002, 0x1000, NULL, specplus3_memoryport2_write }, { 0xf002, 0x0000, printer_parallel_read, printer_parallel_write }, Modified: trunk/fuse/machines/specplus3.c =================================================================== --- trunk/fuse/machines/specplus3.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/machines/specplus3.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -74,8 +74,6 @@ static int specplus3_reset( void ); const periph_t specplus3_peripherals[] = { - { 0xc002, 0xc000, ay_registerport_read, ay_registerport_write }, - { 0xc002, 0x8000, ay_registerport_read, ay_dataport_write }, { 0xc002, 0x4000, NULL, spec128_memoryport_write }, { 0xf002, 0x3000, specplus3_fdc_read, specplus3_fdc_write }, { 0xf002, 0x2000, specplus3_fdc_status, NULL }, Modified: trunk/fuse/machines/tc2048.c =================================================================== --- trunk/fuse/machines/tc2048.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/machines/tc2048.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -47,10 +47,6 @@ static const periph_t peripherals[] = { { 0x00ff, 0x00f4, scld_hsr_read, scld_hsr_write }, - - /* TS2040/Alphacom printer */ - { 0x00ff, 0x00fb, printer_zxp_read, printer_zxp_write }, - { 0x00ff, 0x00ff, scld_dec_read, scld_dec_write }, }; @@ -113,6 +109,10 @@ 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, PERIPH_PRESENT_OPTIONAL ); + /* TC2048 has a built-in Kempston joystick, which uses the "loose" decoding */ periph_set_present( PERIPH_TYPE_KEMPSTON, PERIPH_PRESENT_NEVER ); Modified: trunk/fuse/machines/tc2068.c =================================================================== --- trunk/fuse/machines/tc2068.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/machines/tc2068.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -47,9 +47,6 @@ const periph_t tc2068_peripherals[] = { { 0x00ff, 0x00f4, scld_hsr_read, scld_hsr_write }, - /* TS2040/Alphacom printer */ - { 0x00ff, 0x00fb, printer_zxp_read, printer_zxp_write }, - { 0x00ff, 0x00f5, tc2068_ay_registerport_read, ay_registerport_write }, { 0x00ff, 0x00f6, tc2068_ay_dataport_read, ay_dataport_write }, @@ -178,7 +175,9 @@ periph_set_present( PERIPH_TYPE_ULA, PERIPH_PRESENT_NEVER ); periph_set_present( PERIPH_TYPE_ULA_FULL_DECODE, 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 ); } int Modified: trunk/fuse/periph.h =================================================================== --- trunk/fuse/periph.h 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/periph.h 2011-01-18 23:29:34 UTC (rev 4264) @@ -32,6 +32,8 @@ typedef enum periph_type { PERIPH_TYPE_UNKNOWN, + PERIPH_TYPE_AY, /* 128K-style AY chip */ + PERIPH_TYPE_AY_FULL_DECODE, /* 128K-style AY chip responding only to 0xfffd */ PERIPH_TYPE_BETA128, /* Beta128 disk interface */ PERIPH_TYPE_DIVIDE, /* DivIDE interface */ PERIPH_TYPE_PLUSD, /* +D disk interface */ @@ -53,6 +55,8 @@ PERIPH_TYPE_ULA_FULL_DECODE,/* Standard ULA responding only to 0xfe */ PERIPH_TYPE_ZXATASP, /* ZXATASP IDE interface */ PERIPH_TYPE_ZXCF, /* ZXCF IDE interface */ + PERIPH_TYPE_ZXPRINTER, /* ZX Printer */ + PERIPH_TYPE_ZXPRINTER_FULL_DECODE, /* ZX Printer responding only to 0xfb */ } periph_type; /* Modified: trunk/fuse/printer.c =================================================================== --- trunk/fuse/printer.c 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/printer.c 2011-01-18 23:29:34 UTC (rev 4264) @@ -68,6 +68,8 @@ #define PARALLEL_STROBE_MAX_CYCLES 10000 static void printer_zxp_reset(int hard_reset); +static libspectrum_byte printer_zxp_read( libspectrum_word port, int *attached ); +static void printer_zxp_write( libspectrum_word port, libspectrum_byte b ); static module_info_t printer_zxp_module_info = { printer_zxp_reset, @@ -77,11 +79,26 @@ NULL }; +static periph_t printer_zxp_peripherals[] = { + { 0x0004, 0x0000, printer_zxp_read, printer_zxp_write }, + { 0, 0, NULL, NULL } +}; + +static periph_t printer_zxp_peripherals_full_decode[] = { + { 0x00ff, 0x00fb, printer_zxp_read, printer_zxp_write }, + { 0, 0, NULL, NULL } +}; + static void printer_zxp_init(void) { zxpstylus=zxpspeed=zxpheight=zxpnewspeed=zxplineofchar=0; zxppixel=-1; module_register(&printer_zxp_module_info); +periph_register_type(PERIPH_TYPE_ZXPRINTER,&settings_current.printer, + printer_zxp_peripherals); +periph_register_type(PERIPH_TYPE_ZXPRINTER_FULL_DECODE, + &settings_current.printer, + printer_zxp_peripherals_full_decode); } @@ -385,11 +402,9 @@ * very little brain. :-) Or at least, I don't grok it that well. * It works wonderfully though. */ -libspectrum_byte printer_zxp_read(libspectrum_word port GCC_UNUSED, - int *attached) +static libspectrum_byte printer_zxp_read(libspectrum_word port GCC_UNUSED, + int *attached) { -if(!settings_current.printer) - return(0xff); if(!printer_graphics_enabled) return(0xff); if(plusd_available) @@ -436,10 +451,8 @@ } -void printer_zxp_write(libspectrum_word port GCC_UNUSED,libspectrum_byte b) +static void printer_zxp_write(libspectrum_word port GCC_UNUSED,libspectrum_byte b) { -if(!settings_current.printer) - return; if(plusd_available) return; if(!zxpspeed) Modified: trunk/fuse/printer.h =================================================================== --- trunk/fuse/printer.h 2011-01-18 22:50:08 UTC (rev 4263) +++ trunk/fuse/printer.h 2011-01-18 23:29:34 UTC (rev 4264) @@ -28,8 +28,6 @@ #include <libspectrum.h> -libspectrum_byte printer_zxp_read( libspectrum_word port, int *attached ); -void printer_zxp_write( libspectrum_word port, libspectrum_byte b ); void printer_frame( void ); void printer_serial_write( libspectrum_byte b ); void printer_parallel_strobe_write( int on ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |