From: <fr...@us...> - 2009-10-22 10:59:11
|
Revision: 4099 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4099&view=rev Author: fredm Date: 2009-10-22 10:59:02 +0000 (Thu, 22 Oct 2009) Log Message: ----------- Make each peripheral/machine that uses memory paged in via /ROMCS have its own copy of the relevant struct (part of patch #2880415) (Gergely Szasz). Modified Paths: -------------- trunk/fuse/disk/beta.c trunk/fuse/disk/beta.h trunk/fuse/disk/opus.c trunk/fuse/disk/plusd.c trunk/fuse/hacking/ChangeLog trunk/fuse/ide/divide.c trunk/fuse/ide/zxatasp.c trunk/fuse/ide/zxcf.c trunk/fuse/if1.c trunk/fuse/if2.c trunk/fuse/machines/pentagon.c trunk/fuse/machines/pentagon1024.c trunk/fuse/machines/pentagon512.c trunk/fuse/machines/scorpion.c trunk/fuse/memory.c trunk/fuse/memory.h Modified: trunk/fuse/disk/beta.c =================================================================== --- trunk/fuse/disk/beta.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/disk/beta.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -58,6 +58,9 @@ #define DISK_TRY_MERGE(heads) ( option_enumerate_diskoptions_disk_try_merge() == 2 || \ ( option_enumerate_diskoptions_disk_try_merge() == 1 && heads == 1 ) ) +/* Two 8Kb memory chunks accessible by the Z80 when /ROMCS is low */ +memory_page beta_memory_map_romcs[2]; + int beta_available = 0; int beta_active = 0; int beta_builtin = 0; @@ -124,8 +127,8 @@ { if( !beta_active ) return; - memory_map_read[0] = memory_map_write[0] = memory_map_romcs[ 0 ]; - memory_map_read[1] = memory_map_write[1] = memory_map_romcs[ 1 ]; + memory_map_read[0] = memory_map_write[0] = beta_memory_map_romcs[0]; + memory_map_read[1] = memory_map_write[1] = beta_memory_map_romcs[1]; } static void @@ -165,6 +168,7 @@ if( index_event == -1 ) return 1; module_register( &beta_module_info ); + for( i = 0; i < 2; i++ ) beta_memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; return 0; } @@ -199,15 +203,15 @@ } if( !beta_builtin ) { - machine_load_rom_bank( memory_map_romcs, 0, 0, + machine_load_rom_bank( beta_memory_map_romcs, 0, 0, settings_current.rom_beta128, settings_default.rom_beta128, 0x4000 ); - memory_map_romcs[ 0 ].writable = 0; - memory_map_romcs[ 1 ].writable = 0; + beta_memory_map_romcs[ 0 ].writable = 0; + beta_memory_map_romcs[ 1 ].writable = 0; - memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL; - memory_map_romcs[1].source = MEMORY_SOURCE_PERIPHERAL; + beta_memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL; + beta_memory_map_romcs[1].source = MEMORY_SOURCE_PERIPHERAL; beta_active = 0; @@ -702,7 +706,7 @@ if( libspectrum_snap_beta_custom_rom( snap ) && libspectrum_snap_beta_rom( snap, 0 ) && machine_load_rom_bank_from_buffer( - memory_map_romcs, 0, 0, + beta_memory_map_romcs, 0, 0, libspectrum_snap_beta_rom( snap, 0 ), MEMORY_PAGE_SIZE * 2, 1 ) ) @@ -734,7 +738,7 @@ libspectrum_snap_set_beta_active( snap, 1 ); - if( memory_map_romcs[0].source == MEMORY_SOURCE_CUSTOMROM ) { + if( beta_memory_map_romcs[0].source == MEMORY_SOURCE_CUSTOMROM ) { size_t rom_length = MEMORY_PAGE_SIZE * 2; buffer = malloc( rom_length ); @@ -743,8 +747,8 @@ return; } - memcpy( buffer, memory_map_romcs[0].page, MEMORY_PAGE_SIZE ); - memcpy( buffer + MEMORY_PAGE_SIZE, memory_map_romcs[1].page, + memcpy( buffer, beta_memory_map_romcs[0].page, MEMORY_PAGE_SIZE ); + memcpy( buffer + MEMORY_PAGE_SIZE, beta_memory_map_romcs[1].page, MEMORY_PAGE_SIZE ); libspectrum_snap_set_beta_rom( snap, 0, buffer ); Modified: trunk/fuse/disk/beta.h =================================================================== --- trunk/fuse/disk/beta.h 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/disk/beta.h 2009-10-22 10:59:02 UTC (rev 4099) @@ -30,6 +30,7 @@ #include <libspectrum.h> +#include "memory.h" #include "periph.h" #include "disk/fdd.h" @@ -37,6 +38,9 @@ extern int beta_active; /* Is the Beta disk interface enabled? */ extern int beta_builtin; /* Is the Beta disk interface built-in? */ +/* Two 8Kb memory chunks accessible by the Z80 when /ROMCS is low */ +extern memory_page beta_memory_map_romcs[2]; + extern libspectrum_word beta_pc_mask; /* Bits to mask in PC for enable check */ extern libspectrum_word beta_pc_value; /* Value to compare masked PC against */ Modified: trunk/fuse/disk/opus.c =================================================================== --- trunk/fuse/disk/opus.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/disk/opus.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -46,6 +46,9 @@ #define DISK_TRY_MERGE(heads) ( option_enumerate_diskoptions_disk_try_merge() == 2 || \ ( option_enumerate_diskoptions_disk_try_merge() == 1 && heads == 1 ) ) +/* Two 8Kb memory chunks accessible by the Z80 when /ROMCS is low */ +static memory_page opus_memory_map_romcs[2]; + int opus_available = 0; int opus_active = 0; @@ -103,8 +106,8 @@ { if( !opus_active ) return; - memory_map_read[ 0 ] = memory_map_write[ 0 ] = memory_map_romcs[ 0 ]; - memory_map_read[ 1 ] = memory_map_write[ 1 ] = memory_map_romcs[ 1 ]; + memory_map_read[ 0 ] = memory_map_write[ 0 ] = opus_memory_map_romcs[ 0 ]; + memory_map_read[ 1 ] = memory_map_write[ 1 ] = opus_memory_map_romcs[ 1 ]; } static void @@ -139,6 +142,7 @@ index_event = event_register( opus_event_index, "Opus index" ); module_register( &opus_module_info ); + for( i = 0; i < 2; i++ ) opus_memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; return 0; } @@ -158,19 +162,19 @@ if( !periph_opus_active ) return; - machine_load_rom_bank( memory_map_romcs, 0, 0, + machine_load_rom_bank( opus_memory_map_romcs, 0, 0, settings_current.rom_opus, settings_default.rom_opus, 0x2000 ); - memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL; + opus_memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL; - memory_map_romcs[1].page = opus_ram; - memory_map_romcs[1].source = MEMORY_SOURCE_PERIPHERAL; + opus_memory_map_romcs[1].page = opus_ram; + opus_memory_map_romcs[1].source = MEMORY_SOURCE_PERIPHERAL; machine_current->ram.romcs = 0; - memory_map_romcs[ 0 ].writable = 0; - memory_map_romcs[ 1 ].writable = 1; + opus_memory_map_romcs[ 0 ].writable = 0; + opus_memory_map_romcs[ 1 ].writable = 1; data_reg_a = 0; data_dir_a = 0; @@ -650,7 +654,7 @@ if( libspectrum_snap_opus_custom_rom( snap ) && libspectrum_snap_opus_rom( snap, 0 ) && machine_load_rom_bank_from_buffer( - memory_map_romcs, 0, 0, + opus_memory_map_romcs, 0, 0, libspectrum_snap_opus_rom( snap, 0 ), MEMORY_PAGE_SIZE, 1 ) ) @@ -696,10 +700,10 @@ libspectrum_snap_set_opus_active( snap, 1 ); - buffer = alloc_and_copy_page( memory_map_romcs[0].page ); + buffer = alloc_and_copy_page( opus_memory_map_romcs[0].page ); if( !buffer ) return; libspectrum_snap_set_opus_rom( snap, 0, buffer ); - if( memory_map_romcs[0].source == MEMORY_SOURCE_CUSTOMROM ) + if( opus_memory_map_romcs[0].source == MEMORY_SOURCE_CUSTOMROM ) libspectrum_snap_set_opus_custom_rom( snap, 1 ); buffer = alloc_and_copy_page( opus_ram ); Modified: trunk/fuse/disk/plusd.c =================================================================== --- trunk/fuse/disk/plusd.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/disk/plusd.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -45,6 +45,9 @@ #define DISK_TRY_MERGE(heads) ( option_enumerate_diskoptions_disk_try_merge() == 2 || \ ( option_enumerate_diskoptions_disk_try_merge() == 1 && heads == 1 ) ) +/* Two 8Kb memory chunks accessible by the Z80 when /ROMCS is low */ +static memory_page plusd_memory_map_romcs[2]; + int plusd_available = 0; int plusd_active = 0; @@ -100,8 +103,8 @@ { if( !plusd_active ) return; - memory_map_read[ 0 ] = memory_map_write[ 0 ] = memory_map_romcs[ 0 ]; - memory_map_read[ 1 ] = memory_map_write[ 1 ] = memory_map_romcs[ 1 ]; + memory_map_read[ 0 ] = memory_map_write[ 0 ] = plusd_memory_map_romcs[ 0 ]; + memory_map_read[ 1 ] = memory_map_write[ 1 ] = plusd_memory_map_romcs[ 1 ]; } const periph_t plusd_peripherals[] = { @@ -151,6 +154,7 @@ index_event = event_register( plusd_event_index, "+D index" ); module_register( &plusd_module_info ); + for( i = 0; i < 2; i++ ) plusd_memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; return 0; } @@ -170,19 +174,19 @@ if( !periph_plusd_active ) return; - machine_load_rom_bank( memory_map_romcs, 0, 0, + machine_load_rom_bank( plusd_memory_map_romcs, 0, 0, settings_current.rom_plusd, settings_default.rom_plusd, 0x2000 ); - memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL; + plusd_memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL; - memory_map_romcs[1].page = plusd_ram; - memory_map_romcs[1].source = MEMORY_SOURCE_PERIPHERAL; + plusd_memory_map_romcs[1].page = plusd_ram; + plusd_memory_map_romcs[1].source = MEMORY_SOURCE_PERIPHERAL; machine_current->ram.romcs = 0; - memory_map_romcs[ 0 ].writable = 0; - memory_map_romcs[ 1 ].writable = 1; + plusd_memory_map_romcs[ 0 ].writable = 0; + plusd_memory_map_romcs[ 1 ].writable = 1; plusd_available = 1; plusd_active = 1; @@ -643,7 +647,7 @@ if( libspectrum_snap_plusd_custom_rom( snap ) && libspectrum_snap_plusd_rom( snap, 0 ) && machine_load_rom_bank_from_buffer( - memory_map_romcs, 0, 0, + plusd_memory_map_romcs, 0, 0, libspectrum_snap_plusd_rom( snap, 0 ), MEMORY_PAGE_SIZE, 1 ) ) @@ -684,10 +688,10 @@ libspectrum_snap_set_plusd_active( snap, 1 ); - buffer = alloc_and_copy_page( memory_map_romcs[0].page ); + buffer = alloc_and_copy_page( plusd_memory_map_romcs[0].page ); if( !buffer ) return; libspectrum_snap_set_plusd_rom( snap, 0, buffer ); - if( memory_map_romcs[0].source == MEMORY_SOURCE_CUSTOMROM ) + if( plusd_memory_map_romcs[0].source == MEMORY_SOURCE_CUSTOMROM ) libspectrum_snap_set_plusd_custom_rom( snap, 1 ); buffer = alloc_and_copy_page( plusd_ram ); Modified: trunk/fuse/hacking/ChangeLog =================================================================== --- trunk/fuse/hacking/ChangeLog 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/hacking/ChangeLog 2009-10-22 10:59:02 UTC (rev 4099) @@ -3239,3 +3239,8 @@ #2875612) (Gergely Szasz). 20091019 disk/disk.c: correct mapping of sector length to SECLEN_* macros (patch #2875613) (Gergely Szasz). +20091019 disk/{beta.[ch],opus.c,plusd.c},ide/{divide.c,zxatasp.c,zxcf.c},if1.c, + if2.c,machines/{pentagon.c,pentagon1024.c,pentagon512.c,scorpion.c}, + memory.[ch]: make each peripheral/machine that uses memory paged in via + /ROMCS have its own copy of the relevant struct (part of patch + #2880415) (Gergely Szasz). Modified: trunk/fuse/ide/divide.c =================================================================== --- trunk/fuse/ide/divide.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/ide/divide.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -61,6 +61,9 @@ static const libspectrum_byte DIVIDE_CONTROL_CONMEM = 0x80; static const libspectrum_byte DIVIDE_CONTROL_MAPRAM = 0x40; +/* Two 8Kb memory chunks accessible by the Z80 when /ROMCS is low */ +static memory_page divide_memory_map_romcs[2]; + int divide_automapping_enabled = 0; int divide_active = 0; static libspectrum_byte divide_control; @@ -103,7 +106,7 @@ int divide_init( void ) { - int error; + int error, i; divide_idechn0 = libspectrum_ide_alloc( LIBSPECTRUM_IDE_DATA16 ); divide_idechn1 = libspectrum_ide_alloc( LIBSPECTRUM_IDE_DATA16 ); @@ -126,6 +129,7 @@ } module_register( ÷_module_info ); + for( i = 0; i < 2; i++ ) divide_memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; if( periph_register_paging_events( event_type_string, &page_event, &unpage_event ) ) @@ -349,26 +353,26 @@ upper_ram_page = divide_control & (DIVIDE_PAGES - 1); if( divide_control & DIVIDE_CONTROL_CONMEM ) { - memory_map_romcs[0].page = divide_eprom; - memory_map_romcs[0].writable = !settings_current.divide_wp; - memory_map_romcs[1].page = divide_ram[ upper_ram_page ]; - memory_map_romcs[1].writable = 1; + divide_memory_map_romcs[0].page = divide_eprom; + divide_memory_map_romcs[0].writable = !settings_current.divide_wp; + divide_memory_map_romcs[1].page = divide_ram[ upper_ram_page ]; + divide_memory_map_romcs[1].writable = 1; } else { if( divide_control & DIVIDE_CONTROL_MAPRAM ) { - memory_map_romcs[0].page = divide_ram[3]; - memory_map_romcs[0].writable = 0; - memory_map_romcs[1].page = divide_ram[ upper_ram_page ]; - memory_map_romcs[1].writable = ( upper_ram_page != 3 ); + divide_memory_map_romcs[0].page = divide_ram[3]; + divide_memory_map_romcs[0].writable = 0; + divide_memory_map_romcs[1].page = divide_ram[ upper_ram_page ]; + divide_memory_map_romcs[1].writable = ( upper_ram_page != 3 ); } else { - memory_map_romcs[0].page = divide_eprom; - memory_map_romcs[0].writable = 0; - memory_map_romcs[1].page = divide_ram[ upper_ram_page ]; - memory_map_romcs[1].writable = 1; + divide_memory_map_romcs[0].page = divide_eprom; + divide_memory_map_romcs[0].writable = 0; + divide_memory_map_romcs[1].page = divide_ram[ upper_ram_page ]; + divide_memory_map_romcs[1].writable = 1; } } - memory_map_read[0] = memory_map_write[0] = memory_map_romcs[0]; - memory_map_read[1] = memory_map_write[1] = memory_map_romcs[1]; + memory_map_read[0] = memory_map_write[0] = divide_memory_map_romcs[0]; + memory_map_read[1] = memory_map_write[1] = divide_memory_map_romcs[1]; } static void Modified: trunk/fuse/ide/zxatasp.c =================================================================== --- trunk/fuse/ide/zxatasp.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/ide/zxatasp.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -39,6 +39,9 @@ #include "ui/ui.h" #include "zxatasp.h" +/* Two 8Kb memory chunks accessible by the Z80 when /ROMCS is low */ +static memory_page zxatasp_memory_map_romcs[2]; + /* TBD: Allow memory size selection (128K/512K) TBD: Should support for secondary channel be removed? @@ -156,7 +159,7 @@ int zxatasp_init( void ) { - int error = 0; + int error = 0, i; zxatasp_idechn0 = libspectrum_ide_alloc( LIBSPECTRUM_IDE_DATA16 ); zxatasp_idechn1 = libspectrum_ide_alloc( LIBSPECTRUM_IDE_DATA16 ); @@ -179,6 +182,7 @@ } module_register( &zxatasp_module_info ); + for( i = 0; i < 2; i++ ) zxatasp_memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; if( periph_register_paging_events( event_type_string, &page_event, &unpage_event ) ) @@ -444,7 +448,7 @@ for( i = 0; i < 2; i++ ) { - page = &memory_map_romcs[i]; + page = &zxatasp_memory_map_romcs[i]; offset = i & 1 ? MEMORY_PAGE_SIZE : 0x0000; page->page = &ZXATASPMEM[ bank ][ offset ]; @@ -498,21 +502,23 @@ if( !settings_current.zxatasp_active ) return; - if( settings_current.zxatasp_wp && ( memory_map_romcs[0].page_num & 1 ) ) { + if( settings_current.zxatasp_wp && + ( zxatasp_memory_map_romcs[0].page_num & 1 ) ) { writable = 0; } else { writable = 1; } - memory_map_romcs[0].writable = memory_map_romcs[1].writable = writable; + zxatasp_memory_map_romcs[0].writable = + zxatasp_memory_map_romcs[1].writable = writable; if( !settings_current.zxatasp_upload ) { - memory_map_read[0] = memory_map_romcs[0]; - memory_map_read[1] = memory_map_romcs[1]; + memory_map_read[0] = zxatasp_memory_map_romcs[0]; + memory_map_read[1] = zxatasp_memory_map_romcs[1]; } - memory_map_write[0] = memory_map_romcs[0]; - memory_map_write[1] = memory_map_romcs[1]; + memory_map_write[0] = zxatasp_memory_map_romcs[0]; + memory_map_write[1] = zxatasp_memory_map_romcs[1]; } static void Modified: trunk/fuse/ide/zxcf.c =================================================================== --- trunk/fuse/ide/zxcf.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/ide/zxcf.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -39,6 +39,9 @@ #include "ui/ui.h" #include "zxcf.h" +/* Two 8Kb memory chunks accessible by the Z80 when /ROMCS is low */ +static memory_page zxcf_memory_map_romcs[2]; + /* TBD: Allow memory size selection (128K/512K/1024K) TBD: Add secondary channel @@ -98,7 +101,7 @@ int zxcf_init( void ) { - int error; + int error, i; last_memctl = 0x00; @@ -114,6 +117,7 @@ } module_register( &zxcf_module_info ); + for( i = 0; i < 2; i++ ) zxcf_memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; if( periph_register_paging_events( event_type_string, &page_event, &unpage_event ) ) @@ -188,7 +192,7 @@ for( i = 0; i < 2; i++ ) { - page = &memory_map_romcs[i]; + page = &zxcf_memory_map_romcs[i]; offset = i & 1 ? MEMORY_PAGE_SIZE : 0x0000; page->page = &ZXCFMEM[ bank ][ offset ]; @@ -271,12 +275,12 @@ if( !settings_current.zxcf_active ) return; if( !settings_current.zxcf_upload ) { - memory_map_read[0] = memory_map_romcs[0]; - memory_map_read[1] = memory_map_romcs[1]; + memory_map_read[0] = zxcf_memory_map_romcs[0]; + memory_map_read[1] = zxcf_memory_map_romcs[1]; } - memory_map_write[0] = memory_map_romcs[0]; - memory_map_write[1] = memory_map_romcs[1]; + memory_map_write[0] = zxcf_memory_map_romcs[0]; + memory_map_write[1] = zxcf_memory_map_romcs[1]; } static void Modified: trunk/fuse/if1.c =================================================================== --- trunk/fuse/if1.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/if1.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -153,6 +153,9 @@ every other 0x00 + 0x## are discarded */ +/* Two 8Kb memory chunks accessible by the Z80 when /ROMCS is low */ +static memory_page if1_memory_map_romcs[2]; + /* IF1 paged out ROM activated? */ int if1_active = 0; int if1_available = 0; @@ -285,7 +288,7 @@ int if1_init( void ) { - int m; + int m, i; if1_ula.fd_r = -1; if1_ula.fd_t = -1; @@ -323,6 +326,7 @@ } module_register( &if1_module_info ); + for( i = 0; i < 2; i++ ) if1_memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; if( periph_register_paging_events( event_type_string, &page_event, &unpage_event ) ) @@ -359,12 +363,12 @@ if( !periph_interface1_active ) return; - machine_load_rom_bank( memory_map_romcs, 0, 0, + machine_load_rom_bank( if1_memory_map_romcs, 0, 0, settings_current.rom_interface_i, settings_default.rom_interface_i, MEMORY_PAGE_SIZE ); - memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL; + if1_memory_map_romcs[0].source = MEMORY_SOURCE_PERIPHERAL; machine_current->ram.romcs = 0; @@ -410,7 +414,7 @@ { if( !if1_active ) return; - memory_map_read[0] = memory_map_write[0] = memory_map_romcs[0]; + memory_map_read[0] = memory_map_write[0] = if1_memory_map_romcs[0]; } static void @@ -428,7 +432,7 @@ if( libspectrum_snap_interface1_custom_rom( snap ) && libspectrum_snap_interface1_rom( snap, 0 ) && machine_load_rom_bank_from_buffer( - memory_map_romcs, 0, 0, + if1_memory_map_romcs, 0, 0, libspectrum_snap_interface1_rom( snap, 0 ), libspectrum_snap_interface1_rom_length( snap, 0 ), 1 ) ) @@ -452,10 +456,10 @@ libspectrum_snap_set_interface1_paged ( snap, if1_active ); libspectrum_snap_set_interface1_drive_count( snap, 8 ); - if( memory_map_romcs[0].source == MEMORY_SOURCE_CUSTOMROM ) { + if( if1_memory_map_romcs[0].source == MEMORY_SOURCE_CUSTOMROM ) { size_t rom_length = MEMORY_PAGE_SIZE; - if( memory_map_romcs[1].source == MEMORY_SOURCE_CUSTOMROM ) { + if( if1_memory_map_romcs[1].source == MEMORY_SOURCE_CUSTOMROM ) { rom_length <<= 1; } @@ -468,10 +472,10 @@ return; } - memcpy( buffer, memory_map_romcs[0].page, MEMORY_PAGE_SIZE ); + memcpy( buffer, if1_memory_map_romcs[0].page, MEMORY_PAGE_SIZE ); if( rom_length == MEMORY_PAGE_SIZE*2 ) { - memcpy( buffer + MEMORY_PAGE_SIZE, memory_map_romcs[1].page, + memcpy( buffer + MEMORY_PAGE_SIZE, if1_memory_map_romcs[1].page, MEMORY_PAGE_SIZE ); } Modified: trunk/fuse/if2.c =================================================================== --- trunk/fuse/if2.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/if2.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -39,6 +39,9 @@ #include "settings.h" #include "ui/ui.h" +/* Two 8Kb memory chunks accessible by the Z80 when /ROMCS is low */ +static memory_page if2_memory_map_romcs[2]; + /* IF2 cart inserted? */ int if2_active = 0; @@ -60,7 +63,10 @@ int if2_init( void ) { + int i; + module_register( &if2_module_info ); + for( i = 0; i < 2; i++ ) if2_memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; return 0; } @@ -115,13 +121,13 @@ if ( !periph_interface2_active ) return; - machine_load_rom_bank( memory_map_romcs, 0, 0, + machine_load_rom_bank( if2_memory_map_romcs, 0, 0, settings_current.if2_file, NULL, 2 * MEMORY_PAGE_SIZE ); - memory_map_romcs[0].source = - memory_map_romcs[1].source = MEMORY_SOURCE_CARTRIDGE; + if2_memory_map_romcs[0].source = + if2_memory_map_romcs[1].source = MEMORY_SOURCE_CARTRIDGE; machine_current->ram.romcs = 1; @@ -136,8 +142,8 @@ { if( !if2_active ) return; - memory_map_read[0] = memory_map_write[0] = memory_map_romcs[0]; - memory_map_read[1] = memory_map_write[1] = memory_map_romcs[1]; + memory_map_read[0] = memory_map_write[0] = if2_memory_map_romcs[0]; + memory_map_read[1] = memory_map_write[1] = if2_memory_map_romcs[1]; } static void @@ -150,24 +156,25 @@ if( libspectrum_snap_interface2_rom( snap, 0 ) ) { - memory_map_romcs[0].offset = 0; - memory_map_romcs[0].page_num = 0; - memory_map_romcs[0].page = + if2_memory_map_romcs[0].offset = 0; + if2_memory_map_romcs[0].page_num = 0; + if2_memory_map_romcs[0].page = memory_pool_allocate( 2 * MEMORY_PAGE_SIZE * sizeof( libspectrum_byte ) ); - if( !memory_map_romcs[0].page ) { + if( !if2_memory_map_romcs[0].page ) { ui_error( UI_ERROR_ERROR, "Out of memory at %s:%d", __FILE__, __LINE__ ); return; } - memcpy( memory_map_romcs[0].page, + memcpy( if2_memory_map_romcs[0].page, libspectrum_snap_interface2_rom( snap, 0 ), 2 * MEMORY_PAGE_SIZE ); - memory_map_romcs[1].offset = MEMORY_PAGE_SIZE; - memory_map_romcs[1].page_num = 0; - memory_map_romcs[1].page = memory_map_romcs[0].page + MEMORY_PAGE_SIZE; - memory_map_romcs[1].source = - memory_map_romcs[0].source = MEMORY_SOURCE_CARTRIDGE; + if2_memory_map_romcs[1].offset = MEMORY_PAGE_SIZE; + if2_memory_map_romcs[1].page_num = 0; + if2_memory_map_romcs[1].page = + if2_memory_map_romcs[0].page + MEMORY_PAGE_SIZE; + if2_memory_map_romcs[1].source = + if2_memory_map_romcs[0].source = MEMORY_SOURCE_CARTRIDGE; } ui_menu_activate( UI_MENU_ITEM_MEDIA_CARTRIDGE_IF2_EJECT, 1 ); @@ -190,8 +197,8 @@ return; } - memcpy( buffer, memory_map_romcs[0].page, MEMORY_PAGE_SIZE ); - memcpy( buffer + MEMORY_PAGE_SIZE, memory_map_romcs[1].page, + memcpy( buffer, if2_memory_map_romcs[0].page, MEMORY_PAGE_SIZE ); + memcpy( buffer + MEMORY_PAGE_SIZE, if2_memory_map_romcs[1].page, MEMORY_PAGE_SIZE ); libspectrum_snap_set_interface2_rom( snap, 0, buffer ); } Modified: trunk/fuse/machines/pentagon.c =================================================================== --- trunk/fuse/machines/pentagon.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/machines/pentagon.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -101,6 +101,8 @@ int pentagon_init( fuse_machine_info *machine ) { + int i; + machine->machine = LIBSPECTRUM_MACHINE_PENT; machine->id = "pentagon"; @@ -116,6 +118,7 @@ machine->shutdown = NULL; machine->memory_map = spec128_memory_map; + for( i = 0; i < 2; i++ ) beta_memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; return 0; } @@ -131,7 +134,7 @@ error = machine_load_rom( 2, 1, settings_current.rom_pentagon_1, settings_default.rom_pentagon_1, 0x4000 ); if( error ) return error; - error = machine_load_rom_bank( memory_map_romcs, 0, 0, + error = machine_load_rom_bank( beta_memory_map_romcs, 0, 0, settings_current.rom_pentagon_2, settings_default.rom_pentagon_2, 0x4000 ); if( error ) return error; Modified: trunk/fuse/machines/pentagon1024.c =================================================================== --- trunk/fuse/machines/pentagon1024.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/machines/pentagon1024.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -67,6 +67,8 @@ int pentagon1024_init( fuse_machine_info *machine ) { + int i; + machine->machine = LIBSPECTRUM_MACHINE_PENT1024; machine->id = "pentagon1024"; @@ -83,6 +85,8 @@ machine->memory_map = pentagon1024_memory_map; + for( i = 0; i < 2; i++ ) beta_memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; + return 0; } @@ -101,7 +105,7 @@ error = machine_load_rom( 4, 2, settings_current.rom_pentagon1024_3, settings_default.rom_pentagon1024_3, 0x4000 ); if( error ) return error; - error = machine_load_rom_bank( memory_map_romcs, 0, 0, + error = machine_load_rom_bank( beta_memory_map_romcs, 0, 0, settings_current.rom_pentagon1024_2, settings_default.rom_pentagon1024_2, 0x4000 ); if( error ) return error; Modified: trunk/fuse/machines/pentagon512.c =================================================================== --- trunk/fuse/machines/pentagon512.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/machines/pentagon512.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -51,6 +51,8 @@ int pentagon512_init( fuse_machine_info *machine ) { + int i; + machine->machine = LIBSPECTRUM_MACHINE_PENT512; machine->id = "pentagon512"; @@ -66,6 +68,7 @@ machine->shutdown = NULL; machine->memory_map = pentagon_memory_map; + for( i = 0; i < 2; i++ ) beta_memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; return 0; } @@ -85,7 +88,7 @@ error = machine_load_rom( 4, 2, settings_current.rom_pentagon512_3, settings_default.rom_pentagon512_3, 0x4000 ); if( error ) return error; - error = machine_load_rom_bank( memory_map_romcs, 0, 0, + error = machine_load_rom_bank( beta_memory_map_romcs, 0, 0, settings_current.rom_pentagon512_2, settings_default.rom_pentagon512_2, 0x4000 ); if( error ) return error; Modified: trunk/fuse/machines/scorpion.c =================================================================== --- trunk/fuse/machines/scorpion.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/machines/scorpion.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -69,6 +69,8 @@ int scorpion_init( fuse_machine_info *machine ) { + int i; + machine->machine = LIBSPECTRUM_MACHINE_SCORP; machine->id = "scorpion"; @@ -84,6 +86,7 @@ machine->shutdown = NULL; machine->memory_map = scorpion_memory_map; + for( i = 0; i < 2; i++ ) beta_memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; return 0; } @@ -102,7 +105,7 @@ error = machine_load_rom( 4, 2, settings_current.rom_scorpion_2, settings_default.rom_scorpion_2, 0x4000 ); if( error ) return error; - error = machine_load_rom_bank( memory_map_romcs, 0, 0, + error = machine_load_rom_bank( beta_memory_map_romcs, 0, 0, settings_current.rom_scorpion_3, settings_default.rom_scorpion_3, 0x4000 ); if( error ) return error; Modified: trunk/fuse/memory.c =================================================================== --- trunk/fuse/memory.c 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/memory.c 2009-10-22 10:59:02 UTC (rev 4099) @@ -45,9 +45,6 @@ memory_page memory_map_read[8]; memory_page memory_map_write[8]; -/* Two 8Kb memory chunks accessible by the Z80 when /ROMCS is low */ -memory_page memory_map_romcs[2]; - /* Mappings for the 'home' (normal ROM/RAM) pages, the Timex DOCK and the Timex EXROM */ memory_page *memory_map_home[8]; @@ -131,8 +128,6 @@ memory_map_home[i] = memory_map_dock[i] = memory_map_exrom[i] = &memory_map_ram[0]; - for( i = 0; i < 2; i++ ) memory_map_romcs[i].bank = MEMORY_BANK_ROMCS; - module_register( &memory_module_info ); return 0; Modified: trunk/fuse/memory.h =================================================================== --- trunk/fuse/memory.h 2009-10-19 12:34:16 UTC (rev 4098) +++ trunk/fuse/memory.h 2009-10-22 10:59:02 UTC (rev 4099) @@ -70,9 +70,6 @@ extern memory_page memory_map_read[8]; extern memory_page memory_map_write[8]; -/* Two 8Kb memory chunks accessible by the Z80 when /ROMCS is low */ -extern memory_page memory_map_romcs[2]; - /* 8 8Kb memory chunks accessible by the Z80 for normal RAM (home) and the Timex Dock and Exrom */ extern memory_page *memory_map_home[8]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |