From: <pa...@us...> - 2011-05-04 23:02:39
|
Revision: 4422 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4422&view=rev Author: pak21 Date: 2011-05-04 23:02:33 +0000 (Wed, 04 May 2011) Log Message: ----------- First bits of general memory page sizing. NB: don't even consider changing the page size yet! Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/memory.c branches/2011-05-04-memory/fuse/memory.h branches/2011-05-04-memory/fuse/peripherals/ula.c Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-04 22:41:32 UTC (rev 4421) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-04 23:02:33 UTC (rev 4422) @@ -3629,3 +3629,5 @@ along with older autotools (patch #3295662) (thanks, Tomáš Franke) (Sergio Baldoví) 20110504 tape.c: fix warnings. +20110505 memory.[ch],peripherals/ula.c: first bits of general memory page + sizing. Modified: branches/2011-05-04-memory/fuse/memory.c =================================================================== --- branches/2011-05-04-memory/fuse/memory.c 2011-05-04 22:41:32 UTC (rev 4421) +++ branches/2011-05-04-memory/fuse/memory.c 2011-05-04 23:02:33 UTC (rev 4422) @@ -52,15 +52,15 @@ int memory_source_any; /* Used by the debugger to signify an absolute address */ int memory_source_none; /* No memory attached here */ -/* Each 8Kb RAM chunk accessible by the Z80 */ -memory_page memory_map_read[8]; -memory_page memory_map_write[8]; +/* Each RAM chunk accessible by the Z80 */ +memory_page memory_map_read[MEMORY_PAGES_IN_64K]; +memory_page memory_map_write[MEMORY_PAGES_IN_64K]; /* Mappings for the 'home' (normal ROM/RAM) pages, the Timex DOCK and the Timex EXROM */ -memory_page *memory_map_home[8]; -memory_page *memory_map_dock[8]; -memory_page *memory_map_exrom[8]; +memory_page *memory_map_home[MEMORY_PAGES_IN_64K]; +memory_page *memory_map_dock[MEMORY_PAGES_IN_64K]; +memory_page *memory_map_exrom[MEMORY_PAGES_IN_64K]; /* Standard mappings for the 'normal' RAM */ memory_page memory_map_ram[ 2 * SPECTRUM_RAM_PAGES ]; @@ -256,7 +256,7 @@ libspectrum_word bank; memory_page *mapping; - bank = address >> 13; + bank = address >> MEMORY_PAGE_SIZE_LOGARITHM; mapping = &memory_map_read[ bank ]; if( debugger_mode != DEBUGGER_MODE_INACTIVE ) @@ -268,7 +268,7 @@ if( opus_active && address >= 0x2800 && address < 0x3800 ) return opus_read( address ); - return mapping->page[ address & 0x1fff ]; + return mapping->page[ address & MEMORY_PAGE_SIZE_MASK ]; } void @@ -277,7 +277,7 @@ libspectrum_word bank; memory_page *mapping; - bank = address >> 13; + bank = address >> MEMORY_PAGE_SIZE_LOGARITHM; mapping = &memory_map_write[ bank ]; if( debugger_mode != DEBUGGER_MODE_INACTIVE ) @@ -294,9 +294,9 @@ memory_display_dirty_pentagon_16_col( libspectrum_word address, libspectrum_byte b ) { - libspectrum_word bank = address >> 13; + libspectrum_word bank = address >> MEMORY_PAGE_SIZE_LOGARITHM; memory_page *mapping = &memory_map_write[ bank ]; - libspectrum_word offset = address & 0x1fff; + libspectrum_word offset = address & MEMORY_PAGE_SIZE_MASK; libspectrum_byte *memory = mapping->page; /* The offset into the 16Kb RAM page (as opposed to the 8Kb chunk) */ @@ -321,9 +321,9 @@ void memory_display_dirty_sinclair( libspectrum_word address, libspectrum_byte b ) \ { - libspectrum_word bank = address >> 13; + libspectrum_word bank = address >> MEMORY_PAGE_SIZE_LOGARITHM; memory_page *mapping = &memory_map_write[ bank ]; - libspectrum_word offset = address & 0x1fff; + libspectrum_word offset = address & MEMORY_PAGE_SIZE_MASK; libspectrum_byte *memory = mapping->page; /* The offset into the 16Kb RAM page (as opposed to the 8Kb chunk) */ @@ -343,7 +343,7 @@ void writebyte_internal( libspectrum_word address, libspectrum_byte b ) { - libspectrum_word bank = address >> 13; + libspectrum_word bank = address >> MEMORY_PAGE_SIZE_LOGARITHM; memory_page *mapping = &memory_map_write[ bank ]; if( opus_active && address >= 0x2800 && address < 0x3800 ) { @@ -351,7 +351,7 @@ } else if( mapping->writable || (mapping->source != memory_source_none && settings_current.writable_roms) ) { - libspectrum_word offset = address & 0x1fff; + libspectrum_word offset = address & MEMORY_PAGE_SIZE_MASK; libspectrum_byte *memory = mapping->page; memory_display_dirty( address, b ); Modified: branches/2011-05-04-memory/fuse/memory.h =================================================================== --- branches/2011-05-04-memory/fuse/memory.h 2011-05-04 22:41:32 UTC (rev 4421) +++ branches/2011-05-04-memory/fuse/memory.h 2011-05-04 23:02:33 UTC (rev 4422) @@ -63,17 +63,28 @@ } memory_page; -#define MEMORY_PAGE_SIZE 0x2000 +/* A memory page will be 1 << (this many) bytes in size */ +#define MEMORY_PAGE_SIZE_LOGARITHM 13 -/* Each 8Kb RAM chunk accessible by the Z80 */ -extern memory_page memory_map_read[8]; -extern memory_page memory_map_write[8]; +/* The actual size of a memory page */ +#define MEMORY_PAGE_SIZE ( 1 << MEMORY_PAGE_SIZE_LOGARITHM ) -/* 8 8Kb memory chunks accessible by the Z80 for normal RAM (home) and +/* The mask to use to select the bits within a page */ +#define MEMORY_PAGE_SIZE_MASK ( MEMORY_PAGE_SIZE - 1 ) + +/* The number of memory pages in 64K + This calculation is equivalent to 2^16 / MEMORY_PAGE_SIZE */ +#define MEMORY_PAGES_IN_64K ( 1 << ( 16 - MEMORY_PAGE_SIZE_LOGARITHM ) ) + +/* Each RAM chunk accessible by the Z80 */ +extern memory_page memory_map_read[MEMORY_PAGES_IN_64K]; +extern memory_page memory_map_write[MEMORY_PAGES_IN_64K]; + +/* Memory chunks accessible by the Z80 for normal RAM (home) and the Timex Dock and Exrom */ -extern memory_page *memory_map_home[8]; -extern memory_page *memory_map_dock[8]; -extern memory_page *memory_map_exrom[8]; +extern memory_page *memory_map_home[MEMORY_PAGES_IN_64K]; +extern memory_page *memory_map_dock[MEMORY_PAGES_IN_64K]; +extern memory_page *memory_map_exrom[MEMORY_PAGES_IN_64K]; extern memory_page memory_map_ram[ 2 * SPECTRUM_RAM_PAGES ]; extern memory_page memory_map_rom[ 8]; @@ -108,7 +119,7 @@ #ifndef CORETEST #define readbyte_internal( address ) \ - memory_map_read[ (libspectrum_word)(address) >> 13 ].page[ (address) & 0x1fff ] + memory_map_read[ (libspectrum_word)(address) >> MEMORY_PAGE_SIZE_LOGARITHM ].page[ (address) & MEMORY_PAGE_SIZE_MASK ] #else /* #ifndef CORETEST */ Modified: branches/2011-05-04-memory/fuse/peripherals/ula.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/ula.c 2011-05-04 22:41:32 UTC (rev 4421) +++ branches/2011-05-04-memory/fuse/peripherals/ula.c 2011-05-04 23:02:33 UTC (rev 4422) @@ -176,7 +176,7 @@ void ula_contend_port_early( libspectrum_word port ) { - if( memory_map_read[ port >> 13 ].contended ) + if( memory_map_read[ port >> MEMORY_PAGE_SIZE_LOGARITHM ].contended ) tstates += ula_contention_no_mreq[ tstates ]; tstates++; @@ -191,7 +191,7 @@ } else { - if( memory_map_read[ port >> 13 ].contended ) { + if( memory_map_read[ port >> MEMORY_PAGE_SIZE_LOGARITHM ].contended ) { tstates += ula_contention_no_mreq[ tstates ]; tstates++; tstates += ula_contention_no_mreq[ tstates ]; tstates++; tstates += ula_contention_no_mreq[ tstates ]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-05-08 21:40:58
|
Revision: 4425 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4425&view=rev Author: pak21 Date: 2011-05-08 21:40:52 +0000 (Sun, 08 May 2011) Log Message: ----------- Base 48K Spectrum working with a page size of 4Kb. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/machine.h branches/2011-05-04-memory/fuse/machines/spec48.c branches/2011-05-04-memory/fuse/memory.c branches/2011-05-04-memory/fuse/memory.h branches/2011-05-04-memory/fuse/spectrum.h branches/2011-05-04-memory/fuse/z80/z80_macros.h Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-06 12:22:12 UTC (rev 4424) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-08 21:40:52 UTC (rev 4425) @@ -3631,3 +3631,5 @@ 20110504 tape.c: fix warnings. 20110505 memory.[ch],peripherals/ula.c: first bits of general memory page sizing. +20110508 memory.[ch],machine.h,machines/spec48.c,spectrum.h,z80/z80_macros.h: + base 48K Spectrum working with a page size of 4Kb. Modified: branches/2011-05-04-memory/fuse/machine.h =================================================================== --- branches/2011-05-04-memory/fuse/machine.h 2011-05-06 12:22:12 UTC (rev 4424) +++ branches/2011-05-04-memory/fuse/machine.h 2011-05-08 21:40:52 UTC (rev 4425) @@ -1,5 +1,5 @@ /* machine.h: Routines for handling the various machine types - Copyright (c) 1999-2008 Philip Kendall + Copyright (c) 1999-2011 Philip Kendall $Id$ @@ -31,9 +31,9 @@ #include <libspectrum.h> #include "display.h" -#include "memory.h" #include "peripherals/ay.h" #include "peripherals/specdrum.h" +#include "spectrum.h" typedef libspectrum_byte (*spectrum_unattached_port_fn)( void ); Modified: branches/2011-05-04-memory/fuse/machines/spec48.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/spec48.c 2011-05-06 12:22:12 UTC (rev 4424) +++ branches/2011-05-04-memory/fuse/machines/spec48.c 2011-05-08 21:40:52 UTC (rev 4425) @@ -107,31 +107,16 @@ { size_t i; - /* ROM 0, RAM 5, RAM 2, RAM 0 */ - memory_map_home[0] = &memory_map_rom[ 0]; - memory_map_home[1] = &memory_map_rom[ 1]; + /* 0x0000: ROM 0, not writable, not contended */ + memory_map_16k( 0x0000, memory_map_rom, 0, 0, 0 ); + /* 0x4000: RAM 5, writable, contended */ + memory_map_16k( 0x4000, memory_map_ram, 5, 1, 1 ); + /* 0x8000: RAM 2, writable, not contended */ + memory_map_16k( 0x8000, memory_map_ram, 2, 1, 0 ); + /* 0xc000: RAM 0, writable, not contended */ + memory_map_16k( 0xc000, memory_map_ram, 0, 1, 0 ); - memory_map_home[2] = &memory_map_ram[10]; - memory_map_home[3] = &memory_map_ram[11]; - - memory_map_home[4] = &memory_map_ram[ 4]; - memory_map_home[5] = &memory_map_ram[ 5]; - - memory_map_home[6] = &memory_map_ram[ 0]; - memory_map_home[7] = &memory_map_ram[ 1]; - - /* 0x4000 - 0x7fff contended */ - memory_map_home[2]->contended = memory_map_home[3]->contended = 1; - - /* 0x8000 - 0xffff not contended */ - memory_map_home[ 4]->contended = memory_map_home[ 5]->contended = 0; - memory_map_home[ 6]->contended = memory_map_home[ 7]->contended = 0; - - /* Mark as present/writeable */ - for( i = 2; i < 8; ++i ) - memory_map_home[i]->writable = 1; - - for( i = 0; i < 8; i++ ) + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; return 0; Modified: branches/2011-05-04-memory/fuse/memory.c =================================================================== --- branches/2011-05-04-memory/fuse/memory.c 2011-05-06 12:22:12 UTC (rev 4424) +++ branches/2011-05-04-memory/fuse/memory.c 2011-05-08 21:40:52 UTC (rev 4425) @@ -63,12 +63,10 @@ memory_page *memory_map_exrom[MEMORY_PAGES_IN_64K]; /* Standard mappings for the 'normal' RAM */ -memory_page memory_map_ram[ 2 * SPECTRUM_RAM_PAGES ]; +memory_page memory_map_ram[SPECTRUM_RAM_PAGES * MEMORY_PAGES_IN_16K]; -#define SPECTRUM_ROM_PAGES 4 - /* Standard mappings for the ROMs */ -memory_page memory_map_rom[ 2 * SPECTRUM_ROM_PAGES ]; +memory_page memory_map_rom[SPECTRUM_ROM_PAGES * MEMORY_PAGES_IN_16K]; /* Some allocated memory */ typedef struct memory_pool_entry_t { @@ -104,14 +102,9 @@ int memory_init( void ) { - size_t i; - memory_page *mapping1, *mapping2; + size_t i, j; memory_sources = g_array_new( FALSE, FALSE, sizeof( const char* ) ); - if( !memory_sources ) { - ui_error( UI_ERROR_ERROR, "out of memory at %s:%d\n", __FILE__, __LINE__ ); - fuse_abort(); - } memory_source_rom = memory_source_register( "ROM" ); memory_source_ram = memory_source_register( "RAM" ); @@ -121,36 +114,24 @@ /* Nothing in the memory pool as yet */ pool = NULL; - for( i = 0; i < 8; i++ ) { + for( i = 0; i < SPECTRUM_ROM_PAGES; i++ ) + for( j = 0; j < MEMORY_PAGES_IN_16K; j++ ) { + memory_page *page = &memory_map_rom[i * MEMORY_PAGES_IN_16K + j]; + page->writable = 0; + page->source = memory_source_rom; + } + + for( i = 0; i < SPECTRUM_RAM_PAGES; i++ ) + for( j = 0; j < MEMORY_PAGES_IN_16K; j++ ) { + memory_page *page = &memory_map_ram[i * MEMORY_PAGES_IN_16K + j]; + page->page = &RAM[i][j * MEMORY_PAGE_SIZE]; + page->page_num = i; + page->offset = j * MEMORY_PAGE_SIZE; + page->source = memory_source_ram; + } - mapping1 = &memory_map_rom[ i ]; - - mapping1->page = NULL; - mapping1->writable = 0; - mapping1->page_num = i; - mapping1->source = memory_source_rom; - - } - - for( i = 0; i < SPECTRUM_RAM_PAGES; i++ ) { - - mapping1 = &memory_map_ram[ 2 * i ]; - mapping2 = &memory_map_ram[ 2 * i + 1 ]; - - mapping1->page = &RAM[i][ 0x0000 ]; - mapping2->page = &RAM[i][ MEMORY_PAGE_SIZE ]; - - mapping1->writable = mapping2->writable = 0; - mapping1->page_num = mapping2->page_num = i; - - mapping1->offset = 0x0000; - mapping2->offset = MEMORY_PAGE_SIZE; - - mapping1->source = mapping2->source = memory_source_ram; - } - /* Just initialise these with something */ - for( i = 0; i < 8; i++ ) + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) memory_map_home[i] = memory_map_dock[i] = memory_map_exrom[i] = &memory_map_ram[0]; @@ -250,6 +231,21 @@ } } +/* Map 16K of memory */ +void +memory_map_16k( libspectrum_word address, memory_page *source, int page_num, + int writable, int contended ) +{ + int i; + + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) { + memory_page *page = &source[ page_num * MEMORY_PAGES_IN_16K + i ]; + page->writable = writable; + page->contended = contended; + memory_map_home[ ( address >> MEMORY_PAGE_SIZE_LOGARITHM ) + i ] = page; + } +} + libspectrum_byte readbyte( libspectrum_word address ) { @@ -438,7 +434,7 @@ { size_t i; - for( i = 0; i < 2 * SPECTRUM_ROM_PAGES; i++ ) + for( i = 0; i < SPECTRUM_ROM_PAGES * MEMORY_PAGES_IN_16K; i++ ) if( memory_map_rom[ i ].save_to_snapshot ) return 1; @@ -451,7 +447,7 @@ { size_t i; - for( i = 0; i < 2 * SPECTRUM_ROM_PAGES; i++ ) + for( i = 0; i < SPECTRUM_ROM_PAGES * MEMORY_PAGES_IN_16K; i++ ) memory_map_rom[ i ].save_to_snapshot = 0; } @@ -470,7 +466,7 @@ libspectrum_snap_set_custom_rom( snap, 1 ); /* write all ROMs to the snap */ - for( i = 0; i < 2 * SPECTRUM_ROM_PAGES; i++ ) { + for( i = 0; i < SPECTRUM_ROM_PAGES * MEMORY_PAGES_IN_16K; i++ ) { if( memory_map_rom[ i ].page ) { if( current_page_num != memory_map_rom[ i ].page_num ) { if( current_rom ) Modified: branches/2011-05-04-memory/fuse/memory.h =================================================================== --- branches/2011-05-04-memory/fuse/memory.h 2011-05-06 12:22:12 UTC (rev 4424) +++ branches/2011-05-04-memory/fuse/memory.h 2011-05-08 21:40:52 UTC (rev 4425) @@ -28,8 +28,6 @@ #include <libspectrum.h> -#include "spectrum.h" - /* Register a new memory source */ int memory_source_register( const char *description ); @@ -63,7 +61,9 @@ } memory_page; -/* A memory page will be 1 << (this many) bytes in size */ +/* A memory page will be 1 << (this many) bytes in size + ie 12 => 4 Kb, 13 => 8 Kb, 14 => 16 Kb + */ #define MEMORY_PAGE_SIZE_LOGARITHM 13 /* The actual size of a memory page */ @@ -76,6 +76,9 @@ This calculation is equivalent to 2^16 / MEMORY_PAGE_SIZE */ #define MEMORY_PAGES_IN_64K ( 1 << ( 16 - MEMORY_PAGE_SIZE_LOGARITHM ) ) +/* The number of memory pages in 16K */ +#define MEMORY_PAGES_IN_16K ( 1 << ( 14 - MEMORY_PAGE_SIZE_LOGARITHM ) ) + /* Each RAM chunk accessible by the Z80 */ extern memory_page memory_map_read[MEMORY_PAGES_IN_64K]; extern memory_page memory_map_write[MEMORY_PAGES_IN_64K]; @@ -86,9 +89,15 @@ extern memory_page *memory_map_dock[MEMORY_PAGES_IN_64K]; extern memory_page *memory_map_exrom[MEMORY_PAGES_IN_64K]; -extern memory_page memory_map_ram[ 2 * SPECTRUM_RAM_PAGES ]; -extern memory_page memory_map_rom[ 8]; +/* The number of 16Kb RAM pages we support: 1040 Kb needed for the Pentagon 1024 */ +#define SPECTRUM_RAM_PAGES 65 +/* The maximum number of 16Kb ROMs we support */ +#define SPECTRUM_ROM_PAGES 4 + +extern memory_page memory_map_ram[SPECTRUM_RAM_PAGES * MEMORY_PAGES_IN_16K]; +extern memory_page memory_map_rom[SPECTRUM_ROM_PAGES * MEMORY_PAGES_IN_16K]; + /* Which RAM page contains the current screen */ extern int memory_current_screen; @@ -111,6 +120,10 @@ configuration */ void memory_reset( void ); +/* Map 16K of memory */ +void memory_map_16k( libspectrum_word address, memory_page *source, + int page_num, int writable, int contended ); + libspectrum_byte readbyte( libspectrum_word address ); /* Use a macro for performance in the main core, but a function for Modified: branches/2011-05-04-memory/fuse/spectrum.h =================================================================== --- branches/2011-05-04-memory/fuse/spectrum.h 2011-05-06 12:22:12 UTC (rev 4424) +++ branches/2011-05-04-memory/fuse/spectrum.h 2011-05-08 21:40:52 UTC (rev 4425) @@ -1,5 +1,5 @@ /* spectrum.h: Spectrum 48K specific routines - Copyright (c) 1999-2004 Philip Kendall, Darren Salt + Copyright (c) 1999-2011 Philip Kendall, Darren Salt $Id$ @@ -30,15 +30,14 @@ #include <libspectrum.h> +#include "memory.h" + /* How many tstates have elapsed since the last interrupt? (or more precisely, since the ULA last pulled the /INT line to the Z80 low) */ extern libspectrum_dword tstates; /* Things relating to memory */ -/* For the Pentagon 1024 we need 1040 KB of RAM */ -#define SPECTRUM_RAM_PAGES 65 - extern libspectrum_byte RAM[ SPECTRUM_RAM_PAGES ][0x4000]; typedef int Modified: branches/2011-05-04-memory/fuse/z80/z80_macros.h =================================================================== --- branches/2011-05-04-memory/fuse/z80/z80_macros.h 2011-05-06 12:22:12 UTC (rev 4424) +++ branches/2011-05-04-memory/fuse/z80/z80_macros.h 2011-05-08 21:40:52 UTC (rev 4425) @@ -1,5 +1,5 @@ /* z80_macros.h: Some commonly used z80 things as macros - Copyright (c) 1999-2004 Philip Kendall + Copyright (c) 1999-2011 Philip Kendall $Id$ @@ -104,17 +104,17 @@ #ifndef CORETEST #define contend_read(address,time) \ - if( memory_map_read[ (address) >> 13 ].contended ) \ + if( memory_map_read[ (address) >> MEMORY_PAGE_SIZE_LOGARITHM ].contended ) \ tstates += ula_contention[ tstates ]; \ tstates += (time); #define contend_read_no_mreq(address,time) \ - if( memory_map_read[ (address) >> 13 ].contended ) \ + if( memory_map_read[ (address) >> MEMORY_PAGE_SIZE_LOGARITHM ].contended ) \ tstates += ula_contention_no_mreq[ tstates ]; \ tstates += (time); #define contend_write_no_mreq(address,time) \ - if( memory_map_write[ (address) >> 13 ].contended ) \ + if( memory_map_write[ (address) >> MEMORY_PAGE_SIZE_LOGARITHM ].contended ) \ tstates += ula_contention_no_mreq[ tstates ]; \ tstates += (time); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-05-09 18:55:29
|
Revision: 4426 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4426&view=rev Author: pak21 Date: 2011-05-09 18:55:23 +0000 (Mon, 09 May 2011) Log Message: ----------- Get 128K machine working working with 8Kb pages again. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/machine.c branches/2011-05-04-memory/fuse/machines/spec128.c branches/2011-05-04-memory/fuse/machines/spec48.c branches/2011-05-04-memory/fuse/memory.c branches/2011-05-04-memory/fuse/memory.h Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-08 21:40:52 UTC (rev 4425) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-09 18:55:23 UTC (rev 4426) @@ -3633,3 +3633,5 @@ sizing. 20110508 memory.[ch],machine.h,machines/spec48.c,spectrum.h,z80/z80_macros.h: base 48K Spectrum working with a page size of 4Kb. +20110509 machine.c,machines/{spec128.c,spec48.c},memory.[ch]: get 128K machine + working working with 8Kb pages again. Modified: branches/2011-05-04-memory/fuse/machine.c =================================================================== --- branches/2011-05-04-memory/fuse/machine.c 2011-05-08 21:40:52 UTC (rev 4425) +++ branches/2011-05-04-memory/fuse/machine.c 2011-05-09 18:55:23 UTC (rev 4426) @@ -1,5 +1,5 @@ /* machine.c: Routines for handling the various machine types - Copyright (c) 1999-2008 Philip Kendall + Copyright (c) 1999-2011 Philip Kendall $Id$ @@ -200,7 +200,7 @@ static int machine_select_machine( fuse_machine_info *machine ) { - int width, height, i; + int width, height; int capabilities; machine_current = machine; @@ -234,12 +234,6 @@ sound_init( settings_current.sound_device ); - /* Mark RAM as not-present/read-only. The machine's reset function will - * mark available pages as present/writeable. - */ - for( i = 0; i < 2 * SPECTRUM_RAM_PAGES; i++ ) - memory_map_ram[i].writable = 0; - /* Do a hard reset */ if( machine_reset( 1 ) ) return 1; Modified: branches/2011-05-04-memory/fuse/machines/spec128.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/spec128.c 2011-05-08 21:40:52 UTC (rev 4425) +++ branches/2011-05-04-memory/fuse/machines/spec128.c 2011-05-09 18:55:23 UTC (rev 4426) @@ -103,31 +103,19 @@ memory_current_screen = 5; memory_screen_mask = 0xffff; - /* ROM 0, RAM 5, RAM 2, RAM 0 */ - memory_map_home[0] = &memory_map_rom[ 0]; - memory_map_home[1] = &memory_map_rom[ 1]; - - memory_map_home[2] = &memory_map_ram[10]; - memory_map_home[3] = &memory_map_ram[11]; - - memory_map_home[4] = &memory_map_ram[ 4]; - memory_map_home[5] = &memory_map_ram[ 5]; - - memory_map_home[6] = &memory_map_ram[ 0]; - memory_map_home[7] = &memory_map_ram[ 1]; - - /* Mark as present/writeable */ - for( i = 0; i < 16; i++ ) - memory_map_ram[i].writable = 1; - /* Odd pages contended on the 128K/+2; the loop is up to 16 to ensure all of the Scorpion's 256Kb RAM is not contended */ for( i = 0; i < 16; i++ ) - memory_map_ram[ 2 * i ].contended = - memory_map_ram[ 2 * i + 1 ].contended = i & 1 ? contention : 0; + memory_ram_set_16k_contention( i, i & 1 ? contention : 0 ); - for( i = 0; i < 8; i++ ) - memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; + /* 0x0000: ROM 0 */ + memory_map_16k( 0x0000, memory_map_rom, 0 ); + /* 0x4000: RAM 5 */ + memory_map_16k( 0x4000, memory_map_ram, 5 ); + /* 0x8000: RAM 2 */ + memory_map_16k( 0x8000, memory_map_ram, 2 ); + /* 0xc000: RAM 0 */ + memory_map_16k( 0xc000, memory_map_ram, 0 ); return 0; } Modified: branches/2011-05-04-memory/fuse/machines/spec48.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/spec48.c 2011-05-08 21:40:52 UTC (rev 4425) +++ branches/2011-05-04-memory/fuse/machines/spec48.c 2011-05-09 18:55:23 UTC (rev 4426) @@ -107,14 +107,17 @@ { size_t i; - /* 0x0000: ROM 0, not writable, not contended */ - memory_map_16k( 0x0000, memory_map_rom, 0, 0, 0 ); - /* 0x4000: RAM 5, writable, contended */ - memory_map_16k( 0x4000, memory_map_ram, 5, 1, 1 ); - /* 0x8000: RAM 2, writable, not contended */ - memory_map_16k( 0x8000, memory_map_ram, 2, 1, 0 ); - /* 0xc000: RAM 0, writable, not contended */ - memory_map_16k( 0xc000, memory_map_ram, 0, 1, 0 ); + /* 0x0000: ROM 0 */ + memory_map_16k( 0x0000, memory_map_rom, 0 ); + /* 0x4000: RAM 5, contended */ + memory_ram_set_16k_contention( 5, 1 ); + memory_map_16k( 0x4000, memory_map_ram, 5 ); + /* 0x8000: RAM 2, not contended */ + memory_ram_set_16k_contention( 2, 0 ); + memory_map_16k( 0x8000, memory_map_ram, 2 ); + /* 0xc000: RAM 0, not contended */ + memory_ram_set_16k_contention( 0, 0 ); + memory_map_16k( 0xc000, memory_map_ram, 0 ); for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; Modified: branches/2011-05-04-memory/fuse/memory.c =================================================================== --- branches/2011-05-04-memory/fuse/memory.c 2011-05-08 21:40:52 UTC (rev 4425) +++ branches/2011-05-04-memory/fuse/memory.c 2011-05-09 18:55:23 UTC (rev 4426) @@ -118,6 +118,7 @@ for( j = 0; j < MEMORY_PAGES_IN_16K; j++ ) { memory_page *page = &memory_map_rom[i * MEMORY_PAGES_IN_16K + j]; page->writable = 0; + page->contended = 0; page->source = memory_source_rom; } @@ -127,6 +128,7 @@ page->page = &RAM[i][j * MEMORY_PAGE_SIZE]; page->page_num = i; page->offset = j * MEMORY_PAGE_SIZE; + page->writable = 1; page->source = memory_source_ram; } @@ -231,19 +233,25 @@ } } +/* Set contention for 16K of RAM */ +void +memory_ram_set_16k_contention( int page_num, int contended ) +{ + int i; + + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + memory_map_ram[ page_num * MEMORY_PAGES_IN_16K + i ].contended = contended; +} + /* Map 16K of memory */ void -memory_map_16k( libspectrum_word address, memory_page *source, int page_num, - int writable, int contended ) +memory_map_16k( libspectrum_word address, memory_page *source, int page_num ) { int i; - for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) { - memory_page *page = &source[ page_num * MEMORY_PAGES_IN_16K + i ]; - page->writable = writable; - page->contended = contended; - memory_map_home[ ( address >> MEMORY_PAGE_SIZE_LOGARITHM ) + i ] = page; - } + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + memory_map_home[ ( address >> MEMORY_PAGE_SIZE_LOGARITHM ) + i ] = + &source[ page_num * MEMORY_PAGES_IN_16K + i ]; } libspectrum_byte Modified: branches/2011-05-04-memory/fuse/memory.h =================================================================== --- branches/2011-05-04-memory/fuse/memory.h 2011-05-08 21:40:52 UTC (rev 4425) +++ branches/2011-05-04-memory/fuse/memory.h 2011-05-09 18:55:23 UTC (rev 4426) @@ -120,9 +120,12 @@ configuration */ void memory_reset( void ); +/* Set contention for 16K of RAM */ +void memory_ram_set_16k_contention( int page_num, int contended ); + /* Map 16K of memory */ void memory_map_16k( libspectrum_word address, memory_page *source, - int page_num, int writable, int contended ); + int page_num ); libspectrum_byte readbyte( libspectrum_word address ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-05-09 21:20:24
|
Revision: 4427 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4427&view=rev Author: pak21 Date: 2011-05-09 21:20:17 +0000 (Mon, 09 May 2011) Log Message: ----------- Get 128K machine working with 4Kb pages. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/machine.c branches/2011-05-04-memory/fuse/machine.h branches/2011-05-04-memory/fuse/machines/pentagon.c branches/2011-05-04-memory/fuse/machines/pentagon1024.c branches/2011-05-04-memory/fuse/machines/pentagon512.c branches/2011-05-04-memory/fuse/machines/scorpion.c branches/2011-05-04-memory/fuse/machines/spec128.c branches/2011-05-04-memory/fuse/machines/spec16.c branches/2011-05-04-memory/fuse/machines/spec48.c branches/2011-05-04-memory/fuse/machines/spec48_ntsc.c branches/2011-05-04-memory/fuse/machines/spec_se.c branches/2011-05-04-memory/fuse/machines/specplus2.c branches/2011-05-04-memory/fuse/machines/specplus2a.c branches/2011-05-04-memory/fuse/machines/specplus3.c branches/2011-05-04-memory/fuse/machines/specplus3e.c branches/2011-05-04-memory/fuse/machines/tc2048.c branches/2011-05-04-memory/fuse/machines/tc2068.c branches/2011-05-04-memory/fuse/machines/ts2068.c branches/2011-05-04-memory/fuse/memory.c branches/2011-05-04-memory/fuse/peripherals/disk/beta.c branches/2011-05-04-memory/fuse/peripherals/disk/disciple.c branches/2011-05-04-memory/fuse/peripherals/disk/opus.c branches/2011-05-04-memory/fuse/peripherals/disk/plusd.c branches/2011-05-04-memory/fuse/peripherals/if1.c branches/2011-05-04-memory/fuse/peripherals/if2.c branches/2011-05-04-memory/fuse/peripherals/scld.c branches/2011-05-04-memory/fuse/peripherals/speccyboot.c Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-09 21:20:17 UTC (rev 4427) @@ -3635,3 +3635,9 @@ base 48K Spectrum working with a page size of 4Kb. 20110509 machine.c,machines/{spec128.c,spec48.c},memory.[ch]: get 128K machine working working with 8Kb pages again. +20110509 machine.[ch],machines/{pentagon1024.c,pentagon512.c,pentagon.c, + scorpion.c,spec128.c,spec16.c,spec48.c,spec48_ntsc.c,specplus2a.c, + specplus2.c,specplus3.c,specplus3e.c,spec_se.c,tc2048.c,tc2068.c, + ts2068.c},memory.[ch], peripherals/{disk/beta.c,disciple.c,opus.c, + plusd.c},if1.c,if2.c,speccyboot.c}: get 128K machine working with 4Kb + pages. Modified: branches/2011-05-04-memory/fuse/machine.c =================================================================== --- branches/2011-05-04-memory/fuse/machine.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machine.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -249,40 +249,30 @@ } int -machine_load_rom_bank_from_buffer( memory_page* bank_map, size_t which, - int page_num, unsigned char *buffer, - size_t length, int custom ) +machine_load_rom_bank_from_buffer( memory_page* bank_map, int page_num, + unsigned char *buffer, size_t length, int custom ) { - size_t i, offset; - - bank_map[ which ].offset = 0; - bank_map[ which ].page_num = page_num; - bank_map[ which ].page = memory_pool_allocate( length ); - if( !bank_map[ which ].page ) { - ui_error( UI_ERROR_ERROR, "Out of memory at %s:%d", __FILE__, - __LINE__ ); - return 1; - } + size_t offset; + libspectrum_byte *data = memory_pool_allocate( length ); + memory_page *page; - memcpy( bank_map[ which ].page, buffer, length ); - bank_map[ which ].save_to_snapshot = custom; + memcpy( data, buffer, length ); - for( i = 1, offset = MEMORY_PAGE_SIZE; + for( page = &bank_map[ page_num * MEMORY_PAGES_IN_16K ], offset = 0; offset < length; - i++, offset += MEMORY_PAGE_SIZE ) { - bank_map[ which + i ].offset = offset; - bank_map[ which + i ].page_num = page_num; - bank_map[ which + i ].page = bank_map[ which ].page + offset; - bank_map[ which + i ].save_to_snapshot = custom; + page++, offset += MEMORY_PAGE_SIZE ) { + page->offset = offset; + page->page_num = page_num; + page->page = data + offset; + page->save_to_snapshot = custom; } return 0; } static int -machine_load_rom_bank_from_file( memory_page* bank_map, size_t which, - int page_num, const char *filename, - size_t expected_length, int custom ) +machine_load_rom_bank_from_file( memory_page* bank_map, int page_num, + const char *filename, size_t expected_length, int custom ) { int error; utils_file rom; @@ -303,8 +293,8 @@ return 1; } - error = machine_load_rom_bank_from_buffer( bank_map, which, page_num, - rom.buffer, rom.length, custom ); + error = machine_load_rom_bank_from_buffer( bank_map, page_num, rom.buffer, + rom.length, custom ); error |= utils_close_file( &rom ); @@ -312,29 +302,28 @@ } int -machine_load_rom_bank( memory_page* bank_map, size_t which, int page_num, - const char *filename, const char *fallback, - size_t expected_length ) +machine_load_rom_bank( memory_page* bank_map, int page_num, + const char *filename, const char *fallback, size_t expected_length ) { int custom = 0; int retval; if( fallback ) custom = strcmp( filename, fallback ); - retval = machine_load_rom_bank_from_file( bank_map, which, page_num, - filename, expected_length, custom ); + retval = machine_load_rom_bank_from_file( bank_map, page_num, filename, + expected_length, custom ); if( retval && fallback ) - retval = machine_load_rom_bank_from_file( bank_map, which, page_num, - fallback, expected_length, 0 ); + retval = machine_load_rom_bank_from_file( bank_map, page_num, fallback, + expected_length, 0 ); return retval; } int -machine_load_rom( size_t which, int page_num, const char *filename, - const char *fallback, size_t expected_length ) +machine_load_rom( int page_num, const char *filename, const char *fallback, + size_t expected_length ) { - return machine_load_rom_bank( memory_map_rom, which, page_num, filename, - fallback, expected_length ); + return machine_load_rom_bank( memory_map_rom, page_num, filename, fallback, + expected_length ); } int Modified: branches/2011-05-04-memory/fuse/machine.h =================================================================== --- branches/2011-05-04-memory/fuse/machine.h 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machine.h 2011-05-09 21:20:17 UTC (rev 4427) @@ -98,14 +98,12 @@ int machine_select_id( const char *id ); const char* machine_get_id( libspectrum_machine type ); -int machine_load_rom_bank_from_buffer( memory_page* bank_map, size_t which, - int page_num, unsigned char *buffer, - size_t length, int custom ); -int machine_load_rom_bank( memory_page* bank_map, size_t which, int page_num, - const char *filename, const char *fallback, - size_t expected_length ); -int machine_load_rom( size_t which, int page_num, const char *filename, - const char *fallback, size_t expected_length ); +int machine_load_rom_bank_from_buffer( memory_page* bank_map, int page_num, + unsigned char *buffer, size_t length, int custom ); +int machine_load_rom_bank( memory_page* bank_map, int page_num, + const char *filename, const char *fallback, size_t expected_length ); +int machine_load_rom( int page_num, const char *filename, const char *fallback, + size_t expected_length ); int machine_reset( int hard_reset ); int machine_end( void ); Modified: branches/2011-05-04-memory/fuse/machines/pentagon.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/pentagon.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/pentagon.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -110,13 +110,13 @@ { int error; - error = machine_load_rom( 0, 0, settings_current.rom_pentagon_0, + error = machine_load_rom( 0, settings_current.rom_pentagon_0, settings_default.rom_pentagon_0, 0x4000 ); if( error ) return error; - error = machine_load_rom( 2, 1, settings_current.rom_pentagon_1, + error = machine_load_rom( 1, settings_current.rom_pentagon_1, settings_default.rom_pentagon_1, 0x4000 ); if( error ) return error; - error = machine_load_rom_bank( beta_memory_map_romcs, 0, 0, + error = machine_load_rom_bank( beta_memory_map_romcs, 0, settings_current.rom_pentagon_2, settings_default.rom_pentagon_2, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/pentagon1024.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/pentagon1024.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/pentagon1024.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -71,16 +71,16 @@ int error; int i; - error = machine_load_rom( 0, 0, settings_current.rom_pentagon1024_0, + error = machine_load_rom( 0, settings_current.rom_pentagon1024_0, settings_default.rom_pentagon1024_0, 0x4000 ); if( error ) return error; - error = machine_load_rom( 2, 1, settings_current.rom_pentagon1024_1, + error = machine_load_rom( 1, settings_current.rom_pentagon1024_1, settings_default.rom_pentagon1024_1, 0x4000 ); if( error ) return error; - error = machine_load_rom( 4, 2, settings_current.rom_pentagon1024_3, + error = machine_load_rom( 2, settings_current.rom_pentagon1024_3, settings_default.rom_pentagon1024_3, 0x4000 ); if( error ) return error; - error = machine_load_rom_bank( beta_memory_map_romcs, 0, 0, + error = machine_load_rom_bank( beta_memory_map_romcs, 0, settings_current.rom_pentagon1024_2, settings_default.rom_pentagon1024_2, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/pentagon512.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/pentagon512.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/pentagon512.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -75,16 +75,16 @@ int error; int i; - error = machine_load_rom( 0, 0, settings_current.rom_pentagon512_0, + error = machine_load_rom( 0, settings_current.rom_pentagon512_0, settings_default.rom_pentagon512_0, 0x4000 ); if( error ) return error; - error = machine_load_rom( 2, 1, settings_current.rom_pentagon512_1, + error = machine_load_rom( 1, settings_current.rom_pentagon512_1, settings_default.rom_pentagon512_1, 0x4000 ); if( error ) return error; - error = machine_load_rom( 4, 2, settings_current.rom_pentagon512_3, + error = machine_load_rom( 2, settings_current.rom_pentagon512_3, settings_default.rom_pentagon512_3, 0x4000 ); if( error ) return error; - error = machine_load_rom_bank( beta_memory_map_romcs, 0, 0, + error = machine_load_rom_bank( beta_memory_map_romcs, 0, settings_current.rom_pentagon512_2, settings_default.rom_pentagon512_2, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/scorpion.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/scorpion.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/scorpion.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -74,16 +74,16 @@ { int i, error; - error = machine_load_rom( 0, 0, settings_current.rom_scorpion_0, + error = machine_load_rom( 0, settings_current.rom_scorpion_0, settings_default.rom_scorpion_0, 0x4000 ); if( error ) return error; - error = machine_load_rom( 2, 1, settings_current.rom_scorpion_1, + error = machine_load_rom( 1, settings_current.rom_scorpion_1, settings_default.rom_scorpion_1, 0x4000 ); if( error ) return error; - error = machine_load_rom( 4, 2, settings_current.rom_scorpion_2, + error = machine_load_rom( 2, settings_current.rom_scorpion_2, settings_default.rom_scorpion_2, 0x4000 ); if( error ) return error; - error = machine_load_rom_bank( beta_memory_map_romcs, 0, 0, + error = machine_load_rom_bank( beta_memory_map_romcs, 0, settings_current.rom_scorpion_3, settings_default.rom_scorpion_3, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/spec128.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/spec128.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/spec128.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -68,10 +68,10 @@ { int error; - error = machine_load_rom( 0, 0, settings_current.rom_128_0, + error = machine_load_rom( 0, settings_current.rom_128_0, settings_default.rom_128_0, 0x4000 ); if( error ) return error; - error = machine_load_rom( 2, 1, settings_current.rom_128_1, + error = machine_load_rom( 1, settings_current.rom_128_1, settings_default.rom_128_1, 0x4000 ); if( error ) return error; @@ -136,16 +136,14 @@ void spec128_select_rom( int rom ) { - memory_map_home[0] = &memory_map_rom[ 2 * rom ]; - memory_map_home[1] = &memory_map_rom[ 2 * rom + 1 ]; + memory_map_16k( 0x0000, memory_map_rom, rom ); machine_current->ram.current_rom = rom; } void spec128_select_page( int page ) { - memory_map_home[6] = &memory_map_ram[ 2 * page ]; - memory_map_home[7] = &memory_map_ram[ 2 * page + 1 ]; + memory_map_16k( 0xc000, memory_map_ram, page ); machine_current->ram.current_page = page; } @@ -170,7 +168,7 @@ spec128_select_rom( rom ); spec128_select_page( page ); - for( i = 0; i < 8; i++ ) + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; memory_romcs_map(); Modified: branches/2011-05-04-memory/fuse/machines/spec16.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/spec16.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/spec16.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -70,7 +70,7 @@ int error; size_t i; - error = machine_load_rom( 0, 0, settings_current.rom_16, + error = machine_load_rom( 0, settings_current.rom_16, settings_default.rom_16, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/spec48.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/spec48.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/spec48.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -74,7 +74,7 @@ { int error; - error = machine_load_rom( 0, 0, settings_current.rom_48, + error = machine_load_rom( 0, settings_current.rom_48, settings_default.rom_48, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/spec48_ntsc.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/spec48_ntsc.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/spec48_ntsc.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -67,7 +67,7 @@ { int error; - error = machine_load_rom( 0, 0, settings_current.rom_48, + error = machine_load_rom( 0, settings_current.rom_48, settings_default.rom_48, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/spec_se.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/spec_se.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/spec_se.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -1,9 +1,5 @@ /* spec_se.c: ZX Spectrum SE specific routines - Copyright (c) 2003 Darren Salt - Copyright (c) 2004 Fredrick Meunier, Philip Kendall - Based on tc2048.c - Copyright (c) 1999-2002 Philip Kendall - Copyright (c) 2002-2003 Fredrick Meunier + Copyright (c) 1999-2011 Fredrick Meunier, Philip Kendall, Darren Salt $Id$ @@ -105,10 +101,10 @@ error = dock_exrom_reset(); if( error ) return error; - error = machine_load_rom( 0, 0, settings_current.rom_spec_se_0, + error = machine_load_rom( 0, settings_current.rom_spec_se_0, settings_default.rom_spec_se_0, 0x4000 ); if( error ) return error; - error = machine_load_rom( 2, 1, settings_current.rom_spec_se_1, + error = machine_load_rom( 1, settings_current.rom_spec_se_1, settings_default.rom_spec_se_1, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/specplus2.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/specplus2.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/specplus2.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -1,5 +1,5 @@ /* specplus2.c: Spectrum +2 specific routines - Copyright (c) 1999-2004 Philip Kendall + Copyright (c) 1999-2011 Philip Kendall $Id$ @@ -67,10 +67,10 @@ { int error; - error = machine_load_rom( 0, 0, settings_current.rom_plus2_0, + error = machine_load_rom( 0, settings_current.rom_plus2_0, settings_default.rom_plus2_0, 0x4000 ); if( error ) return error; - error = machine_load_rom( 2, 1, settings_current.rom_plus2_1, + error = machine_load_rom( 1, settings_current.rom_plus2_1, settings_default.rom_plus2_1, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/specplus2a.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/specplus2a.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/specplus2a.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -1,5 +1,5 @@ /* specplus2a.c: Spectrum +2A specific routines - Copyright (c) 1999-2004 Philip Kendall + Copyright (c) 1999-2011 Philip Kendall $Id$ @@ -65,16 +65,16 @@ { int error; - error = machine_load_rom( 0, 0, settings_current.rom_plus2a_0, + error = machine_load_rom( 0, settings_current.rom_plus2a_0, settings_default.rom_plus2a_0, 0x4000 ); if( error ) return error; - error = machine_load_rom( 2, 1, settings_current.rom_plus2a_1, + error = machine_load_rom( 1, settings_current.rom_plus2a_1, settings_default.rom_plus2a_1, 0x4000 ); if( error ) return error; - error = machine_load_rom( 4, 2, settings_current.rom_plus2a_2, + error = machine_load_rom( 2, settings_current.rom_plus2a_2, settings_default.rom_plus2a_2, 0x4000 ); if( error ) return error; - error = machine_load_rom( 6, 3, settings_current.rom_plus2a_3, + error = machine_load_rom( 3, settings_current.rom_plus2a_3, settings_default.rom_plus2a_3, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/specplus3.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/specplus3.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/specplus3.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -1,5 +1,5 @@ /* specplus3.c: Spectrum +2A/+3 specific routines - Copyright (c) 1999-2007 Philip Kendall, Darren Salt + Copyright (c) 1999-2011 Philip Kendall, Darren Salt $Id$ @@ -151,16 +151,16 @@ { int error; - error = machine_load_rom( 0, 0, settings_current.rom_plus3_0, + error = machine_load_rom( 0, settings_current.rom_plus3_0, settings_default.rom_plus3_0, 0x4000 ); if( error ) return error; - error = machine_load_rom( 2, 1, settings_current.rom_plus3_1, + error = machine_load_rom( 1, settings_current.rom_plus3_1, settings_default.rom_plus3_1, 0x4000 ); if( error ) return error; - error = machine_load_rom( 4, 2, settings_current.rom_plus3_2, + error = machine_load_rom( 2, settings_current.rom_plus3_2, settings_default.rom_plus3_2, 0x4000 ); if( error ) return error; - error = machine_load_rom( 6, 3, settings_current.rom_plus3_3, + error = machine_load_rom( 3, settings_current.rom_plus3_3, settings_default.rom_plus3_3, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/specplus3e.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/specplus3e.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/specplus3e.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -64,16 +64,16 @@ { int error; - error = machine_load_rom( 0, 0, settings_current.rom_plus3e_0, + error = machine_load_rom( 0, settings_current.rom_plus3e_0, settings_default.rom_plus3e_0, 0x4000 ); if( error ) return error; - error = machine_load_rom( 2, 1, settings_current.rom_plus3e_1, + error = machine_load_rom( 1, settings_current.rom_plus3e_1, settings_default.rom_plus3e_1, 0x4000 ); if( error ) return error; - error = machine_load_rom( 4, 2, settings_current.rom_plus3e_2, + error = machine_load_rom( 2, settings_current.rom_plus3e_2, settings_default.rom_plus3e_2, 0x4000 ); if( error ) return error; - error = machine_load_rom( 6, 3, settings_current.rom_plus3e_3, + error = machine_load_rom( 3, settings_current.rom_plus3e_3, settings_default.rom_plus3e_3, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/tc2048.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/tc2048.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/tc2048.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -78,7 +78,7 @@ size_t i; int error; - error = machine_load_rom( 0, 0, settings_current.rom_tc2048, + error = machine_load_rom( 0, settings_current.rom_tc2048, settings_default.rom_tc2048, 0x4000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/tc2068.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/tc2068.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/tc2068.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -121,10 +121,10 @@ size_t i; int error; - error = machine_load_rom( 0, 0, settings_current.rom_tc2068_0, + error = machine_load_rom( 0, settings_current.rom_tc2068_0, settings_default.rom_tc2068_0, 0x4000 ); if( error ) return error; - error = machine_load_rom( 2, -1, settings_current.rom_tc2068_1, + error = machine_load_rom( 1, settings_current.rom_tc2068_1, settings_default.rom_tc2068_1, 0x2000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/machines/ts2068.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/ts2068.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/machines/ts2068.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -70,10 +70,10 @@ size_t i; int error; - error = machine_load_rom( 0, 0, settings_current.rom_ts2068_0, + error = machine_load_rom( 0, settings_current.rom_ts2068_0, settings_default.rom_ts2068_0, 0x4000 ); if( error ) return error; - error = machine_load_rom( 2, -1, settings_current.rom_ts2068_1, + error = machine_load_rom( 1, settings_current.rom_ts2068_1, settings_default.rom_ts2068_1, 0x2000 ); if( error ) return error; Modified: branches/2011-05-04-memory/fuse/memory.c =================================================================== --- branches/2011-05-04-memory/fuse/memory.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/memory.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -200,7 +200,6 @@ entry = malloc( sizeof( *entry ) ); if( !entry ) { ui_error( UI_ERROR_ERROR, "Out of memory at %s:%d", __FILE__, __LINE__ ); - free( memory ); fuse_abort(); } @@ -413,11 +412,9 @@ if( libspectrum_snap_custom_rom( snap ) ) { for( i = 0; i < libspectrum_snap_custom_rom_pages( snap ) && i < 4; i++ ) { if( libspectrum_snap_roms( snap, i ) ) { - machine_load_rom_bank_from_buffer( - memory_map_rom, i * 2, - i, libspectrum_snap_roms( snap, i ), - libspectrum_snap_rom_length( snap, i ), - 1 ); + machine_load_rom_bank_from_buffer( memory_map_rom, i, + libspectrum_snap_roms( snap, i ), + libspectrum_snap_rom_length( snap, i ), 1 ); } } Modified: branches/2011-05-04-memory/fuse/peripherals/disk/beta.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/beta.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/peripherals/disk/beta.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -214,7 +214,7 @@ } if( !beta_builtin ) { - if( machine_load_rom_bank( beta_memory_map_romcs, 0, 0, + if( machine_load_rom_bank( beta_memory_map_romcs, 0, settings_current.rom_beta128, settings_default.rom_beta128, 0x4000 ) ) { beta_active = 0; @@ -743,10 +743,9 @@ if( libspectrum_snap_beta_custom_rom( snap ) && libspectrum_snap_beta_rom( snap, 0 ) && machine_load_rom_bank_from_buffer( - beta_memory_map_romcs, 0, 0, + beta_memory_map_romcs, 0, libspectrum_snap_beta_rom( snap, 0 ), - MEMORY_PAGE_SIZE * 2, - 1 ) ) + 0x4000, 1 ) ) return; /* ignore drive count for now, there will be an issue with loading snaps where Modified: branches/2011-05-04-memory/fuse/peripherals/disk/disciple.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/disciple.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/peripherals/disk/disciple.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -202,7 +202,7 @@ if( !periph_is_active( PERIPH_TYPE_DISCIPLE ) ) return; - if( machine_load_rom_bank( disciple_memory_map_romcs, 0, 0, + if( machine_load_rom_bank( disciple_memory_map_romcs, 0, settings_current.rom_disciple, settings_default.rom_disciple, 0x4000 ) ) { settings_current.disciple = 0; Modified: branches/2011-05-04-memory/fuse/peripherals/disk/opus.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/opus.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/peripherals/disk/opus.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -1,5 +1,5 @@ /* opus.c: Routines for handling the Opus Discovery interface - Copyright (c) 1999-2009 Stuart Brady, Fredrick Meunier, Philip Kendall, + Copyright (c) 1999-2011 Stuart Brady, Fredrick Meunier, Philip Kendall, Dmitry Sanarin, Darren Salt, Michael D Wynne, Gergely Szasz $Id$ @@ -172,7 +172,7 @@ if( !periph_is_active( PERIPH_TYPE_OPUS ) ) return; - if( machine_load_rom_bank( opus_memory_map_romcs, 0, 0, + if( machine_load_rom_bank( opus_memory_map_romcs, 0, settings_current.rom_opus, settings_default.rom_opus, 0x2000 ) ) { settings_current.opus = 0; @@ -680,10 +680,9 @@ if( libspectrum_snap_opus_custom_rom( snap ) && libspectrum_snap_opus_rom( snap, 0 ) && machine_load_rom_bank_from_buffer( - opus_memory_map_romcs, 0, 0, + opus_memory_map_romcs, 0, libspectrum_snap_opus_rom( snap, 0 ), - MEMORY_PAGE_SIZE, - 1 ) ) + 0x2000, 1 ) ) return; if( libspectrum_snap_opus_ram( snap, 0 ) ) { Modified: branches/2011-05-04-memory/fuse/peripherals/disk/plusd.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/plusd.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/peripherals/disk/plusd.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -1,5 +1,5 @@ /* plusd.c: Routines for handling the +D interface - Copyright (c) 1999-2007 Stuart Brady, Fredrick Meunier, Philip Kendall, + Copyright (c) 1999-2011 Stuart Brady, Fredrick Meunier, Philip Kendall, Dmitry Sanarin, Darren Salt $Id$ @@ -186,7 +186,7 @@ if( !periph_is_active( PERIPH_TYPE_PLUSD ) ) return; - if( machine_load_rom_bank( plusd_memory_map_romcs, 0, 0, + if( machine_load_rom_bank( plusd_memory_map_romcs, 0, settings_current.rom_plusd, settings_default.rom_plusd, 0x2000 ) ) { settings_current.plusd = 0; @@ -650,10 +650,9 @@ if( libspectrum_snap_plusd_custom_rom( snap ) && libspectrum_snap_plusd_rom( snap, 0 ) && machine_load_rom_bank_from_buffer( - plusd_memory_map_romcs, 0, 0, + plusd_memory_map_romcs, 0, libspectrum_snap_plusd_rom( snap, 0 ), - MEMORY_PAGE_SIZE, - 1 ) ) + 0x2000, 1 ) ) return; if( libspectrum_snap_plusd_ram( snap, 0 ) ) { Modified: branches/2011-05-04-memory/fuse/peripherals/if1.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/if1.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/peripherals/if1.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -371,10 +371,10 @@ if( !periph_is_active( PERIPH_TYPE_INTERFACE1 ) ) return; - if( machine_load_rom_bank( if1_memory_map_romcs, 0, 0, + if( machine_load_rom_bank( if1_memory_map_romcs, 0, settings_current.rom_interface_i, settings_default.rom_interface_i, - MEMORY_PAGE_SIZE ) ) { + 0x2000 ) ) { settings_current.interface1 = 0; periph_activate_type( PERIPH_TYPE_INTERFACE1, 0 ); return; @@ -442,7 +442,7 @@ if( libspectrum_snap_interface1_custom_rom( snap ) && libspectrum_snap_interface1_rom( snap, 0 ) && machine_load_rom_bank_from_buffer( - if1_memory_map_romcs, 0, 0, + if1_memory_map_romcs, 0, libspectrum_snap_interface1_rom( snap, 0 ), libspectrum_snap_interface1_rom_length( snap, 0 ), 1 ) ) Modified: branches/2011-05-04-memory/fuse/peripherals/if2.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/if2.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/peripherals/if2.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -130,10 +130,9 @@ if ( !periph_is_active( PERIPH_TYPE_INTERFACE2 ) ) return; - if ( machine_load_rom_bank( if2_memory_map_romcs, 0, 0, + if ( machine_load_rom_bank( if2_memory_map_romcs, 0, settings_current.if2_file, - NULL, - 2 * MEMORY_PAGE_SIZE ) ) + NULL, 0x4000 ) ) return; machine_current->ram.romcs = 1; Modified: branches/2011-05-04-memory/fuse/peripherals/scld.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/scld.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/peripherals/scld.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -1,5 +1,5 @@ /* scld.c: Routines for handling the Timex SCLD - Copyright (c) 2002-2006 Fredrick Meunier, Philip Kendall, Witold Filipczyk + Copyright (c) 2002-2011 Fredrick Meunier, Philip Kendall, Witold Filipczyk $Id$ Modified: branches/2011-05-04-memory/fuse/peripherals/speccyboot.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/speccyboot.c 2011-05-09 18:55:23 UTC (rev 4426) +++ branches/2011-05-04-memory/fuse/peripherals/speccyboot.c 2011-05-09 21:20:17 UTC (rev 4427) @@ -1,7 +1,7 @@ /* speccyboot.c: SpeccyBoot Ethernet emulation See http://speccyboot.sourceforge.net/ - Copyright (c) 2009-2010 Patrik Persson, Philip Kendall + Copyright (c) 2009-2011 Patrik Persson, Philip Kendall $Id$ @@ -93,7 +93,7 @@ { static int tap_opened = 0; - if ( machine_load_rom_bank( &speccyboot_memory_map_romcs, 0, 0, + if ( machine_load_rom_bank( &speccyboot_memory_map_romcs, 0, settings_current.rom_speccyboot, settings_default.rom_speccyboot, 0x2000 ) ) return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-05-10 06:55:28
|
Revision: 4430 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4430&view=rev Author: pak21 Date: 2011-05-10 06:55:22 +0000 (Tue, 10 May 2011) Log Message: ----------- Get +3 to work with a page size of 4Kb. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/machines/specplus3.c Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-09 22:07:34 UTC (rev 4429) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-10 06:55:22 UTC (rev 4430) @@ -3646,3 +3646,4 @@ 20110509 machines/machines_periph.c,peripherals/ay.c,periph.h: reading from port 0xbffd on +2A/+3 was lost in peripheral refactoring (thanks, fusetest). +20110510 machines/specplus3.c: get +3 to work with a page size of 4Kb. Modified: branches/2011-05-04-memory/fuse/machines/specplus3.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/specplus3.c 2011-05-09 22:07:34 UTC (rev 4429) +++ branches/2011-05-04-memory/fuse/machines/specplus3.c 2011-05-10 06:55:22 UTC (rev 4430) @@ -58,8 +58,8 @@ ( option_enumerate_diskoptions_disk_try_merge() == 1 && heads == 1 ) ) static int normal_memory_map( int rom, int page ); -static int special_memory_map( int which ); -static int select_special_map( int page1, int page2, int page3, int page4 ); +static void special_memory_map( int which ); +static void select_special_map( int page1, int page2, int page3, int page4 ); static int specplus3_reset( void ); @@ -198,18 +198,13 @@ memory_screen_mask = 0xffff; /* All memory comes from the home bank */ - for( i = 0; i < 8; i++ ) + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) memory_map_read[i].source = memory_map_write[i].source = memory_source_ram; /* RAM pages 4, 5, 6 and 7 contended */ for( i = 0; i < 8; i++ ) - memory_map_ram[ 2 * i ].contended = - memory_map_ram[ 2 * i + 1 ].contended = i & 4; + memory_ram_set_16k_contention( i, i >= 4 ); - /* Mark as present/writeable */ - for( i = 0; i < 16; i++ ) - memory_map_ram[i].writable = 1; - error = normal_memory_map( 0, 0 ); if( error ) return error; return 0; @@ -219,55 +214,39 @@ normal_memory_map( int rom, int page ) { /* ROM as specified */ - memory_map_home[0] = &memory_map_rom[ 2 * rom ]; - memory_map_home[1] = &memory_map_rom[ 2 * rom + 1 ]; - + memory_map_16k( 0x0000, memory_map_rom, rom ); /* RAM 5 */ - memory_map_home[2] = &memory_map_ram[10]; - memory_map_home[3] = &memory_map_ram[11]; - + memory_map_16k( 0x4000, memory_map_ram, 5 ); /* RAM 2 */ - memory_map_home[4] = &memory_map_ram[ 4]; - memory_map_home[5] = &memory_map_ram[ 5]; + memory_map_16k( 0x8000, memory_map_ram, 2 ); + /* RAM 0 */ + memory_map_16k( 0xc000, memory_map_ram, page ); - /* RAM as specified */ - memory_map_home[6] = &memory_map_ram[ 2 * page ]; - memory_map_home[7] = &memory_map_ram[ 2 * page + 1 ]; - return 0; } -static int +static void special_memory_map( int which ) { switch( which ) { - case 0: return select_special_map( 0, 1, 2, 3 ); - case 1: return select_special_map( 4, 5, 6, 7 ); - case 2: return select_special_map( 4, 5, 6, 3 ); - case 3: return select_special_map( 4, 7, 6, 3 ); + case 0: select_special_map( 0, 1, 2, 3 ); + case 1: select_special_map( 4, 5, 6, 7 ); + case 2: select_special_map( 4, 5, 6, 3 ); + case 3: select_special_map( 4, 7, 6, 3 ); default: ui_error( UI_ERROR_ERROR, "unknown +3 special configuration %d", which ); - return 1; + fuse_abort(); } } -static int +static void select_special_map( int page1, int page2, int page3, int page4 ) { - memory_map_home[0] = &memory_map_ram[ 2 * page1 ]; - memory_map_home[1] = &memory_map_ram[ 2 * page1 + 1 ]; - - memory_map_home[2] = &memory_map_ram[ 2 * page2 ]; - memory_map_home[3] = &memory_map_ram[ 2 * page2 + 1 ]; - - memory_map_home[4] = &memory_map_ram[ 2 * page3 ]; - memory_map_home[5] = &memory_map_ram[ 2 * page3 + 1 ]; - - memory_map_home[6] = &memory_map_ram[ 2 * page4 ]; - memory_map_home[7] = &memory_map_ram[ 2 * page4 + 1 ]; - - return 0; + memory_map_16k( 0x0000, memory_map_ram, page1 ); + memory_map_16k( 0x4000, memory_map_ram, page2 ); + memory_map_16k( 0x8000, memory_map_ram, page3 ); + memory_map_16k( 0xc000, memory_map_ram, page4 ); } void @@ -337,7 +316,7 @@ machine_current->ram.current_page = page; machine_current->ram.current_rom = rom; - for( i = 0; i < 8; i++ ) + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; memory_romcs_map(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-05-10 18:10:14
|
Revision: 4431 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4431&view=rev Author: pak21 Date: 2011-05-10 18:10:07 +0000 (Tue, 10 May 2011) Log Message: ----------- Get 16K Spectrum working with a page size of 4Kb. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/machines/spec16.c Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-10 06:55:22 UTC (rev 4430) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-10 18:10:07 UTC (rev 4431) @@ -3647,3 +3647,4 @@ port 0xbffd on +2A/+3 was lost in peripheral refactoring (thanks, fusetest). 20110510 machines/specplus3.c: get +3 to work with a page size of 4Kb. +20110511 machines/spec16.c: get 16K Spectrum working with a page size of 4Kb. Modified: branches/2011-05-04-memory/fuse/machines/spec16.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/spec16.c 2011-05-10 06:55:22 UTC (rev 4430) +++ branches/2011-05-04-memory/fuse/machines/spec16.c 2011-05-10 18:10:07 UTC (rev 4431) @@ -40,8 +40,8 @@ static int spec16_reset( void ); -static libspectrum_byte *empty_chunk; -static memory_page empty_mapping; +static memory_page empty_mapping[MEMORY_PAGES_IN_16K]; +static int empty_mapping_allocated = 0; int spec16_init( fuse_machine_info *machine ) { @@ -64,6 +64,27 @@ return 0; } +static void +ensure_empty_mapping( void ) +{ + int i; + + if( empty_mapping_allocated ) return; + + libspectrum_byte *empty_chunk = memory_pool_allocate_persistent( 0x4000, 1 ); + memset( empty_chunk, 0xff, 0x4000 ); + + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) { + memory_page *page = &empty_mapping[i]; + page->page = empty_chunk + i * MEMORY_PAGE_SIZE; + page->writable = 0; + page->contended = 0; + page->source = memory_source_none; + } + + empty_mapping_allocated = 1; +} + static int spec16_reset( void ) { @@ -74,38 +95,21 @@ settings_default.rom_16, 0x4000 ); if( error ) return error; + ensure_empty_mapping(); + periph_clear(); machines_periph_48(); periph_update(); - /* ROM 0, RAM 5, nothing, nothing */ - memory_map_home[0] = &memory_map_rom[ 0]; - memory_map_home[1] = &memory_map_rom[ 1]; + /* The one RAM page is contended */ + memory_ram_set_16k_contention( 5, 1 ); - memory_map_home[2] = &memory_map_ram[10]; - memory_map_home[3] = &memory_map_ram[11]; + memory_map_16k( 0x0000, memory_map_rom, 0 ); + memory_map_16k( 0x4000, memory_map_ram, 5 ); + memory_map_16k( 0x8000, empty_mapping, 0 ); + memory_map_16k( 0xc000, empty_mapping, 0 ); - if( !empty_chunk ) { - empty_chunk = memory_pool_allocate_persistent( MEMORY_PAGE_SIZE, 1 ); - - memset( empty_chunk, 0xff, MEMORY_PAGE_SIZE ); - - empty_mapping.page = empty_chunk; - empty_mapping.writable = 0; - empty_mapping.contended = 0; - empty_mapping.source = memory_source_none; - } - - memory_map_home[4] = memory_map_home[5] = &empty_mapping; - memory_map_home[6] = memory_map_home[7] = &empty_mapping; - - /* The RAM page is present/writable and contended */ - for( i = 2; i <= 3; i++ ) { - memory_map_home[ i ]->writable = 1; - memory_map_home[ i ]->contended = 1; - } - - for( i = 0; i < 8; i++ ) + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; memory_current_screen = 5; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-05-15 17:34:16
|
Revision: 4442 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4442&view=rev Author: pak21 Date: 2011-05-15 17:34:08 +0000 (Sun, 15 May 2011) Log Message: ----------- Get TC2048 working with a page size of 4Kb. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/machines/tc2048.c branches/2011-05-04-memory/fuse/memory.h branches/2011-05-04-memory/fuse/peripherals/scld.c branches/2011-05-04-memory/fuse/peripherals/scld.h Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-15 11:16:28 UTC (rev 4441) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-15 17:34:08 UTC (rev 4442) @@ -3648,3 +3648,5 @@ fusetest). 20110510 machines/specplus3.c: get +3 to work with a page size of 4Kb. 20110511 machines/spec16.c: get 16K Spectrum working with a page size of 4Kb. +20110515 machines/tc2048.c,memory.h,peripherals/scld.[ch]: get TC2048 working + with a page size of 4Kb. Modified: branches/2011-05-04-memory/fuse/machines/tc2048.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/tc2048.c 2011-05-15 11:16:28 UTC (rev 4441) +++ branches/2011-05-04-memory/fuse/machines/tc2048.c 2011-05-15 17:34:08 UTC (rev 4442) @@ -108,7 +108,7 @@ beta_builtin = 0; - for( i = 0; i < 8; i++ ) { + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) { timex_dock[i] = fake_mapping; timex_dock[i].page_num = i; Modified: branches/2011-05-04-memory/fuse/memory.h =================================================================== --- branches/2011-05-04-memory/fuse/memory.h 2011-05-15 11:16:28 UTC (rev 4441) +++ branches/2011-05-04-memory/fuse/memory.h 2011-05-15 17:34:08 UTC (rev 4442) @@ -64,7 +64,7 @@ /* A memory page will be 1 << (this many) bytes in size ie 12 => 4 Kb, 13 => 8 Kb, 14 => 16 Kb */ -#define MEMORY_PAGE_SIZE_LOGARITHM 13 +#define MEMORY_PAGE_SIZE_LOGARITHM 12 /* The actual size of a memory page */ #define MEMORY_PAGE_SIZE ( 1 << MEMORY_PAGE_SIZE_LOGARITHM ) Modified: branches/2011-05-04-memory/fuse/peripherals/scld.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/scld.c 2011-05-15 11:16:28 UTC (rev 4441) +++ branches/2011-05-04-memory/fuse/peripherals/scld.c 2011-05-15 17:34:08 UTC (rev 4442) @@ -47,8 +47,8 @@ libspectrum_byte scld_last_hsr = 0; /* The last byte sent to Timex HSR port */ -memory_page timex_exrom[8]; -memory_page timex_dock[8]; +memory_page timex_exrom[MEMORY_PAGES_IN_64K]; +memory_page timex_dock[MEMORY_PAGES_IN_64K]; static void scld_reset( int hard_reset ); static void scld_from_snapshot( libspectrum_snap *snap ); @@ -187,12 +187,11 @@ exrom_dock = scld_last_dec.name.altmembank ? memory_map_exrom : memory_map_dock; - for( i = 0; i < 8; i++ ) { - if( scld_last_hsr & ( 1 << i ) ) { - memory_map_read[i] = memory_map_write[i] = *exrom_dock[i]; - } else { - memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; - } + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) { + int chunk = i >> (13 - MEMORY_PAGE_SIZE_LOGARITHM); + int use_exrom = scld_last_hsr & (1 << chunk); + memory_map_read[i] = memory_map_write[i] = + use_exrom ? *exrom_dock[i] : *memory_map_home[i]; } } Modified: branches/2011-05-04-memory/fuse/peripherals/scld.h =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/scld.h 2011-05-15 11:16:28 UTC (rev 4441) +++ branches/2011-05-04-memory/fuse/peripherals/scld.h 2011-05-15 17:34:08 UTC (rev 4442) @@ -117,8 +117,8 @@ extern libspectrum_byte scld_last_hsr; /* Last byte sent to Timex HSR port */ -extern memory_page timex_exrom[8]; -extern memory_page timex_dock[8]; +extern memory_page timex_exrom[MEMORY_PAGES_IN_64K]; +extern memory_page timex_dock[MEMORY_PAGES_IN_64K]; int scld_init( void ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-05-15 17:48:03
|
Revision: 4443 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4443&view=rev Author: pak21 Date: 2011-05-15 17:47:57 +0000 (Sun, 15 May 2011) Log Message: ----------- Back out accidental commit of page size change. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/memory.h Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-15 17:34:08 UTC (rev 4442) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-15 17:47:57 UTC (rev 4443) @@ -3650,3 +3650,4 @@ 20110511 machines/spec16.c: get 16K Spectrum working with a page size of 4Kb. 20110515 machines/tc2048.c,memory.h,peripherals/scld.[ch]: get TC2048 working with a page size of 4Kb. +20110515 memory.h: back out accidental commit of page size change. Modified: branches/2011-05-04-memory/fuse/memory.h =================================================================== --- branches/2011-05-04-memory/fuse/memory.h 2011-05-15 17:34:08 UTC (rev 4442) +++ branches/2011-05-04-memory/fuse/memory.h 2011-05-15 17:47:57 UTC (rev 4443) @@ -64,7 +64,7 @@ /* A memory page will be 1 << (this many) bytes in size ie 12 => 4 Kb, 13 => 8 Kb, 14 => 16 Kb */ -#define MEMORY_PAGE_SIZE_LOGARITHM 12 +#define MEMORY_PAGE_SIZE_LOGARITHM 13 /* The actual size of a memory page */ #define MEMORY_PAGE_SIZE ( 1 << MEMORY_PAGE_SIZE_LOGARITHM ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-05-15 18:52:53
|
Revision: 4444 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4444&view=rev Author: pak21 Date: 2011-05-15 18:52:47 +0000 (Sun, 15 May 2011) Log Message: ----------- Use right port number when restoring SCLD state from snapshot (makes no functional difference as we ignore the port number anyway). Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/peripherals/scld.c Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-15 17:47:57 UTC (rev 4443) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-15 18:52:47 UTC (rev 4444) @@ -3651,3 +3651,5 @@ 20110515 machines/tc2048.c,memory.h,peripherals/scld.[ch]: get TC2048 working with a page size of 4Kb. 20110515 memory.h: back out accidental commit of page size change. +20110515 scld.c: use right port number when restoring SCLD state from snapshot + (makes no functional difference as we ignore the port number anyway). Modified: branches/2011-05-04-memory/fuse/peripherals/scld.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/scld.c 2011-05-15 17:47:57 UTC (rev 4443) +++ branches/2011-05-04-memory/fuse/peripherals/scld.c 2011-05-15 18:52:47 UTC (rev 4444) @@ -223,7 +223,7 @@ if( capabilities & ( LIBSPECTRUM_MACHINE_CAPABILITY_TIMEX_MEMORY | LIBSPECTRUM_MACHINE_CAPABILITY_SE_MEMORY ) ) - scld_hsr_write( 0x00fd, libspectrum_snap_out_scld_hsr( snap ) ); + scld_hsr_write( 0x00f4, libspectrum_snap_out_scld_hsr( snap ) ); if( capabilities & LIBSPECTRUM_MACHINE_CAPABILITY_TIMEX_VIDEO ) scld_dec_write( 0x00ff, libspectrum_snap_out_scld_dec( snap ) ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-05-16 22:33:03
|
Revision: 4445 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4445&view=rev Author: pak21 Date: 2011-05-16 22:32:57 +0000 (Mon, 16 May 2011) Log Message: ----------- Get TC/TS2068 working with 4Kb pages. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/machines/tc2048.c branches/2011-05-04-memory/fuse/machines/tc2068.c branches/2011-05-04-memory/fuse/machines/tc2068.h branches/2011-05-04-memory/fuse/machines/ts2068.c branches/2011-05-04-memory/fuse/memory.h Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-15 18:52:47 UTC (rev 4444) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-16 22:32:57 UTC (rev 4445) @@ -3653,3 +3653,5 @@ 20110515 memory.h: back out accidental commit of page size change. 20110515 scld.c: use right port number when restoring SCLD state from snapshot (makes no functional difference as we ignore the port number anyway). +20110516 machines/{tc2048.c,tc2068.[ch],ts2068.c},memory.h: get TC/TS2068 + working with 4Kb pages. Modified: branches/2011-05-04-memory/fuse/machines/tc2048.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/tc2048.c 2011-05-15 18:52:47 UTC (rev 4444) +++ branches/2011-05-04-memory/fuse/machines/tc2048.c 2011-05-16 22:32:57 UTC (rev 4445) @@ -75,7 +75,7 @@ static int tc2048_reset( void ) { - size_t i; + size_t i, j; int error; error = machine_load_rom( 0, settings_current.rom_tc2048, @@ -108,16 +108,22 @@ 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; + } + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) { - - timex_dock[i] = fake_mapping; - timex_dock[i].page_num = i; memory_map_dock[i] = &timex_dock[i]; - - timex_exrom[i] = fake_mapping; - timex_exrom[i].page_num = i; memory_map_exrom[i] = &timex_exrom[i]; - } return tc2068_tc2048_common_reset(); Modified: branches/2011-05-04-memory/fuse/machines/tc2068.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/tc2068.c 2011-05-15 18:52:47 UTC (rev 4444) +++ branches/2011-05-04-memory/fuse/machines/tc2068.c 2011-05-16 22:32:57 UTC (rev 4445) @@ -44,8 +44,8 @@ static int tc2068_reset( void ); -libspectrum_byte *fake_bank; -memory_page fake_mapping; +memory_page tc2068_empty_mapping[MEMORY_PAGES_IN_8K]; +static int empty_mapping_allocated = 0; libspectrum_byte tc2068_ay_registerport_read( libspectrum_word port, int *attached ) @@ -81,6 +81,28 @@ } } +static void +ensure_empty_mapping( void ) +{ + int i; + + if( empty_mapping_allocated ) return; + + libspectrum_byte *empty_chunk = memory_pool_allocate_persistent( 0x2000, 1 ); + memset( empty_chunk, 0xff, 0x2000 ); + + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) { + memory_page *page = &tc2068_empty_mapping[i]; + page->page = empty_chunk + i * MEMORY_PAGE_SIZE; + page->offset = i * MEMORY_PAGE_SIZE; + page->writable = 0; + page->contended = 0; + page->source = memory_source_none; + } + + empty_mapping_allocated = 1; +} + int tc2068_init( fuse_machine_info *machine ) { @@ -94,18 +116,8 @@ machine->ram.contend_delay = spectrum_contend_delay_65432100; machine->ram.contend_delay_no_mreq = spectrum_contend_delay_65432100; - if( !fake_bank ) { - fake_bank = memory_pool_allocate_persistent( MEMORY_PAGE_SIZE, 1 ); + ensure_empty_mapping(); - memset( fake_bank, 0xff, MEMORY_PAGE_SIZE ); - - fake_mapping.page = fake_bank; - fake_mapping.writable = 0; - fake_mapping.contended = 0; - fake_mapping.source = memory_source_none; - fake_mapping.offset = 0x0000; - } - machine->unattached_port = spectrum_unattached_port_none; machine->shutdown = NULL; @@ -118,7 +130,7 @@ static int tc2068_reset( void ) { - size_t i; + size_t i, j; int error; error = machine_load_rom( 0, settings_current.rom_tc2068_0, @@ -132,17 +144,22 @@ machines_periph_timex(); periph_update(); - for( i = 0; i < 8; i++ ) { + 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; - timex_dock[i] = fake_mapping; - timex_dock[i].page_num = i; + exrom_page = &timex_exrom[i * MEMORY_PAGES_IN_8K + j]; + *exrom_page = memory_map_rom[MEMORY_PAGES_IN_16K + j]; + exrom_page->page_num = i; + } + + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) { memory_map_dock[i] = &timex_dock[i]; - - timex_exrom[i] = memory_map_rom[2]; - timex_exrom[i].source = memory_source_exrom; - timex_exrom[i].page_num = i; memory_map_exrom[i] = &timex_exrom[i]; - } error = dck_reset(); Modified: branches/2011-05-04-memory/fuse/machines/tc2068.h =================================================================== --- branches/2011-05-04-memory/fuse/machines/tc2068.h 2011-05-15 18:52:47 UTC (rev 4444) +++ branches/2011-05-04-memory/fuse/machines/tc2068.h 2011-05-16 22:32:57 UTC (rev 4445) @@ -41,7 +41,6 @@ int tc2068_memory_map( void ); -extern libspectrum_byte *fake_bank; -extern memory_page fake_mapping; +extern memory_page tc2068_empty_mapping[MEMORY_PAGES_IN_8K]; #endif /* #ifndef FUSE_TS2068_H */ Modified: branches/2011-05-04-memory/fuse/machines/ts2068.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/ts2068.c 2011-05-15 18:52:47 UTC (rev 4444) +++ branches/2011-05-04-memory/fuse/machines/ts2068.c 2011-05-16 22:32:57 UTC (rev 4445) @@ -67,7 +67,7 @@ static int ts2068_reset( void ) { - size_t i; + size_t i, j; int error; error = machine_load_rom( 0, settings_current.rom_ts2068_0, @@ -85,17 +85,22 @@ periph_update(); - for( i = 0; i < 8; i++ ) { + 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; - timex_dock[i] = fake_mapping; - timex_dock[i].page_num = i; + exrom_page = &timex_exrom[i * MEMORY_PAGES_IN_8K + j]; + *exrom_page = memory_map_rom[MEMORY_PAGES_IN_16K + j]; + exrom_page->page_num = i; + } + + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) { memory_map_dock[i] = &timex_dock[i]; - - timex_exrom[i] = memory_map_rom[2]; - timex_exrom[i].source = memory_source_exrom; - timex_exrom[i].page_num = i; memory_map_exrom[i] = &timex_exrom[i]; - } error = dck_reset(); Modified: branches/2011-05-04-memory/fuse/memory.h =================================================================== --- branches/2011-05-04-memory/fuse/memory.h 2011-05-15 18:52:47 UTC (rev 4444) +++ branches/2011-05-04-memory/fuse/memory.h 2011-05-16 22:32:57 UTC (rev 4445) @@ -79,6 +79,9 @@ /* The number of memory pages in 16K */ #define MEMORY_PAGES_IN_16K ( 1 << ( 14 - MEMORY_PAGE_SIZE_LOGARITHM ) ) +/* The number of memory pages in 8K */ +#define MEMORY_PAGES_IN_8K ( 1 << ( 13 - MEMORY_PAGE_SIZE_LOGARITHM ) ) + /* Each RAM chunk accessible by the Z80 */ extern memory_page memory_map_read[MEMORY_PAGES_IN_64K]; extern memory_page memory_map_write[MEMORY_PAGES_IN_64K]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-05-31 21:27:39
|
Revision: 4447 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4447&view=rev Author: pak21 Date: 2011-05-31 21:27:32 +0000 (Tue, 31 May 2011) Log Message: ----------- Merge in trunk to get the .dck fix. Modified Paths: -------------- branches/2011-05-04-memory/fuse/compat/unix/tuntap.c branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/peripherals/dck.c branches/2011-05-04-memory/fuse/tape.c Property Changed: ---------------- branches/2011-05-04-memory/fuse/ branches/2011-05-04-memory/fuse/peripherals/ide/divide.c branches/2011-05-04-memory/fuse/peripherals/ide/divide.h branches/2011-05-04-memory/fuse/peripherals/ide/ide.c branches/2011-05-04-memory/fuse/peripherals/ide/ide.h branches/2011-05-04-memory/fuse/peripherals/ide/simpleide.c branches/2011-05-04-memory/fuse/peripherals/ide/simpleide.h branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.c branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.h branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.c branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.h Property changes on: branches/2011-05-04-memory/fuse ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse:4313-4414 /branches/Release-1_0_0-branch:4183-4219 /branches/Release_0_10_0-branch:3813-3899,3931-3958 /branches/ntsc-2009-04-11/fuse:4000-4147 /branches/opus-20090722/fuse:4046-4059 /branches/wii-20080828/fuse:3757-3943 /trunk/fuse:4419-4428 + /branches/2011-02-18-memory/fuse:4313-4414 /branches/Release-1_0_0-branch:4183-4219 /branches/Release_0_10_0-branch:3813-3899,3931-3958 /branches/ntsc-2009-04-11/fuse:4000-4147 /branches/opus-20090722/fuse:4046-4059 /branches/wii-20080828/fuse:3757-3943 /trunk/fuse:4419-4446 Modified: branches/2011-05-04-memory/fuse/compat/unix/tuntap.c =================================================================== --- branches/2011-05-04-memory/fuse/compat/unix/tuntap.c 2011-05-31 21:21:02 UTC (rev 4446) +++ branches/2011-05-04-memory/fuse/compat/unix/tuntap.c 2011-05-31 21:27:32 UTC (rev 4447) @@ -26,6 +26,7 @@ #include "config.h" #include <fcntl.h> +#include <string.h> #include <sys/types.h> #include <sys/stat.h> Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-31 21:21:02 UTC (rev 4446) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-05-31 21:27:32 UTC (rev 4447) @@ -3647,7 +3647,11 @@ port 0xbffd on +2A/+3 was lost in peripheral refactoring (thanks, fusetest). 20110510 machines/specplus3.c: get +3 to work with a page size of 4Kb. +20110511 compat/unix/tuntap.c: add missing #include <string.h>. 20110511 machines/spec16.c: get 16K Spectrum working with a page size of 4Kb. +20110514 tape.c: add case for set signal level block (Fred). +20110514 tape.c: we want to allow 0 tstate blocks to twiddle the mic to + accomodate the set signal level block (Fred). 20110515 machines/tc2048.c,memory.h,peripherals/scld.[ch]: get TC2048 working with a page size of 4Kb. 20110515 memory.h: back out accidental commit of page size change. @@ -3655,3 +3659,5 @@ (makes no functional difference as we ignore the port number anyway). 20110516 machines/{tc2048.c,tc2068.[ch],ts2068.c},memory.h: get TC/TS2068 working with 4Kb pages. +20110531 peripherals/dck.c: ensure pages loaded from .dck files get saved back + into snapshots. Modified: branches/2011-05-04-memory/fuse/peripherals/dck.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/dck.c 2011-05-31 21:21:02 UTC (rev 4446) +++ branches/2011-05-04-memory/fuse/peripherals/dck.c 2011-05-31 21:27:32 UTC (rev 4447) @@ -138,17 +138,19 @@ for( i = 0; i < 8; i++ ) { + memory_page *page = mem[i]; + switch( dck->dck[num_block]->access[i] ) { case LIBSPECTRUM_DCK_PAGE_NULL: break; case LIBSPECTRUM_DCK_PAGE_ROM: - mem[i]->page = memory_pool_allocate( MEMORY_PAGE_SIZE ); - if( !mem[i]->page ) return 1; - memcpy( mem[i]->page, dck->dck[num_block]->pages[i], + page->page = memory_pool_allocate( MEMORY_PAGE_SIZE ); + memcpy( page->page, dck->dck[num_block]->pages[i], MEMORY_PAGE_SIZE ); - mem[i]->writable = 0; + page->writable = 0; + page->save_to_snapshot = 1; break; case LIBSPECTRUM_DCK_PAGE_RAM_EMPTY: @@ -159,12 +161,12 @@ other cases, we allocate ourselves a new page to store the contents in */ if( !(dck->dck[num_block]->bank == LIBSPECTRUM_DCK_BANK_HOME && i>1) ) { - mem[i]->page = memory_pool_allocate( MEMORY_PAGE_SIZE ); - if( !mem[i]->page ) return 1; - mem[i]->writable = 1; + page->page = memory_pool_allocate( MEMORY_PAGE_SIZE ); + page->writable = 1; + page->save_to_snapshot = 1; } - memcpy( mem[i]->page, dck->dck[num_block]->pages[i], + memcpy( page->page, dck->dck[num_block]->pages[i], MEMORY_PAGE_SIZE ); break; Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/divide.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/divide.c:4313-4414 /branches/Release-1_0_0-branch/ide/divide.c:4183-4219 /branches/Release_0_10_0-branch/divide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/divide.c:4000-4147 /branches/opus-20090722/fuse/ide/divide.c:4046-4059 /branches/wii-20080828/fuse/ide/divide.c:3757-3943 /trunk/fuse/peripherals/ide/divide.c:4419-4428 + /branches/2011-02-18-memory/fuse/peripherals/ide/divide.c:4313-4414 /branches/Release-1_0_0-branch/ide/divide.c:4183-4219 /branches/Release_0_10_0-branch/divide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/divide.c:4000-4147 /branches/opus-20090722/fuse/ide/divide.c:4046-4059 /branches/wii-20080828/fuse/ide/divide.c:3757-3943 /trunk/fuse/peripherals/ide/divide.c:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/divide.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/divide.h:4313-4414 /branches/Release-1_0_0-branch/ide/divide.h:4183-4219 /branches/Release_0_10_0-branch/divide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/divide.h:4000-4147 /branches/opus-20090722/fuse/ide/divide.h:4046-4059 /branches/wii-20080828/fuse/ide/divide.h:3757-3943 /trunk/fuse/peripherals/ide/divide.h:4419-4428 + /branches/2011-02-18-memory/fuse/peripherals/ide/divide.h:4313-4414 /branches/Release-1_0_0-branch/ide/divide.h:4183-4219 /branches/Release_0_10_0-branch/divide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/divide.h:4000-4147 /branches/opus-20090722/fuse/ide/divide.h:4046-4059 /branches/wii-20080828/fuse/ide/divide.h:3757-3943 /trunk/fuse/peripherals/ide/divide.h:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/ide.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/ide.c:4313-4414 /branches/Release-1_0_0-branch/ide/ide.c:4183-4219 /branches/Release_0_10_0-branch/ide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/ide.c:4000-4147 /branches/opus-20090722/fuse/ide/ide.c:4046-4059 /branches/wii-20080828/fuse/ide/ide.c:3757-3943 /trunk/fuse/peripherals/ide/ide.c:4419-4428 + /branches/2011-02-18-memory/fuse/peripherals/ide/ide.c:4313-4414 /branches/Release-1_0_0-branch/ide/ide.c:4183-4219 /branches/Release_0_10_0-branch/ide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/ide.c:4000-4147 /branches/opus-20090722/fuse/ide/ide.c:4046-4059 /branches/wii-20080828/fuse/ide/ide.c:3757-3943 /trunk/fuse/peripherals/ide/ide.c:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/ide.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/ide.h:4313-4414 /branches/Release-1_0_0-branch/ide/ide.h:4183-4219 /branches/Release_0_10_0-branch/ide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/ide.h:4000-4147 /branches/opus-20090722/fuse/ide/ide.h:4046-4059 /branches/wii-20080828/fuse/ide/ide.h:3757-3943 /trunk/fuse/peripherals/ide/ide.h:4419-4428 + /branches/2011-02-18-memory/fuse/peripherals/ide/ide.h:4313-4414 /branches/Release-1_0_0-branch/ide/ide.h:4183-4219 /branches/Release_0_10_0-branch/ide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/ide.h:4000-4147 /branches/opus-20090722/fuse/ide/ide.h:4046-4059 /branches/wii-20080828/fuse/ide/ide.h:3757-3943 /trunk/fuse/peripherals/ide/ide.h:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/simpleide.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/simpleide.c:4313-4414 /branches/Release-1_0_0-branch/ide/simpleide.c:4183-4219 /branches/Release_0_10_0-branch/simpleide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/simpleide.c:4000-4147 /branches/opus-20090722/fuse/ide/simpleide.c:4046-4059 /branches/wii-20080828/fuse/ide/simpleide.c:3757-3943 /trunk/fuse/peripherals/ide/simpleide.c:4419-4428 + /branches/2011-02-18-memory/fuse/peripherals/ide/simpleide.c:4313-4414 /branches/Release-1_0_0-branch/ide/simpleide.c:4183-4219 /branches/Release_0_10_0-branch/simpleide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/simpleide.c:4000-4147 /branches/opus-20090722/fuse/ide/simpleide.c:4046-4059 /branches/wii-20080828/fuse/ide/simpleide.c:3757-3943 /trunk/fuse/peripherals/ide/simpleide.c:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/simpleide.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/simpleide.h:4313-4414 /branches/Release-1_0_0-branch/ide/simpleide.h:4183-4219 /branches/Release_0_10_0-branch/simpleide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/simpleide.h:4000-4147 /branches/opus-20090722/fuse/ide/simpleide.h:4046-4059 /branches/wii-20080828/fuse/ide/simpleide.h:3757-3943 /trunk/fuse/peripherals/ide/simpleide.h:4419-4428 + /branches/2011-02-18-memory/fuse/peripherals/ide/simpleide.h:4313-4414 /branches/Release-1_0_0-branch/ide/simpleide.h:4183-4219 /branches/Release_0_10_0-branch/simpleide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/simpleide.h:4000-4147 /branches/opus-20090722/fuse/ide/simpleide.h:4046-4059 /branches/wii-20080828/fuse/ide/simpleide.h:3757-3943 /trunk/fuse/peripherals/ide/simpleide.h:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/zxatasp.c:4313-4414 /branches/Release-1_0_0-branch/ide/zxatasp.c:4183-4219 /branches/Release_0_10_0-branch/zxatasp.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxatasp.c:4000-4147 /branches/opus-20090722/fuse/ide/zxatasp.c:4046-4059 /branches/wii-20080828/fuse/ide/zxatasp.c:3757-3943 /trunk/fuse/peripherals/ide/zxatasp.c:4419-4428 + /branches/2011-02-18-memory/fuse/peripherals/ide/zxatasp.c:4313-4414 /branches/Release-1_0_0-branch/ide/zxatasp.c:4183-4219 /branches/Release_0_10_0-branch/zxatasp.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxatasp.c:4000-4147 /branches/opus-20090722/fuse/ide/zxatasp.c:4046-4059 /branches/wii-20080828/fuse/ide/zxatasp.c:3757-3943 /trunk/fuse/peripherals/ide/zxatasp.c:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/zxatasp.h:4313-4414 /branches/Release-1_0_0-branch/ide/zxatasp.h:4183-4219 /branches/Release_0_10_0-branch/zxatasp.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxatasp.h:4000-4147 /branches/opus-20090722/fuse/ide/zxatasp.h:4046-4059 /branches/wii-20080828/fuse/ide/zxatasp.h:3757-3943 /trunk/fuse/peripherals/ide/zxatasp.h:4419-4428 + /branches/2011-02-18-memory/fuse/peripherals/ide/zxatasp.h:4313-4414 /branches/Release-1_0_0-branch/ide/zxatasp.h:4183-4219 /branches/Release_0_10_0-branch/zxatasp.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxatasp.h:4000-4147 /branches/opus-20090722/fuse/ide/zxatasp.h:4046-4059 /branches/wii-20080828/fuse/ide/zxatasp.h:3757-3943 /trunk/fuse/peripherals/ide/zxatasp.h:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/zxcf.c:4313-4414 /branches/Release-1_0_0-branch/ide/zxcf.c:4183-4219 /branches/Release_0_10_0-branch/zxcf.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxcf.c:4000-4147 /branches/opus-20090722/fuse/ide/zxcf.c:4046-4059 /branches/wii-20080828/fuse/ide/zxcf.c:3757-3943 /trunk/fuse/peripherals/ide/zxcf.c:4419-4428 + /branches/2011-02-18-memory/fuse/peripherals/ide/zxcf.c:4313-4414 /branches/Release-1_0_0-branch/ide/zxcf.c:4183-4219 /branches/Release_0_10_0-branch/zxcf.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxcf.c:4000-4147 /branches/opus-20090722/fuse/ide/zxcf.c:4046-4059 /branches/wii-20080828/fuse/ide/zxcf.c:3757-3943 /trunk/fuse/peripherals/ide/zxcf.c:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/zxcf.h:4313-4414 /branches/Release-1_0_0-branch/ide/zxcf.h:4183-4219 /branches/Release_0_10_0-branch/zxcf.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxcf.h:4000-4147 /branches/opus-20090722/fuse/ide/zxcf.h:4046-4059 /branches/wii-20080828/fuse/ide/zxcf.h:3757-3943 /trunk/fuse/peripherals/ide/zxcf.h:4419-4428 + /branches/2011-02-18-memory/fuse/peripherals/ide/zxcf.h:4313-4414 /branches/Release-1_0_0-branch/ide/zxcf.h:4183-4219 /branches/Release_0_10_0-branch/zxcf.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxcf.h:4000-4147 /branches/opus-20090722/fuse/ide/zxcf.h:4046-4059 /branches/wii-20080828/fuse/ide/zxcf.h:3757-3943 /trunk/fuse/peripherals/ide/zxcf.h:4419-4446 Modified: branches/2011-05-04-memory/fuse/tape.c =================================================================== --- branches/2011-05-04-memory/fuse/tape.c 2011-05-31 21:21:02 UTC (rev 4446) +++ branches/2011-05-04-memory/fuse/tape.c 2011-05-31 21:27:32 UTC (rev 4447) @@ -835,7 +835,10 @@ if( libspec_error != LIBSPECTRUM_ERROR_NONE ) return; /* Invert the microphone state */ - if( edge_tstates || ( flags & LIBSPECTRUM_TAPE_FLAGS_STOP ) ) { + if( edge_tstates || + ( flags & ( LIBSPECTRUM_TAPE_FLAGS_STOP | + LIBSPECTRUM_TAPE_FLAGS_LEVEL_LOW | + LIBSPECTRUM_TAPE_FLAGS_LEVEL_HIGH ) ) ) { if( flags & LIBSPECTRUM_TAPE_FLAGS_NO_EDGE ) { /* Do nothing */ @@ -1010,6 +1013,7 @@ case LIBSPECTRUM_TAPE_BLOCK_GROUP_END: case LIBSPECTRUM_TAPE_BLOCK_LOOP_END: case LIBSPECTRUM_TAPE_BLOCK_STOP48: + case LIBSPECTRUM_TAPE_BLOCK_SET_SIGNAL_LEVEL: case LIBSPECTRUM_TAPE_BLOCK_ARCHIVE_INFO: case LIBSPECTRUM_TAPE_BLOCK_HARDWARE: case LIBSPECTRUM_TAPE_BLOCK_CONCAT: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-06-01 21:14:37
|
Revision: 4449 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4449&view=rev Author: pak21 Date: 2011-06-01 21:14:30 +0000 (Wed, 01 Jun 2011) Log Message: ----------- Make .dck files and snapshots containing DOCK/EXROM work with 4Kb pages. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/peripherals/dck.c branches/2011-05-04-memory/fuse/peripherals/scld.c Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-01 18:56:09 UTC (rev 4448) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-01 21:14:30 UTC (rev 4449) @@ -3661,3 +3661,5 @@ working with 4Kb pages. 20110531 peripherals/dck.c: ensure pages loaded from .dck files get saved back into snapshots. +20110601 peripherals/{dck.c,scld.c}: make .dck files and snapshots containing + DOCK/EXROM work with 4Kb pages. Modified: branches/2011-05-04-memory/fuse/peripherals/dck.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/dck.c 2011-06-01 18:56:09 UTC (rev 4448) +++ branches/2011-05-04-memory/fuse/peripherals/dck.c 2011-06-01 21:14:30 UTC (rev 4449) @@ -116,18 +116,18 @@ } while( dck->dck[num_block] != NULL ) { - memory_page **mem; + memory_page **bank; int i; switch( dck->dck[num_block]->bank ) { case LIBSPECTRUM_DCK_BANK_HOME: - mem = memory_map_home; + bank = memory_map_home; break; case LIBSPECTRUM_DCK_BANK_DOCK: - mem = memory_map_dock; + bank = memory_map_dock; break; case LIBSPECTRUM_DCK_BANK_EXROM: - mem = memory_map_exrom; + bank = memory_map_exrom; break; default: ui_error( UI_ERROR_INFO, "Sorry, bank ID %i is unsupported", @@ -138,7 +138,8 @@ for( i = 0; i < 8; i++ ) { - memory_page *page = mem[i]; + libspectrum_byte *data; + int j; switch( dck->dck[num_block]->access[i] ) { @@ -146,11 +147,15 @@ break; case LIBSPECTRUM_DCK_PAGE_ROM: - page->page = memory_pool_allocate( MEMORY_PAGE_SIZE ); - memcpy( page->page, dck->dck[num_block]->pages[i], - MEMORY_PAGE_SIZE ); - page->writable = 0; - page->save_to_snapshot = 1; + data = memory_pool_allocate( 0x2000 ); + memcpy( data, dck->dck[num_block]->pages[i], 0x2000 ); + for( j = 0; j < MEMORY_PAGES_IN_8K; j++ ) { + memory_page *page = bank[i * MEMORY_PAGES_IN_8K + j]; + page->offset = j * MEMORY_PAGE_SIZE; + page->writable = 0; + page->save_to_snapshot = 1; + page->page = data + page->offset; + } break; case LIBSPECTRUM_DCK_PAGE_RAM_EMPTY: @@ -160,14 +165,21 @@ blocks from the HOME bank into the appropriate page; in other cases, we allocate ourselves a new page to store the contents in */ - if( !(dck->dck[num_block]->bank == LIBSPECTRUM_DCK_BANK_HOME && i>1) ) { - page->page = memory_pool_allocate( MEMORY_PAGE_SIZE ); - page->writable = 1; - page->save_to_snapshot = 1; + if( dck->dck[num_block]->bank == LIBSPECTRUM_DCK_BANK_HOME && i>1 ) { + for( j = 0; j < MEMORY_PAGES_IN_8K; j++ ) + memcpy( bank[i * MEMORY_PAGES_IN_8K + j], + dck->dck[num_block]->pages[i], MEMORY_PAGE_SIZE ); + } else { + data = memory_pool_allocate( 0x2000 ); + memcpy( data, dck->dck[num_block]->pages[i], 0x2000 ); + for( j = 0; j < MEMORY_PAGES_IN_8K; j++ ) { + memory_page *page = bank[i * MEMORY_PAGES_IN_8K + j]; + page->offset = j * MEMORY_PAGE_SIZE; + page->writable = 1; + page->save_to_snapshot = 1; + page->page = data + page->offset; + } } - - memcpy( page->page, dck->dck[num_block]->pages[i], - MEMORY_PAGE_SIZE ); break; } Modified: branches/2011-05-04-memory/fuse/peripherals/scld.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/scld.c 2011-06-01 18:56:09 UTC (rev 4448) +++ branches/2011-05-04-memory/fuse/peripherals/scld.c 2011-06-01 21:14:30 UTC (rev 4449) @@ -195,24 +195,23 @@ } } -static int -scld_dock_exrom_from_snapshot( memory_page *dest, int page_num, int writable, +static void +scld_dock_exrom_from_snapshot( memory_page **dest, int page_num, int writable, void *source ) { - dest->offset = 0; - dest->page_num = page_num; - dest->writable = writable; - dest->page = - memory_pool_allocate( MEMORY_PAGE_SIZE * sizeof( libspectrum_byte ) ); - if( !dest->page ) { - ui_error( UI_ERROR_ERROR, "Out of memory at %s:%d", __FILE__, - __LINE__ ); - return 1; + int i; + libspectrum_byte *data = memory_pool_allocate( 0x2000 ); + + memcpy( data, source, 0x2000 ); + + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) { + memory_page *page = dest[ page_num * MEMORY_PAGES_IN_8K + i ]; + page->offset = i * MEMORY_PAGE_SIZE; + page->page_num = page_num; + page->writable = writable; + page->page = data + page->offset; + page->save_to_snapshot = 1; } - - memcpy( dest->page, source, MEMORY_PAGE_SIZE ); - - return 0; } static void @@ -234,19 +233,15 @@ for( i = 0; i < 8; i++ ) { - if( libspectrum_snap_dock_cart( snap, i ) ) { - if( scld_dock_exrom_from_snapshot( memory_map_dock[i], i, - libspectrum_snap_dock_ram( snap, i ), - libspectrum_snap_dock_cart( snap, i ) ) ) - return; - } + if( libspectrum_snap_dock_cart( snap, i ) ) + scld_dock_exrom_from_snapshot( memory_map_dock, i, + libspectrum_snap_dock_ram( snap, i ), + libspectrum_snap_dock_cart( snap, i ) ); - if( libspectrum_snap_exrom_cart( snap, i ) ) { - if( scld_dock_exrom_from_snapshot( memory_map_exrom[i], i, - libspectrum_snap_exrom_ram( snap, i ), - libspectrum_snap_exrom_cart( snap, i ) ) ) - return; - } + if( libspectrum_snap_exrom_cart( snap, i ) ) + scld_dock_exrom_from_snapshot( memory_map_exrom, i, + libspectrum_snap_exrom_ram( snap, i ), + libspectrum_snap_exrom_cart( snap, i ) ); } @@ -273,32 +268,47 @@ for( i = 0; i < 8; i++ ) { - if( memory_map_exrom[i]->save_to_snapshot || - memory_map_exrom[i]->writable ) { - buffer = malloc( MEMORY_PAGE_SIZE * sizeof( libspectrum_byte ) ); + memory_page *exrom_base = memory_map_exrom[i * MEMORY_PAGES_IN_8K], + *dock_base = memory_map_dock[i * MEMORY_PAGES_IN_8K]; + int j; + + /* In theory, Fuse could somehow have set up a memory map in which the + first 4Kb of a DOCK page is writable, but the second 4Kb is not, and + this structure is not representable in a snapshot. + + However, there's currently no code which could produce this situation + so for simplicity's sake, we assume the properties of the lowest page + in the 8Kb chunk apply to all the pages */ + + if( exrom_base->save_to_snapshot || exrom_base->writable ) { + buffer = malloc( 0x2000 * sizeof( libspectrum_byte ) ); if( !buffer ) { ui_error( UI_ERROR_ERROR, "Out of memory at %s:%d", __FILE__, __LINE__ ); return; } - libspectrum_snap_set_exrom_ram( snap, i, - memory_map_exrom[i]->writable ); - memcpy( buffer, memory_map_exrom[i]->page, MEMORY_PAGE_SIZE ); + libspectrum_snap_set_exrom_ram( snap, i, exrom_base->writable ); + for( j = 0; j < MEMORY_PAGES_IN_8K; j++ ) { + memory_page *page = exrom_base + j; + memcpy( buffer + j * MEMORY_PAGE_SIZE, page->page, MEMORY_PAGE_SIZE ); + } libspectrum_snap_set_exrom_cart( snap, i, buffer ); } - if( memory_map_dock[i]->save_to_snapshot || - memory_map_dock[i]->writable ) { - buffer = malloc( MEMORY_PAGE_SIZE * sizeof( libspectrum_byte ) ); + if( dock_base->save_to_snapshot || dock_base->writable ) { + buffer = malloc( 0x2000 * sizeof( libspectrum_byte ) ); if( !buffer ) { ui_error( UI_ERROR_ERROR, "Out of memory at %s:%d", __FILE__, __LINE__ ); return; } - libspectrum_snap_set_dock_ram( snap, i, memory_map_dock[i]->writable ); - memcpy( buffer, memory_map_dock[i]->page, MEMORY_PAGE_SIZE ); + libspectrum_snap_set_dock_ram( snap, i, dock_base->writable ); + for( j = 0; j < MEMORY_PAGES_IN_8K; j++ ) { + memory_page *page = dock_base + j; + memcpy( buffer + j * MEMORY_PAGE_SIZE, page->page, MEMORY_PAGE_SIZE ); + } libspectrum_snap_set_dock_cart( snap, i, buffer ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-06-02 17:24:32
|
Revision: 4450 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4450&view=rev Author: pak21 Date: 2011-06-02 16:28:02 +0000 (Thu, 02 Jun 2011) Log Message: ----------- Get Russian machines working with 4Kb pages. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/machines/pentagon1024.c branches/2011-05-04-memory/fuse/machines/pentagon512.c branches/2011-05-04-memory/fuse/machines/scorpion.c branches/2011-05-04-memory/fuse/memory.c branches/2011-05-04-memory/fuse/memory.h branches/2011-05-04-memory/fuse/peripherals/disk/beta.c branches/2011-05-04-memory/fuse/peripherals/disk/beta.h Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-01 21:14:30 UTC (rev 4449) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-02 16:28:02 UTC (rev 4450) @@ -3663,3 +3663,6 @@ into snapshots. 20110601 peripherals/{dck.c,scld.c}: make .dck files and snapshots containing DOCK/EXROM work with 4Kb pages. +20110602 machines/{pentagon1024.c,pentagon512.c,scorpion.c},memory.[ch], + peripherals/disk/beta.[ch]: get Russian machines working with 4Kb + pages. Modified: branches/2011-05-04-memory/fuse/machines/pentagon1024.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/pentagon1024.c 2011-06-01 21:14:30 UTC (rev 4449) +++ branches/2011-05-04-memory/fuse/machines/pentagon1024.c 2011-06-02 16:28:02 UTC (rev 4450) @@ -69,7 +69,6 @@ pentagon1024_reset(void) { int error; - int i; error = machine_load_rom( 0, settings_current.rom_pentagon1024_0, settings_default.rom_pentagon1024_0, 0x4000 ); @@ -91,10 +90,6 @@ machine_current->ram.last_byte2 = 0; machine_current->ram.special = 0; - /* Mark the last 896K as present/writeable */ - for( i = 16; i < 128; i++ ) - memory_map_ram[i].writable = 1; - beta_builtin = 1; beta_active = 1; @@ -183,7 +178,7 @@ spec128_select_page( page ); machine_current->ram.current_page = page; - for( i = 0; i < 8; i++ ) + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; memory_romcs_map(); Modified: branches/2011-05-04-memory/fuse/machines/pentagon512.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/pentagon512.c 2011-06-01 21:14:30 UTC (rev 4449) +++ branches/2011-05-04-memory/fuse/machines/pentagon512.c 2011-06-02 16:28:02 UTC (rev 4450) @@ -73,7 +73,6 @@ pentagon_reset(void) { int error; - int i; error = machine_load_rom( 0, settings_current.rom_pentagon512_0, settings_default.rom_pentagon512_0, 0x4000 ); @@ -106,10 +105,6 @@ machine_current->ram.last_byte2 = 0; machine_current->ram.special = 0; - /* Mark the least 384K as present/writeable */ - for( i = 16; i < 64; i++ ) - memory_map_ram[i].writable = 1; - spec48_common_display_setup(); return 0; @@ -145,7 +140,7 @@ spec128_select_page( page ); machine_current->ram.current_page = page; - for( i = 0; i < 8; i++ ) + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; memory_romcs_map(); Modified: branches/2011-05-04-memory/fuse/machines/scorpion.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/scorpion.c 2011-06-01 21:14:30 UTC (rev 4449) +++ branches/2011-05-04-memory/fuse/machines/scorpion.c 2011-06-02 16:28:02 UTC (rev 4450) @@ -72,7 +72,7 @@ int scorpion_reset(void) { - int i, error; + int error; error = machine_load_rom( 0, settings_current.rom_scorpion_0, settings_default.rom_scorpion_0, 0x4000 ); @@ -94,10 +94,6 @@ machine_current->ram.last_byte2 = 0; machine_current->ram.special = 0; - /* Mark the second 128K as present/writeable */ - for( i = 16; i < 32; i++ ) - memory_map_ram[i].writable = 1; - periph_clear(); machines_periph_pentagon(); @@ -152,7 +148,7 @@ spec128_select_page( page ); machine_current->ram.current_page = page; - for( i = 0; i < 8; i++ ) + for( i = 0; i < MEMORY_PAGES_IN_64K; i++ ) memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; memory_romcs_map(); Modified: branches/2011-05-04-memory/fuse/memory.c =================================================================== --- branches/2011-05-04-memory/fuse/memory.c 2011-06-01 21:14:30 UTC (rev 4449) +++ branches/2011-05-04-memory/fuse/memory.c 2011-06-02 16:28:02 UTC (rev 4450) @@ -253,6 +253,16 @@ &source[ page_num * MEMORY_PAGES_IN_16K + i ]; } +/* Page in from /ROMCS */ +void +memory_map_romcs( memory_page *source ) +{ + int i; + + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + memory_map_read[i] = memory_map_write[i] = source[i]; +} + libspectrum_byte readbyte( libspectrum_word address ) { Modified: branches/2011-05-04-memory/fuse/memory.h =================================================================== --- branches/2011-05-04-memory/fuse/memory.h 2011-06-01 21:14:30 UTC (rev 4449) +++ branches/2011-05-04-memory/fuse/memory.h 2011-06-02 16:28:02 UTC (rev 4450) @@ -130,6 +130,9 @@ void memory_map_16k( libspectrum_word address, memory_page *source, int page_num ); +/* Page in from /ROMCS */ +void memory_map_romcs( memory_page *source ); + libspectrum_byte readbyte( libspectrum_word address ); /* Use a macro for performance in the main core, but a function for Modified: branches/2011-05-04-memory/fuse/peripherals/disk/beta.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/beta.c 2011-06-01 21:14:30 UTC (rev 4449) +++ branches/2011-05-04-memory/fuse/peripherals/disk/beta.c 2011-06-02 16:28:02 UTC (rev 4450) @@ -58,7 +58,7 @@ ( 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]; +memory_page beta_memory_map_romcs[MEMORY_PAGES_IN_16K]; int beta_available = 0; int beta_active = 0; @@ -131,8 +131,7 @@ { if( !beta_active ) return; - 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]; + memory_map_romcs( beta_memory_map_romcs ); } static void @@ -175,7 +174,7 @@ module_register( &beta_module_info ); beta_source = memory_source_register( "Betadisk" ); - for( i = 0; i < 2; i++ ) beta_memory_map_romcs[i].source = beta_source; + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) beta_memory_map_romcs[i].source = beta_source; periph_register( PERIPH_TYPE_BETA128, &beta_peripheral ); Modified: branches/2011-05-04-memory/fuse/peripherals/disk/beta.h =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/beta.h 2011-06-01 21:14:30 UTC (rev 4449) +++ branches/2011-05-04-memory/fuse/peripherals/disk/beta.h 2011-06-02 16:28:02 UTC (rev 4450) @@ -38,7 +38,7 @@ 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 memory_page beta_memory_map_romcs[MEMORY_PAGES_IN_16K]; 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 */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-06-05 08:06:24
|
Revision: 4455 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4455&view=rev Author: pak21 Date: 2011-06-05 08:06:17 +0000 (Sun, 05 Jun 2011) Log Message: ----------- Integrate 4Kb page change from Spectranet branch. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/machines/spec48.c Property Changed: ---------------- branches/2011-05-04-memory/fuse/ branches/2011-05-04-memory/fuse/peripherals/ide/divide.c branches/2011-05-04-memory/fuse/peripherals/ide/divide.h branches/2011-05-04-memory/fuse/peripherals/ide/ide.c branches/2011-05-04-memory/fuse/peripherals/ide/ide.h branches/2011-05-04-memory/fuse/peripherals/ide/simpleide.c branches/2011-05-04-memory/fuse/peripherals/ide/simpleide.h branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.c branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.h branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.c branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.h Property changes on: branches/2011-05-04-memory/fuse ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse:4313-4414 /branches/Release-1_0_0-branch:4183-4219 /branches/Release_0_10_0-branch:3813-3899,3931-3958 /branches/ntsc-2009-04-11/fuse:4000-4147 /branches/opus-20090722/fuse:4046-4059 /branches/wii-20080828/fuse:3757-3943 /trunk/fuse:4419-4446 + /branches/2011-02-16-spectranet/fuse:4454 /branches/2011-02-18-memory/fuse:4313-4414 /branches/Release-1_0_0-branch:4183-4219 /branches/Release_0_10_0-branch:3813-3899,3931-3958 /branches/ntsc-2009-04-11/fuse:4000-4147 /branches/opus-20090722/fuse:4046-4059 /branches/wii-20080828/fuse:3757-3943 /trunk/fuse:4419-4446 Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-04 22:04:32 UTC (rev 4454) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-05 08:06:17 UTC (rev 4455) @@ -3666,3 +3666,4 @@ 20110602 machines/{pentagon1024.c,pentagon512.c,scorpion.c},memory.[ch], peripherals/disk/beta.[ch]: get Russian machines working with 4Kb pages. +20110604 machines/spec48.c: one 8Kb page assumption still remained. Modified: branches/2011-05-04-memory/fuse/machines/spec48.c =================================================================== --- branches/2011-05-04-memory/fuse/machines/spec48.c 2011-06-04 22:04:32 UTC (rev 4454) +++ branches/2011-05-04-memory/fuse/machines/spec48.c 2011-06-05 08:06:17 UTC (rev 4455) @@ -128,9 +128,11 @@ int spec48_memory_map( void ) { + int i; + /* By default, 0x0000 to 0x3fff come from the home bank */ - memory_map_read[0] = memory_map_write[0] = *memory_map_home[0]; - memory_map_read[1] = memory_map_write[1] = *memory_map_home[1]; + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + memory_map_read[i] = memory_map_write[i] = *memory_map_home[i]; memory_romcs_map(); Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/divide.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/divide.c:4313-4414 /branches/Release-1_0_0-branch/ide/divide.c:4183-4219 /branches/Release_0_10_0-branch/divide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/divide.c:4000-4147 /branches/opus-20090722/fuse/ide/divide.c:4046-4059 /branches/wii-20080828/fuse/ide/divide.c:3757-3943 /trunk/fuse/peripherals/ide/divide.c:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/divide.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/divide.c:4313-4414 /branches/Release-1_0_0-branch/ide/divide.c:4183-4219 /branches/Release_0_10_0-branch/divide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/divide.c:4000-4147 /branches/opus-20090722/fuse/ide/divide.c:4046-4059 /branches/wii-20080828/fuse/ide/divide.c:3757-3943 /trunk/fuse/peripherals/ide/divide.c:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/divide.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/divide.h:4313-4414 /branches/Release-1_0_0-branch/ide/divide.h:4183-4219 /branches/Release_0_10_0-branch/divide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/divide.h:4000-4147 /branches/opus-20090722/fuse/ide/divide.h:4046-4059 /branches/wii-20080828/fuse/ide/divide.h:3757-3943 /trunk/fuse/peripherals/ide/divide.h:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/divide.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/divide.h:4313-4414 /branches/Release-1_0_0-branch/ide/divide.h:4183-4219 /branches/Release_0_10_0-branch/divide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/divide.h:4000-4147 /branches/opus-20090722/fuse/ide/divide.h:4046-4059 /branches/wii-20080828/fuse/ide/divide.h:3757-3943 /trunk/fuse/peripherals/ide/divide.h:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/ide.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/ide.c:4313-4414 /branches/Release-1_0_0-branch/ide/ide.c:4183-4219 /branches/Release_0_10_0-branch/ide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/ide.c:4000-4147 /branches/opus-20090722/fuse/ide/ide.c:4046-4059 /branches/wii-20080828/fuse/ide/ide.c:3757-3943 /trunk/fuse/peripherals/ide/ide.c:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/ide.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/ide.c:4313-4414 /branches/Release-1_0_0-branch/ide/ide.c:4183-4219 /branches/Release_0_10_0-branch/ide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/ide.c:4000-4147 /branches/opus-20090722/fuse/ide/ide.c:4046-4059 /branches/wii-20080828/fuse/ide/ide.c:3757-3943 /trunk/fuse/peripherals/ide/ide.c:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/ide.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/ide.h:4313-4414 /branches/Release-1_0_0-branch/ide/ide.h:4183-4219 /branches/Release_0_10_0-branch/ide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/ide.h:4000-4147 /branches/opus-20090722/fuse/ide/ide.h:4046-4059 /branches/wii-20080828/fuse/ide/ide.h:3757-3943 /trunk/fuse/peripherals/ide/ide.h:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/ide.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/ide.h:4313-4414 /branches/Release-1_0_0-branch/ide/ide.h:4183-4219 /branches/Release_0_10_0-branch/ide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/ide.h:4000-4147 /branches/opus-20090722/fuse/ide/ide.h:4046-4059 /branches/wii-20080828/fuse/ide/ide.h:3757-3943 /trunk/fuse/peripherals/ide/ide.h:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/simpleide.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/simpleide.c:4313-4414 /branches/Release-1_0_0-branch/ide/simpleide.c:4183-4219 /branches/Release_0_10_0-branch/simpleide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/simpleide.c:4000-4147 /branches/opus-20090722/fuse/ide/simpleide.c:4046-4059 /branches/wii-20080828/fuse/ide/simpleide.c:3757-3943 /trunk/fuse/peripherals/ide/simpleide.c:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/simpleide.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/simpleide.c:4313-4414 /branches/Release-1_0_0-branch/ide/simpleide.c:4183-4219 /branches/Release_0_10_0-branch/simpleide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/simpleide.c:4000-4147 /branches/opus-20090722/fuse/ide/simpleide.c:4046-4059 /branches/wii-20080828/fuse/ide/simpleide.c:3757-3943 /trunk/fuse/peripherals/ide/simpleide.c:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/simpleide.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/simpleide.h:4313-4414 /branches/Release-1_0_0-branch/ide/simpleide.h:4183-4219 /branches/Release_0_10_0-branch/simpleide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/simpleide.h:4000-4147 /branches/opus-20090722/fuse/ide/simpleide.h:4046-4059 /branches/wii-20080828/fuse/ide/simpleide.h:3757-3943 /trunk/fuse/peripherals/ide/simpleide.h:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/simpleide.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/simpleide.h:4313-4414 /branches/Release-1_0_0-branch/ide/simpleide.h:4183-4219 /branches/Release_0_10_0-branch/simpleide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/simpleide.h:4000-4147 /branches/opus-20090722/fuse/ide/simpleide.h:4046-4059 /branches/wii-20080828/fuse/ide/simpleide.h:3757-3943 /trunk/fuse/peripherals/ide/simpleide.h:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/zxatasp.c:4313-4414 /branches/Release-1_0_0-branch/ide/zxatasp.c:4183-4219 /branches/Release_0_10_0-branch/zxatasp.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxatasp.c:4000-4147 /branches/opus-20090722/fuse/ide/zxatasp.c:4046-4059 /branches/wii-20080828/fuse/ide/zxatasp.c:3757-3943 /trunk/fuse/peripherals/ide/zxatasp.c:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/zxatasp.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/zxatasp.c:4313-4414 /branches/Release-1_0_0-branch/ide/zxatasp.c:4183-4219 /branches/Release_0_10_0-branch/zxatasp.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxatasp.c:4000-4147 /branches/opus-20090722/fuse/ide/zxatasp.c:4046-4059 /branches/wii-20080828/fuse/ide/zxatasp.c:3757-3943 /trunk/fuse/peripherals/ide/zxatasp.c:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/zxatasp.h:4313-4414 /branches/Release-1_0_0-branch/ide/zxatasp.h:4183-4219 /branches/Release_0_10_0-branch/zxatasp.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxatasp.h:4000-4147 /branches/opus-20090722/fuse/ide/zxatasp.h:4046-4059 /branches/wii-20080828/fuse/ide/zxatasp.h:3757-3943 /trunk/fuse/peripherals/ide/zxatasp.h:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/zxatasp.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/zxatasp.h:4313-4414 /branches/Release-1_0_0-branch/ide/zxatasp.h:4183-4219 /branches/Release_0_10_0-branch/zxatasp.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxatasp.h:4000-4147 /branches/opus-20090722/fuse/ide/zxatasp.h:4046-4059 /branches/wii-20080828/fuse/ide/zxatasp.h:3757-3943 /trunk/fuse/peripherals/ide/zxatasp.h:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/zxcf.c:4313-4414 /branches/Release-1_0_0-branch/ide/zxcf.c:4183-4219 /branches/Release_0_10_0-branch/zxcf.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxcf.c:4000-4147 /branches/opus-20090722/fuse/ide/zxcf.c:4046-4059 /branches/wii-20080828/fuse/ide/zxcf.c:3757-3943 /trunk/fuse/peripherals/ide/zxcf.c:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/zxcf.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/zxcf.c:4313-4414 /branches/Release-1_0_0-branch/ide/zxcf.c:4183-4219 /branches/Release_0_10_0-branch/zxcf.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxcf.c:4000-4147 /branches/opus-20090722/fuse/ide/zxcf.c:4046-4059 /branches/wii-20080828/fuse/ide/zxcf.c:3757-3943 /trunk/fuse/peripherals/ide/zxcf.c:4419-4446 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-18-memory/fuse/peripherals/ide/zxcf.h:4313-4414 /branches/Release-1_0_0-branch/ide/zxcf.h:4183-4219 /branches/Release_0_10_0-branch/zxcf.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxcf.h:4000-4147 /branches/opus-20090722/fuse/ide/zxcf.h:4046-4059 /branches/wii-20080828/fuse/ide/zxcf.h:3757-3943 /trunk/fuse/peripherals/ide/zxcf.h:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/zxcf.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/zxcf.h:4313-4414 /branches/Release-1_0_0-branch/ide/zxcf.h:4183-4219 /branches/Release_0_10_0-branch/zxcf.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxcf.h:4000-4147 /branches/opus-20090722/fuse/ide/zxcf.h:4046-4059 /branches/wii-20080828/fuse/ide/zxcf.h:3757-3943 /trunk/fuse/peripherals/ide/zxcf.h:4419-4446 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <zu...@us...> - 2011-06-05 16:58:10
|
Revision: 4458 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4458&view=rev Author: zubzero Date: 2011-06-05 16:58:04 +0000 (Sun, 05 Jun 2011) Log Message: ----------- Set 'writable = 0' when loading ROM images rather than setting it explicitly. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/machine.c branches/2011-05-04-memory/fuse/peripherals/disk/beta.c branches/2011-05-04-memory/fuse/peripherals/disk/disciple.c branches/2011-05-04-memory/fuse/peripherals/disk/opus.c branches/2011-05-04-memory/fuse/peripherals/disk/plusd.c branches/2011-05-04-memory/fuse/peripherals/speccyboot.c Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-05 08:57:02 UTC (rev 4457) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-05 16:58:04 UTC (rev 4458) @@ -3667,3 +3667,6 @@ peripherals/disk/beta.[ch]: get Russian machines working with 4Kb pages. 20110604 machines/spec48.c: one 8Kb page assumption still remained. +20110605 machine.c,peripherals/disk/{beta.c,disciple.c,opus.c,plusd.c}, + peripherals/speccyboot.c: set 'writable = 0' when loading ROM images + rather than setting it explicitly (Stuart). Modified: branches/2011-05-04-memory/fuse/machine.c =================================================================== --- branches/2011-05-04-memory/fuse/machine.c 2011-06-05 08:57:02 UTC (rev 4457) +++ branches/2011-05-04-memory/fuse/machine.c 2011-06-05 16:58:04 UTC (rev 4458) @@ -264,6 +264,7 @@ page->offset = offset; page->page_num = page_num; page->page = data + offset; + page->writable = 0; page->save_to_snapshot = custom; } Modified: branches/2011-05-04-memory/fuse/peripherals/disk/beta.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/beta.c 2011-06-05 08:57:02 UTC (rev 4457) +++ branches/2011-05-04-memory/fuse/peripherals/disk/beta.c 2011-06-05 16:58:04 UTC (rev 4458) @@ -223,9 +223,6 @@ return; } - beta_memory_map_romcs[ 0 ].writable = 0; - beta_memory_map_romcs[ 1 ].writable = 0; - beta_active = 0; if( !( machine_current->capabilities & Modified: branches/2011-05-04-memory/fuse/peripherals/disk/disciple.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/disciple.c 2011-06-05 08:57:02 UTC (rev 4457) +++ branches/2011-05-04-memory/fuse/peripherals/disk/disciple.c 2011-06-05 16:58:04 UTC (rev 4458) @@ -214,8 +214,6 @@ machine_current->ram.romcs = 1; - disciple_memory_map_romcs[ 0 ].writable = 0; - disciple_memory_map_romcs[ 1 ].writable = 0; disciple_memory_map_romcs[ 2 ].writable = 1; disciple_available = 1; Modified: branches/2011-05-04-memory/fuse/peripherals/disk/opus.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/opus.c 2011-06-05 08:57:02 UTC (rev 4457) +++ branches/2011-05-04-memory/fuse/peripherals/disk/opus.c 2011-06-05 16:58:04 UTC (rev 4458) @@ -184,7 +184,6 @@ machine_current->ram.romcs = 0; - opus_memory_map_romcs[ 0 ].writable = 0; opus_memory_map_romcs[ 1 ].writable = 1; data_reg_a = 0; Modified: branches/2011-05-04-memory/fuse/peripherals/disk/plusd.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/plusd.c 2011-06-05 08:57:02 UTC (rev 4457) +++ branches/2011-05-04-memory/fuse/peripherals/disk/plusd.c 2011-06-05 16:58:04 UTC (rev 4458) @@ -198,7 +198,6 @@ machine_current->ram.romcs = 0; - plusd_memory_map_romcs[ 0 ].writable = 0; plusd_memory_map_romcs[ 1 ].writable = 1; plusd_available = 1; Modified: branches/2011-05-04-memory/fuse/peripherals/speccyboot.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/speccyboot.c 2011-06-05 08:57:02 UTC (rev 4457) +++ branches/2011-05-04-memory/fuse/peripherals/speccyboot.c 2011-06-05 16:58:04 UTC (rev 4458) @@ -98,8 +98,6 @@ settings_default.rom_speccyboot, 0x2000 ) ) return; - speccyboot_memory_map_romcs.writable = 0; - out_register_state = 0xff; /* force transitions to low */ if( periph_is_active( PERIPH_TYPE_SPECCYBOOT ) ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <zu...@us...> - 2011-06-05 23:59:50
|
Revision: 4460 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4460&view=rev Author: zubzero Date: 2011-06-05 23:59:43 +0000 (Sun, 05 Jun 2011) Log Message: ----------- Guard against overrun of Opus RAM buffer by increasing the amount allocated. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/memory.c branches/2011-05-04-memory/fuse/memory.h branches/2011-05-04-memory/fuse/peripherals/disk/opus.c Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-05 20:27:50 UTC (rev 4459) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-05 23:59:43 UTC (rev 4460) @@ -3670,3 +3670,5 @@ 20110605 machine.c,peripherals/disk/{beta.c,disciple.c,opus.c,plusd.c}, peripherals/speccyboot.c: set 'writable = 0' when loading ROM images rather than setting it explicitly (Stuart). +20110606 memory.[ch],peripherals/disk/opus.c: guard against overrun of Opus RAM + buffer by increasing the amount allocated (Stuart). Modified: branches/2011-05-04-memory/fuse/memory.c =================================================================== --- branches/2011-05-04-memory/fuse/memory.c 2011-06-05 20:27:50 UTC (rev 4459) +++ branches/2011-05-04-memory/fuse/memory.c 2011-06-05 23:59:43 UTC (rev 4460) @@ -263,6 +263,17 @@ memory_map_read[i] = memory_map_write[i] = source[i]; } +/* Page in 8K from /ROMCS */ +void +memory_map_romcs_8k( libspectrum_word address, memory_page *source ) +{ + int i, start; + + start = address >> MEMORY_PAGE_SIZE_LOGARITHM; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + memory_map_read[ start + i ] = memory_map_write[ start + i ] = source[ i ]; +} + libspectrum_byte readbyte( libspectrum_word address ) { Modified: branches/2011-05-04-memory/fuse/memory.h =================================================================== --- branches/2011-05-04-memory/fuse/memory.h 2011-06-05 20:27:50 UTC (rev 4459) +++ branches/2011-05-04-memory/fuse/memory.h 2011-06-05 23:59:43 UTC (rev 4460) @@ -133,6 +133,9 @@ /* Page in from /ROMCS */ void memory_map_romcs( memory_page *source ); +/* Page in 8K from /ROMCS */ +void memory_map_romcs_8k( libspectrum_word address, memory_page *source ); + libspectrum_byte readbyte( libspectrum_word address ); /* Use a macro for performance in the main core, but a function for Modified: branches/2011-05-04-memory/fuse/peripherals/disk/opus.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/opus.c 2011-06-05 20:27:50 UTC (rev 4459) +++ branches/2011-05-04-memory/fuse/peripherals/disk/opus.c 2011-06-05 23:59:43 UTC (rev 4460) @@ -46,9 +46,16 @@ #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]; +#if MEMORY_PAGE_SIZE > 0x800 +#warning "Memory page size too large for correct Opus RAM size" +#endif +#define OPUS_RAM_PAGES ( 0x800 / MEMORY_PAGE_SIZE ? \ + 0x800 / MEMORY_PAGE_SIZE : 1 ) +/* Two memory chunks accessible by the Z80 when /ROMCS is low */ +static memory_page opus_memory_map_romcs_rom[ MEMORY_PAGES_IN_8K ]; +static memory_page opus_memory_map_romcs_ram[ OPUS_RAM_PAGES ]; + int opus_available = 0; int opus_active = 0; @@ -61,7 +68,7 @@ static wd_fdc *opus_fdc; static wd_fdc_drive opus_drives[ OPUS_NUM_DRIVES ]; -static libspectrum_byte opus_ram[ 0x800 ]; +static libspectrum_byte opus_ram[ OPUS_RAM_PAGES * MEMORY_PAGE_SIZE ]; /* 6821 PIA internal registers */ static libspectrum_byte data_reg_a, data_dir_a, control_a; @@ -109,10 +116,15 @@ static void opus_memory_map( void ) { + int i; + if( !opus_active ) return; - 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 ]; + memory_map_romcs_8k( 0x0000, opus_memory_map_romcs_rom ); + + for( i = 0; i < OPUS_RAM_PAGES; i++ ) + memory_map_read[ i ] = memory_map_write[ i ] = + opus_memory_map_romcs_ram[ i ]; } static void @@ -150,7 +162,10 @@ module_register( &opus_module_info ); opus_source = memory_source_register( "Opus") ; - for( i = 0; i < 2; i++ ) opus_memory_map_romcs[i].source = opus_source; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + opus_memory_map_romcs_rom[i].source = opus_source; + for( i = 0; i < OPUS_RAM_PAGES; i++ ) + opus_memory_map_romcs_ram[i].source = opus_source; periph_register( PERIPH_TYPE_OPUS, &opus_periph ); @@ -172,7 +187,7 @@ if( !periph_is_active( PERIPH_TYPE_OPUS ) ) return; - if( machine_load_rom_bank( opus_memory_map_romcs, 0, + if( machine_load_rom_bank( opus_memory_map_romcs_rom, 0, settings_current.rom_opus, settings_default.rom_opus, 0x2000 ) ) { settings_current.opus = 0; @@ -180,11 +195,17 @@ return; } - opus_memory_map_romcs[1].page = opus_ram; + for( i = 0; i < OPUS_RAM_PAGES; i++ ) { + struct memory_page *page = + &opus_memory_map_romcs_ram[ i ]; + page->page = opus_ram + i * MEMORY_PAGE_SIZE; + page->offset = i * MEMORY_PAGE_SIZE; + } machine_current->ram.romcs = 0; - opus_memory_map_romcs[ 1 ].writable = 1; + for( i = 0; i < OPUS_RAM_PAGES; i++ ) + opus_memory_map_romcs_ram[ i ].writable = 1; data_reg_a = 0; data_dir_a = 0; @@ -679,7 +700,7 @@ if( libspectrum_snap_opus_custom_rom( snap ) && libspectrum_snap_opus_rom( snap, 0 ) && machine_load_rom_bank_from_buffer( - opus_memory_map_romcs, 0, + opus_memory_map_romcs_rom, 0, libspectrum_snap_opus_rom( snap, 0 ), 0x2000, 1 ) ) return; @@ -724,10 +745,10 @@ libspectrum_snap_set_opus_active( snap, 1 ); - buffer = alloc_and_copy_page( opus_memory_map_romcs[0].page ); + buffer = alloc_and_copy_page( opus_memory_map_romcs_rom[0].page ); if( !buffer ) return; libspectrum_snap_set_opus_rom( snap, 0, buffer ); - if( opus_memory_map_romcs[0].save_to_snapshot ) + if( opus_memory_map_romcs_rom[0].save_to_snapshot ) libspectrum_snap_set_opus_custom_rom( snap, 1 ); buffer = alloc_and_copy_page( opus_ram ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <zu...@us...> - 2011-06-06 00:29:39
|
Revision: 4461 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4461&view=rev Author: zubzero Date: 2011-06-06 00:29:32 +0000 (Mon, 06 Jun 2011) Log Message: ----------- Allow page sizes other than 8KB. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/peripherals/disk/beta.c branches/2011-05-04-memory/fuse/peripherals/disk/beta.h branches/2011-05-04-memory/fuse/peripherals/disk/disciple.c branches/2011-05-04-memory/fuse/peripherals/disk/plusd.c branches/2011-05-04-memory/fuse/peripherals/ide/divide.c branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.c branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.c branches/2011-05-04-memory/fuse/peripherals/if1.c branches/2011-05-04-memory/fuse/peripherals/if2.c branches/2011-05-04-memory/fuse/peripherals/speccyboot.c Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-05 23:59:43 UTC (rev 4460) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-06 00:29:32 UTC (rev 4461) @@ -3672,3 +3672,6 @@ rather than setting it explicitly (Stuart). 20110606 memory.[ch],peripherals/disk/opus.c: guard against overrun of Opus RAM buffer by increasing the amount allocated (Stuart). +20110606 peripherals/{disk/{beta.[ch],disciple.c,plusd.c},ide/{divide.c, + zxatasp.c,zxcf.c},if1.c,if2.c,speccyboot.c}: allow page sizes other + than 8KB (Stuart). Modified: branches/2011-05-04-memory/fuse/peripherals/disk/beta.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/beta.c 2011-06-05 23:59:43 UTC (rev 4460) +++ branches/2011-05-04-memory/fuse/peripherals/disk/beta.c 2011-06-06 00:29:32 UTC (rev 4461) @@ -57,7 +57,7 @@ #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 */ +/* A 16KB memory chunk accessible by the Z80 when /ROMCS is low */ memory_page beta_memory_map_romcs[MEMORY_PAGES_IN_16K]; int beta_available = 0; @@ -174,7 +174,8 @@ module_register( &beta_module_info ); beta_source = memory_source_register( "Betadisk" ); - for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) beta_memory_map_romcs[i].source = beta_source; + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + beta_memory_map_romcs[i].source = beta_source; periph_register( PERIPH_TYPE_BETA128, &beta_peripheral ); Modified: branches/2011-05-04-memory/fuse/peripherals/disk/beta.h =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/beta.h 2011-06-05 23:59:43 UTC (rev 4460) +++ branches/2011-05-04-memory/fuse/peripherals/disk/beta.h 2011-06-06 00:29:32 UTC (rev 4461) @@ -37,7 +37,7 @@ 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 */ +/* A 16KB memory chunk accessible by the Z80 when /ROMCS is low */ extern memory_page beta_memory_map_romcs[MEMORY_PAGES_IN_16K]; extern libspectrum_word beta_pc_mask; /* Bits to mask in PC for enable check */ Modified: branches/2011-05-04-memory/fuse/peripherals/disk/disciple.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/disciple.c 2011-06-05 23:59:43 UTC (rev 4460) +++ branches/2011-05-04-memory/fuse/peripherals/disk/disciple.c 2011-06-06 00:29:32 UTC (rev 4461) @@ -47,7 +47,8 @@ /* Three 8 KiB memory chunks accessible by the Z80 when /ROMCS is low */ /* Two 8 KiB chunks of ROM, one 8 KiB chunk of RAM */ -static memory_page disciple_memory_map_romcs[3]; +static memory_page disciple_memory_map_romcs_rom[ 2 ][ MEMORY_PAGES_IN_8K ]; +static memory_page disciple_memory_map_romcs_ram[ MEMORY_PAGES_IN_8K ]; int disciple_memswap = 0; /* Are the ROM and RAM pages swapped? */ int disciple_rombank = 0; /* ROM bank that is paged in */ @@ -105,19 +106,22 @@ void disciple_memory_map( void ) { + struct memory_page *rom_page, *lower_page, *upper_page; + if( !disciple_active ) return; + rom_page = disciple_memory_map_romcs_rom[ disciple_rombank ]; + if( !disciple_memswap ) { - memory_map_read[ 0 ] = memory_map_write[ 0 ] = - disciple_memory_map_romcs[ disciple_rombank ]; - memory_map_read[ 1 ] = memory_map_write[ 1 ] = - disciple_memory_map_romcs[ 2 ]; + lower_page = rom_page; + upper_page = disciple_memory_map_romcs_ram; } else { - memory_map_read[ 0 ] = memory_map_write[ 0 ] = - disciple_memory_map_romcs[ 2 ]; - memory_map_read[ 1 ] = memory_map_write[ 1 ] = - disciple_memory_map_romcs[ disciple_rombank ]; + lower_page = disciple_memory_map_romcs_ram; + upper_page = rom_page; } + + memory_map_romcs_8k( 0x0000, lower_page ); + memory_map_romcs_8k( 0x2000, upper_page ); } static const periph_port_t disciple_ports[] = { @@ -153,7 +157,7 @@ int disciple_init( void ) { - int i; + int i, j; wd_fdc_drive *d; int disciple_source; @@ -179,9 +183,13 @@ module_register( &disciple_module_info ); disciple_source = memory_source_register( "DISCiPLE" ); - for( i = 0; i < 3; i++ ) - disciple_memory_map_romcs[i].source = disciple_source; + for( i = 0; i < 2; i++ ) + for( j = 0; j < MEMORY_PAGES_IN_8K; j++ ) + disciple_memory_map_romcs_rom[ i ][ j ].source = disciple_source; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + disciple_memory_map_romcs_ram[ i ].source = disciple_source; + periph_register( PERIPH_TYPE_DISCIPLE, &disciple_periph ); return 0; @@ -202,7 +210,7 @@ if( !periph_is_active( PERIPH_TYPE_DISCIPLE ) ) return; - if( machine_load_rom_bank( disciple_memory_map_romcs, 0, + if( machine_load_rom_bank( disciple_memory_map_romcs_rom[ 0 ], 0, settings_current.rom_disciple, settings_default.rom_disciple, 0x4000 ) ) { settings_current.disciple = 0; @@ -210,11 +218,13 @@ return; } - disciple_memory_map_romcs[2].page = disciple_ram; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + disciple_memory_map_romcs_ram[ i ].page = &disciple_ram[ i * MEMORY_PAGE_SIZE ]; machine_current->ram.romcs = 1; - disciple_memory_map_romcs[ 2 ].writable = 1; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + disciple_memory_map_romcs_ram[ i ].writable = 1; disciple_available = 1; disciple_active = 1; Modified: branches/2011-05-04-memory/fuse/peripherals/disk/plusd.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/plusd.c 2011-06-05 23:59:43 UTC (rev 4460) +++ branches/2011-05-04-memory/fuse/peripherals/disk/plusd.c 2011-06-06 00:29:32 UTC (rev 4461) @@ -45,8 +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]; +/* Two 8KB memory chunks accessible by the Z80 when /ROMCS is low */ +static memory_page plusd_memory_map_romcs_rom[ MEMORY_PAGES_IN_8K ]; +static memory_page plusd_memory_map_romcs_ram[ MEMORY_PAGES_IN_8K ]; int plusd_available = 0; int plusd_active = 0; @@ -105,8 +106,8 @@ { if( !plusd_active ) return; - 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 ]; + memory_map_romcs_8k( 0x0000, plusd_memory_map_romcs_rom ); + memory_map_romcs_8k( 0x2000, plusd_memory_map_romcs_ram ); } static const periph_port_t plusd_ports[] = { @@ -164,7 +165,10 @@ module_register( &plusd_module_info ); plusd_source = memory_source_register( "PlusD" ); - for( i = 0; i < 2; i++ ) plusd_memory_map_romcs[i].source = plusd_source; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + plusd_memory_map_romcs_rom[ i ].source = plusd_source; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + plusd_memory_map_romcs_ram[ i ].source = plusd_source; periph_register( PERIPH_TYPE_PLUSD, &plusd_periph ); @@ -186,7 +190,7 @@ if( !periph_is_active( PERIPH_TYPE_PLUSD ) ) return; - if( machine_load_rom_bank( plusd_memory_map_romcs, 0, + if( machine_load_rom_bank( plusd_memory_map_romcs_rom, 0, settings_current.rom_plusd, settings_default.rom_plusd, 0x2000 ) ) { settings_current.plusd = 0; @@ -194,11 +198,13 @@ return; } - plusd_memory_map_romcs[1].page = plusd_ram; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + plusd_memory_map_romcs_ram[ i ].page = &plusd_ram[ i * MEMORY_PAGE_SIZE ]; machine_current->ram.romcs = 0; - plusd_memory_map_romcs[ 1 ].writable = 1; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + plusd_memory_map_romcs_ram[ i ].writable = 1; plusd_available = 1; plusd_active = 1; @@ -649,7 +655,7 @@ if( libspectrum_snap_plusd_custom_rom( snap ) && libspectrum_snap_plusd_rom( snap, 0 ) && machine_load_rom_bank_from_buffer( - plusd_memory_map_romcs, 0, + plusd_memory_map_romcs_rom, 0, libspectrum_snap_plusd_rom( snap, 0 ), 0x2000, 1 ) ) return; @@ -689,10 +695,10 @@ libspectrum_snap_set_plusd_active( snap, 1 ); - buffer = alloc_and_copy_page( plusd_memory_map_romcs[0].page ); + buffer = alloc_and_copy_page( plusd_memory_map_romcs_rom[ 0 ].page ); if( !buffer ) return; libspectrum_snap_set_plusd_rom( snap, 0, buffer ); - if( plusd_memory_map_romcs[0].save_to_snapshot ) + if( plusd_memory_map_romcs_rom[ 0 ].save_to_snapshot ) libspectrum_snap_set_plusd_custom_rom( snap, 1 ); buffer = alloc_and_copy_page( plusd_ram ); Modified: branches/2011-05-04-memory/fuse/peripherals/ide/divide.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/ide/divide.c 2011-06-05 23:59:43 UTC (rev 4460) +++ branches/2011-05-04-memory/fuse/peripherals/ide/divide.c 2011-06-06 00:29:32 UTC (rev 4461) @@ -66,8 +66,8 @@ 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]; +/* Two 8KB memory chunks accessible by the Z80 when /ROMCS is low */ +static memory_page divide_memory_map_romcs[ 2 ][ MEMORY_PAGES_IN_8K ]; int divide_automapping_enabled = 0; int divide_active = 0; @@ -138,7 +138,10 @@ module_register( ÷_module_info ); divide_source = memory_source_register( "DivIDE" ); - for( i = 0; i < 2; i++ ) divide_memory_map_romcs[i].source = divide_source; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + divide_memory_map_romcs[0][i].source = divide_source; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + divide_memory_map_romcs[1][i].source = divide_source; periph_register( PERIPH_TYPE_DIVIDE, ÷_periph ); if( periph_register_paging_events( event_type_string, &page_event, @@ -350,6 +353,7 @@ void divide_memory_map( void ) { + int i; int upper_ram_page; if( !divide_active ) return; @@ -359,26 +363,38 @@ upper_ram_page = divide_control & (DIVIDE_PAGES - 1); if( divide_control & DIVIDE_CONTROL_CONMEM ) { - 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; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) { + divide_memory_map_romcs[0][i].page = divide_eprom + i * MEMORY_PAGE_SIZE; + divide_memory_map_romcs[0][i].writable = !settings_current.divide_wp; + } + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) { + divide_memory_map_romcs[1][i].page = divide_ram[ upper_ram_page ] + i * MEMORY_PAGE_SIZE; + divide_memory_map_romcs[1][i].writable = 1; + } } else { if( divide_control & DIVIDE_CONTROL_MAPRAM ) { - 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 ); + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) { + divide_memory_map_romcs[0][i].page = divide_ram[3] + i * MEMORY_PAGE_SIZE; + divide_memory_map_romcs[0][i].writable = 0; + } + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) { + divide_memory_map_romcs[1][i].page = divide_ram[ upper_ram_page ] + i * MEMORY_PAGE_SIZE; + divide_memory_map_romcs[1][i].writable = ( upper_ram_page != 3 ); + } } else { - 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; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) { + divide_memory_map_romcs[0][i].page = divide_eprom + i * MEMORY_PAGE_SIZE; + divide_memory_map_romcs[0][i].writable = 0; + } + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) { + divide_memory_map_romcs[1][i].page = divide_ram[ upper_ram_page ] + i * MEMORY_PAGE_SIZE; + divide_memory_map_romcs[1][i].writable = 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]; + for( i = 0; i < 2; i++ ) + memory_map_romcs_8k( i * 0x2000, divide_memory_map_romcs[i] ); } static void Modified: branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.c 2011-06-05 23:59:43 UTC (rev 4460) +++ branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.c 2011-06-06 00:29:32 UTC (rev 4461) @@ -39,8 +39,8 @@ #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]; +/* A 16KB memory chunk accessible by the Z80 when /ROMCS is low */ +static memory_page zxatasp_memory_map_romcs[MEMORY_PAGES_IN_16K]; /* TBD: Allow memory size selection (128K/512K) @@ -191,7 +191,8 @@ module_register( &zxatasp_module_info ); zxatasp_source = memory_source_register( "ZXATASP" ); - for( i = 0; i < 2; i++ ) zxatasp_memory_map_romcs[i].source = zxatasp_source; + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + zxatasp_memory_map_romcs[i].source = zxatasp_source; periph_register( PERIPH_TYPE_ZXATASP, &zxatasp_periph ); if( periph_register_paging_events( event_type_string, &page_event, @@ -443,7 +444,7 @@ for( i = 0; i < 2; i++ ) { page = &zxatasp_memory_map_romcs[i]; - offset = i & 1 ? MEMORY_PAGE_SIZE : 0x0000; + offset = i * MEMORY_PAGE_SIZE; page->page = &ZXATASPMEM[ bank ][ offset ]; page->writable = !settings_current.zxatasp_wp; @@ -492,7 +493,7 @@ static void zxatasp_memory_map( void ) { - int writable; + int i, writable; if( !settings_current.zxatasp_active ) return; @@ -503,16 +504,15 @@ writable = 1; } - zxatasp_memory_map_romcs[0].writable = - zxatasp_memory_map_romcs[1].writable = writable; + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + zxatasp_memory_map_romcs[i].writable = writable; - if( !settings_current.zxatasp_upload ) { - memory_map_read[0] = zxatasp_memory_map_romcs[0]; - memory_map_read[1] = zxatasp_memory_map_romcs[1]; - } + if( !settings_current.zxatasp_upload ) + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + memory_map_read[i] = zxatasp_memory_map_romcs[i]; - memory_map_write[0] = zxatasp_memory_map_romcs[0]; - memory_map_write[1] = zxatasp_memory_map_romcs[1]; + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + memory_map_write[i] = zxatasp_memory_map_romcs[i]; } static void Modified: branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.c 2011-06-05 23:59:43 UTC (rev 4460) +++ branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.c 2011-06-06 00:29:32 UTC (rev 4461) @@ -39,8 +39,8 @@ #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]; +/* A 16KB memory chunk accessible by the Z80 when /ROMCS is low */ +static memory_page zxcf_memory_map_romcs[MEMORY_PAGES_IN_16K]; /* TBD: Allow memory size selection (128K/512K/1024K) @@ -126,7 +126,8 @@ module_register( &zxcf_module_info ); zxcf_source = memory_source_register( "ZXCF" ); - for( i = 0; i < 2; i++ ) zxcf_memory_map_romcs[i].source = zxcf_source; + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + zxcf_memory_map_romcs[i].source = zxcf_source; periph_register( PERIPH_TYPE_ZXCF, &zxcf_periph ); if( periph_register_paging_events( event_type_string, &page_event, @@ -200,10 +201,10 @@ memory_page *page; size_t i, offset; - for( i = 0; i < 2; i++ ) { + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) { page = &zxcf_memory_map_romcs[i]; - offset = i & 1 ? MEMORY_PAGE_SIZE : 0x0000; + offset = i * MEMORY_PAGE_SIZE; page->page = &ZXCFMEM[ bank ][ offset ]; page->writable = zxcf_writeenable; @@ -274,15 +275,17 @@ static void zxcf_memory_map( void ) { + int i; + if( !settings_current.zxcf_active ) return; if( !settings_current.zxcf_upload ) { - memory_map_read[0] = zxcf_memory_map_romcs[0]; - memory_map_read[1] = zxcf_memory_map_romcs[1]; + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + memory_map_read[i] = zxcf_memory_map_romcs[i]; } - memory_map_write[0] = zxcf_memory_map_romcs[0]; - memory_map_write[1] = zxcf_memory_map_romcs[1]; + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + memory_map_write[i] = zxcf_memory_map_romcs[i]; } static void Modified: branches/2011-05-04-memory/fuse/peripherals/if1.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/if1.c 2011-06-05 23:59:43 UTC (rev 4460) +++ branches/2011-05-04-memory/fuse/peripherals/if1.c 2011-06-06 00:29:32 UTC (rev 4461) @@ -154,8 +154,8 @@ 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]; +/* One 8KB memory chunk accessible by the Z80 when /ROMCS is low */ +static memory_page if1_memory_map_romcs[MEMORY_PAGES_IN_8K]; /* IF1 paged out ROM activated? */ int if1_active = 0; @@ -333,7 +333,8 @@ module_register( &if1_module_info ); if1_source = memory_source_register( "If1" ); - for( i = 0; i < 2; i++ ) if1_memory_map_romcs[i].source = if1_source; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + if1_memory_map_romcs[i].source = if1_source; periph_register( PERIPH_TYPE_INTERFACE1, &if1_periph ); if( periph_register_paging_events( event_type_string, &page_event, @@ -424,7 +425,7 @@ { if( !if1_active ) return; - memory_map_read[0] = memory_map_write[0] = if1_memory_map_romcs[0]; + memory_map_romcs_8k( 0x0000, if1_memory_map_romcs ); } static void Modified: branches/2011-05-04-memory/fuse/peripherals/if2.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/if2.c 2011-06-05 23:59:43 UTC (rev 4460) +++ branches/2011-05-04-memory/fuse/peripherals/if2.c 2011-06-06 00:29:32 UTC (rev 4461) @@ -38,8 +38,8 @@ #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]; +/* A 16KB memory chunk accessible by the Z80 when /ROMCS is low */ +static memory_page if2_memory_map_romcs[MEMORY_PAGES_IN_16K]; /* IF2 cart inserted? */ int if2_active = 0; @@ -73,7 +73,8 @@ module_register( &if2_module_info ); if2_source = memory_source_register( "If2" ); - for( i = 0; i < 2; i++ ) if2_memory_map_romcs[i].source = if2_source; + for( i = 0; i < MEMORY_PAGES_IN_16K; i++ ) + if2_memory_map_romcs[i].source = if2_source; periph_register( PERIPH_TYPE_INTERFACE2, &if2_periph ); @@ -148,8 +149,7 @@ { if( !if2_active ) return; - 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]; + memory_map_romcs( if2_memory_map_romcs ); } static void Modified: branches/2011-05-04-memory/fuse/peripherals/speccyboot.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/speccyboot.c 2011-06-05 23:59:43 UTC (rev 4460) +++ branches/2011-05-04-memory/fuse/peripherals/speccyboot.c 2011-06-06 00:29:32 UTC (rev 4461) @@ -78,14 +78,14 @@ * ------------------------------------------------------------------------ */ static int speccyboot_rom_active = 0; /* SpeccyBoot ROM paged in? */ -static memory_page speccyboot_memory_map_romcs; +static memory_page speccyboot_memory_map_romcs[ MEMORY_PAGES_IN_8K ]; static void speccyboot_memory_map( void ) { if ( !speccyboot_rom_active ) return; - memory_map_read[0] = memory_map_write[0] = speccyboot_memory_map_romcs; + memory_map_romcs_8k( 0x0000, speccyboot_memory_map_romcs ); } static void @@ -93,7 +93,7 @@ { static int tap_opened = 0; - if ( machine_load_rom_bank( &speccyboot_memory_map_romcs, 0, + if ( machine_load_rom_bank( speccyboot_memory_map_romcs, 0, settings_current.rom_speccyboot, settings_default.rom_speccyboot, 0x2000 ) ) return; @@ -173,7 +173,9 @@ int speccyboot_init( void ) { + int i; int speccyboot_source; + nic = nic_enc28j60_alloc(); static module_info_t speccyboot_module_info = { @@ -187,8 +189,10 @@ module_register( &speccyboot_module_info ); speccyboot_source = memory_source_register( "SpeccyBoot" ); - speccyboot_memory_map_romcs.source = speccyboot_source; + for( i = 0; i < MEMORY_PAGES_IN_8K; i++ ) + speccyboot_memory_map_romcs[i].source = speccyboot_source; + periph_register( PERIPH_TYPE_SPECCYBOOT, &speccyboot_periph ); return 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-06-06 20:14:31
|
Revision: 4462 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4462&view=rev Author: pak21 Date: 2011-06-06 20:14:25 +0000 (Mon, 06 Jun 2011) Log Message: ----------- Switch to 4Kb page size, to flush out which 8Kb problems remain. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/memory.h Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-06 00:29:32 UTC (rev 4461) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-06 20:14:25 UTC (rev 4462) @@ -3675,3 +3675,4 @@ 20110606 peripherals/{disk/{beta.[ch],disciple.c,plusd.c},ide/{divide.c, zxatasp.c,zxcf.c},if1.c,if2.c,speccyboot.c}: allow page sizes other than 8KB (Stuart). +20110606 memory.h: switch to 4Kb page size. Modified: branches/2011-05-04-memory/fuse/memory.h =================================================================== --- branches/2011-05-04-memory/fuse/memory.h 2011-06-06 00:29:32 UTC (rev 4461) +++ branches/2011-05-04-memory/fuse/memory.h 2011-06-06 20:14:25 UTC (rev 4462) @@ -64,7 +64,7 @@ /* A memory page will be 1 << (this many) bytes in size ie 12 => 4 Kb, 13 => 8 Kb, 14 => 16 Kb */ -#define MEMORY_PAGE_SIZE_LOGARITHM 13 +#define MEMORY_PAGE_SIZE_LOGARITHM 12 /* The actual size of a memory page */ #define MEMORY_PAGE_SIZE ( 1 << MEMORY_PAGE_SIZE_LOGARITHM ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-06-06 20:22:30
|
Revision: 4463 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4463&view=rev Author: pak21 Date: 2011-06-06 20:22:24 +0000 (Mon, 06 Jun 2011) Log Message: ----------- Fix for 4Kb page size (patch #3312596) (Guesser). Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/z80/coretest.c Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-06 20:14:25 UTC (rev 4462) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-06 20:22:24 UTC (rev 4463) @@ -3676,3 +3676,4 @@ zxatasp.c,zxcf.c},if1.c,if2.c,speccyboot.c}: allow page sizes other than 8KB (Stuart). 20110606 memory.h: switch to 4Kb page size. +20110606 z80/coretest.c: fix for 4Kb page size (patch #3312596) (Guesser). Modified: branches/2011-05-04-memory/fuse/z80/coretest.c =================================================================== --- branches/2011-05-04-memory/fuse/z80/coretest.c 2011-06-06 20:14:25 UTC (rev 4462) +++ branches/2011-05-04-memory/fuse/z80/coretest.c 2011-06-06 20:22:24 UTC (rev 4463) @@ -390,8 +390,8 @@ libspectrum_byte **ROM = NULL; memory_page memory_map[8]; -memory_page *memory_map_home[8]; -memory_page memory_map_rom[8]; +memory_page *memory_map_home[MEMORY_PAGES_IN_64K]; +memory_page memory_map_rom[SPECTRUM_ROM_PAGES * MEMORY_PAGES_IN_16K]; int memory_contended[8] = { 1 }; libspectrum_byte spectrum_contention[ 80000 ] = { 0 }; int profile_active = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-06-06 21:55:47
|
Revision: 4467 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4467&view=rev Author: pak21 Date: 2011-06-06 21:55:41 +0000 (Mon, 06 Jun 2011) Log Message: ----------- Merge in trunk to get the Win32 fix. Modified Paths: -------------- branches/2011-05-04-memory/fuse/hacking/ChangeLog branches/2011-05-04-memory/fuse/peripherals/disk/opus.c branches/2011-05-04-memory/fuse/ui/win32/debugger.c branches/2011-05-04-memory/fuse/ui/win32/pokefinder.c branches/2011-05-04-memory/fuse/ui/win32/pokefinder.rc Property Changed: ---------------- branches/2011-05-04-memory/fuse/ branches/2011-05-04-memory/fuse/peripherals/ide/divide.c branches/2011-05-04-memory/fuse/peripherals/ide/divide.h branches/2011-05-04-memory/fuse/peripherals/ide/ide.c branches/2011-05-04-memory/fuse/peripherals/ide/ide.h branches/2011-05-04-memory/fuse/peripherals/ide/simpleide.c branches/2011-05-04-memory/fuse/peripherals/ide/simpleide.h branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.c branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.h branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.c branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.h Property changes on: branches/2011-05-04-memory/fuse ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-16-spectranet/fuse:4454 /branches/2011-02-18-memory/fuse:4313-4414 /branches/Release-1_0_0-branch:4183-4219 /branches/Release_0_10_0-branch:3813-3899,3931-3958 /branches/ntsc-2009-04-11/fuse:4000-4147 /branches/opus-20090722/fuse:4046-4059 /branches/wii-20080828/fuse:3757-3943 /trunk/fuse:4419-4446 + /branches/2011-02-16-spectranet/fuse:4454 /branches/2011-02-18-memory/fuse:4313-4414 /branches/Release-1_0_0-branch:4183-4219 /branches/Release_0_10_0-branch:3813-3899,3931-3958 /branches/ntsc-2009-04-11/fuse:4000-4147 /branches/opus-20090722/fuse:4046-4059 /branches/wii-20080828/fuse:3757-3943 /trunk/fuse:4419-4466 Modified: branches/2011-05-04-memory/fuse/hacking/ChangeLog =================================================================== --- branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-06 21:53:04 UTC (rev 4466) +++ branches/2011-05-04-memory/fuse/hacking/ChangeLog 2011-06-06 21:55:41 UTC (rev 4467) @@ -3677,3 +3677,5 @@ than 8KB (Stuart). 20110606 memory.h: switch to 4Kb page size. 20110606 z80/coretest.c: fix for 4Kb page size (patch #3312596) (Guesser). +20110606 ui/win32/{debugger.c,pokefinder.c,pokefinder.rc}: fix Win32 build + (Sergio Baldoví) Modified: branches/2011-05-04-memory/fuse/peripherals/disk/opus.c =================================================================== --- branches/2011-05-04-memory/fuse/peripherals/disk/opus.c 2011-06-06 21:53:04 UTC (rev 4466) +++ branches/2011-05-04-memory/fuse/peripherals/disk/opus.c 2011-06-06 21:55:41 UTC (rev 4467) @@ -46,9 +46,11 @@ #define DISK_TRY_MERGE(heads) ( option_enumerate_diskoptions_disk_try_merge() == 2 || \ ( option_enumerate_diskoptions_disk_try_merge() == 1 && heads == 1 ) ) +/* #if MEMORY_PAGE_SIZE > 0x800 #warning "Memory page size too large for correct Opus RAM size" #endif +*/ #define OPUS_RAM_PAGES ( 0x800 / MEMORY_PAGE_SIZE ? \ 0x800 / MEMORY_PAGE_SIZE : 1 ) Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/divide.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-16-spectranet/fuse/peripherals/ide/divide.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/divide.c:4313-4414 /branches/Release-1_0_0-branch/ide/divide.c:4183-4219 /branches/Release_0_10_0-branch/divide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/divide.c:4000-4147 /branches/opus-20090722/fuse/ide/divide.c:4046-4059 /branches/wii-20080828/fuse/ide/divide.c:3757-3943 /trunk/fuse/peripherals/ide/divide.c:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/divide.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/divide.c:4313-4414 /branches/Release-1_0_0-branch/ide/divide.c:4183-4219 /branches/Release_0_10_0-branch/divide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/divide.c:4000-4147 /branches/opus-20090722/fuse/ide/divide.c:4046-4059 /branches/wii-20080828/fuse/ide/divide.c:3757-3943 /trunk/fuse/peripherals/ide/divide.c:4419-4466 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/divide.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-16-spectranet/fuse/peripherals/ide/divide.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/divide.h:4313-4414 /branches/Release-1_0_0-branch/ide/divide.h:4183-4219 /branches/Release_0_10_0-branch/divide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/divide.h:4000-4147 /branches/opus-20090722/fuse/ide/divide.h:4046-4059 /branches/wii-20080828/fuse/ide/divide.h:3757-3943 /trunk/fuse/peripherals/ide/divide.h:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/divide.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/divide.h:4313-4414 /branches/Release-1_0_0-branch/ide/divide.h:4183-4219 /branches/Release_0_10_0-branch/divide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/divide.h:4000-4147 /branches/opus-20090722/fuse/ide/divide.h:4046-4059 /branches/wii-20080828/fuse/ide/divide.h:3757-3943 /trunk/fuse/peripherals/ide/divide.h:4419-4466 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/ide.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-16-spectranet/fuse/peripherals/ide/ide.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/ide.c:4313-4414 /branches/Release-1_0_0-branch/ide/ide.c:4183-4219 /branches/Release_0_10_0-branch/ide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/ide.c:4000-4147 /branches/opus-20090722/fuse/ide/ide.c:4046-4059 /branches/wii-20080828/fuse/ide/ide.c:3757-3943 /trunk/fuse/peripherals/ide/ide.c:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/ide.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/ide.c:4313-4414 /branches/Release-1_0_0-branch/ide/ide.c:4183-4219 /branches/Release_0_10_0-branch/ide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/ide.c:4000-4147 /branches/opus-20090722/fuse/ide/ide.c:4046-4059 /branches/wii-20080828/fuse/ide/ide.c:3757-3943 /trunk/fuse/peripherals/ide/ide.c:4419-4466 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/ide.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-16-spectranet/fuse/peripherals/ide/ide.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/ide.h:4313-4414 /branches/Release-1_0_0-branch/ide/ide.h:4183-4219 /branches/Release_0_10_0-branch/ide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/ide.h:4000-4147 /branches/opus-20090722/fuse/ide/ide.h:4046-4059 /branches/wii-20080828/fuse/ide/ide.h:3757-3943 /trunk/fuse/peripherals/ide/ide.h:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/ide.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/ide.h:4313-4414 /branches/Release-1_0_0-branch/ide/ide.h:4183-4219 /branches/Release_0_10_0-branch/ide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/ide.h:4000-4147 /branches/opus-20090722/fuse/ide/ide.h:4046-4059 /branches/wii-20080828/fuse/ide/ide.h:3757-3943 /trunk/fuse/peripherals/ide/ide.h:4419-4466 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/simpleide.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-16-spectranet/fuse/peripherals/ide/simpleide.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/simpleide.c:4313-4414 /branches/Release-1_0_0-branch/ide/simpleide.c:4183-4219 /branches/Release_0_10_0-branch/simpleide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/simpleide.c:4000-4147 /branches/opus-20090722/fuse/ide/simpleide.c:4046-4059 /branches/wii-20080828/fuse/ide/simpleide.c:3757-3943 /trunk/fuse/peripherals/ide/simpleide.c:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/simpleide.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/simpleide.c:4313-4414 /branches/Release-1_0_0-branch/ide/simpleide.c:4183-4219 /branches/Release_0_10_0-branch/simpleide.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/simpleide.c:4000-4147 /branches/opus-20090722/fuse/ide/simpleide.c:4046-4059 /branches/wii-20080828/fuse/ide/simpleide.c:3757-3943 /trunk/fuse/peripherals/ide/simpleide.c:4419-4466 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/simpleide.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-16-spectranet/fuse/peripherals/ide/simpleide.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/simpleide.h:4313-4414 /branches/Release-1_0_0-branch/ide/simpleide.h:4183-4219 /branches/Release_0_10_0-branch/simpleide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/simpleide.h:4000-4147 /branches/opus-20090722/fuse/ide/simpleide.h:4046-4059 /branches/wii-20080828/fuse/ide/simpleide.h:3757-3943 /trunk/fuse/peripherals/ide/simpleide.h:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/simpleide.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/simpleide.h:4313-4414 /branches/Release-1_0_0-branch/ide/simpleide.h:4183-4219 /branches/Release_0_10_0-branch/simpleide.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/simpleide.h:4000-4147 /branches/opus-20090722/fuse/ide/simpleide.h:4046-4059 /branches/wii-20080828/fuse/ide/simpleide.h:3757-3943 /trunk/fuse/peripherals/ide/simpleide.h:4419-4466 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-16-spectranet/fuse/peripherals/ide/zxatasp.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/zxatasp.c:4313-4414 /branches/Release-1_0_0-branch/ide/zxatasp.c:4183-4219 /branches/Release_0_10_0-branch/zxatasp.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxatasp.c:4000-4147 /branches/opus-20090722/fuse/ide/zxatasp.c:4046-4059 /branches/wii-20080828/fuse/ide/zxatasp.c:3757-3943 /trunk/fuse/peripherals/ide/zxatasp.c:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/zxatasp.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/zxatasp.c:4313-4414 /branches/Release-1_0_0-branch/ide/zxatasp.c:4183-4219 /branches/Release_0_10_0-branch/zxatasp.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxatasp.c:4000-4147 /branches/opus-20090722/fuse/ide/zxatasp.c:4046-4059 /branches/wii-20080828/fuse/ide/zxatasp.c:3757-3943 /trunk/fuse/peripherals/ide/zxatasp.c:4419-4466 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/zxatasp.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-16-spectranet/fuse/peripherals/ide/zxatasp.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/zxatasp.h:4313-4414 /branches/Release-1_0_0-branch/ide/zxatasp.h:4183-4219 /branches/Release_0_10_0-branch/zxatasp.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxatasp.h:4000-4147 /branches/opus-20090722/fuse/ide/zxatasp.h:4046-4059 /branches/wii-20080828/fuse/ide/zxatasp.h:3757-3943 /trunk/fuse/peripherals/ide/zxatasp.h:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/zxatasp.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/zxatasp.h:4313-4414 /branches/Release-1_0_0-branch/ide/zxatasp.h:4183-4219 /branches/Release_0_10_0-branch/zxatasp.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxatasp.h:4000-4147 /branches/opus-20090722/fuse/ide/zxatasp.h:4046-4059 /branches/wii-20080828/fuse/ide/zxatasp.h:3757-3943 /trunk/fuse/peripherals/ide/zxatasp.h:4419-4466 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.c ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-16-spectranet/fuse/peripherals/ide/zxcf.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/zxcf.c:4313-4414 /branches/Release-1_0_0-branch/ide/zxcf.c:4183-4219 /branches/Release_0_10_0-branch/zxcf.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxcf.c:4000-4147 /branches/opus-20090722/fuse/ide/zxcf.c:4046-4059 /branches/wii-20080828/fuse/ide/zxcf.c:3757-3943 /trunk/fuse/peripherals/ide/zxcf.c:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/zxcf.c:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/zxcf.c:4313-4414 /branches/Release-1_0_0-branch/ide/zxcf.c:4183-4219 /branches/Release_0_10_0-branch/zxcf.c:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxcf.c:4000-4147 /branches/opus-20090722/fuse/ide/zxcf.c:4046-4059 /branches/wii-20080828/fuse/ide/zxcf.c:3757-3943 /trunk/fuse/peripherals/ide/zxcf.c:4419-4466 Property changes on: branches/2011-05-04-memory/fuse/peripherals/ide/zxcf.h ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2011-02-16-spectranet/fuse/peripherals/ide/zxcf.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/zxcf.h:4313-4414 /branches/Release-1_0_0-branch/ide/zxcf.h:4183-4219 /branches/Release_0_10_0-branch/zxcf.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxcf.h:4000-4147 /branches/opus-20090722/fuse/ide/zxcf.h:4046-4059 /branches/wii-20080828/fuse/ide/zxcf.h:3757-3943 /trunk/fuse/peripherals/ide/zxcf.h:4419-4446 + /branches/2011-02-16-spectranet/fuse/peripherals/ide/zxcf.h:4454 /branches/2011-02-18-memory/fuse/peripherals/ide/zxcf.h:4313-4414 /branches/Release-1_0_0-branch/ide/zxcf.h:4183-4219 /branches/Release_0_10_0-branch/zxcf.h:3813-3899 /branches/ntsc-2009-04-11/fuse/ide/zxcf.h:4000-4147 /branches/opus-20090722/fuse/ide/zxcf.h:4046-4059 /branches/wii-20080828/fuse/ide/zxcf.h:3757-3943 /trunk/fuse/peripherals/ide/zxcf.h:4419-4466 Modified: branches/2011-05-04-memory/fuse/ui/win32/debugger.c =================================================================== --- branches/2011-05-04-memory/fuse/ui/win32/debugger.c 2011-06-06 21:53:04 UTC (rev 4466) +++ branches/2011-05-04-memory/fuse/ui/win32/debugger.c 2011-06-06 21:55:41 UTC (rev 4467) @@ -78,19 +78,19 @@ static void toggle_display( debugger_pane pane, UINT menu_item_id ); static int create_register_display( HFONT font ); /* int create_memory_map( void ); this function is handled by rc */ -static int create_breakpoints(); +static int create_breakpoints( void ); static int create_disassembly( HFONT font ); static int create_stack_display( HFONT font ); static void stack_click( LPNMITEMACTIVATE lpnmitem ); -static int create_events(); +static int create_events( void ); static void events_click( LPNMITEMACTIVATE lpnmitem ); /* int create_command_entry( void ); this function is handled by rc */ /* int create_buttons( void ); this function is handled by rc */ static int activate_debugger( void ); static int update_memory_map( void ); -static int update_breakpoints(); -static int update_disassembly(); +static int update_breakpoints( void ); +static int update_disassembly( void ); static int update_events( void ); static void add_event( gpointer data, gpointer user_data GCC_UNUSED ); static int deactivate_debugger( void ); @@ -100,7 +100,7 @@ static void evaluate_command( void ); static void win32ui_debugger_done_step( void ); static void win32ui_debugger_done_continue( void ); -static void win32ui_debugger_break(); +static void win32ui_debugger_break( void ); static void delete_dialog( void ); static void win32ui_debugger_done_close( void ); static INT_PTR CALLBACK win32ui_debugger_proc( HWND hWnd, UINT msg, @@ -113,7 +113,8 @@ static const int disassembly_min = 0x0000; static const int disassembly_max = 0xffff; static const float disassembly_step = 0.5; -static int disassembly_page = 20; /* Visual styles could change visible rows */ +/* Visual styles could change visible rows */ +static unsigned int disassembly_page = 20; /* Have we created the above yet? */ static int dialog_created = 0; @@ -484,7 +485,7 @@ readbyte_internal( address ) + readbyte_internal( address + 1 ) * 0x100; error = debugger_breakpoint_add_address( - DEBUGGER_BREAKPOINT_TYPE_EXECUTE, -1, destination, 0, + DEBUGGER_BREAKPOINT_TYPE_EXECUTE, memory_source_any, 0, address, 0, DEBUGGER_BREAKPOINT_LIFE_ONESHOT, NULL ); if( error ) return; @@ -730,9 +731,11 @@ SendDlgItemMessage( fuse_hDBGWnd, IDC_DBG_MAP11 + ( i * 4 ), WM_SETTEXT, ( WPARAM ) 0, ( LPARAM ) buffer ); - /* FIXME: memory_bank_name is not unicode */ - _sntprintf( buffer, 40, TEXT( "%s %d" ), memory_bank_name( &memory_map_read[i] ), - memory_map_read[i].page_num ); + /* FIXME: memory_source_description is not unicode */ + _snprintf( buffer, 40, TEXT( "%s %d" ), + memory_source_description( memory_map_read[i].source ), + memory_map_read[i].page_num ); + SendDlgItemMessage( fuse_hDBGWnd, IDC_DBG_MAP11 + ( i * 4 ) + 1, WM_SETTEXT, ( WPARAM ) 0, ( LPARAM ) buffer ); @@ -751,14 +754,14 @@ } static int -update_breakpoints() +update_breakpoints( void ) { /* FIXME: review this function for unicode compatibility */ TCHAR buffer[ 1024 ], *breakpoint_text[6] = { &buffer[ 0], &buffer[ 40], &buffer[80], &buffer[120], &buffer[160], &buffer[200] }; GSList *ptr; - TCHAR format_string[ 1024 ], page[ 1024 ]; + TCHAR format_string[ 1024 ]; LV_ITEM lvi; lvi.mask = LVIF_TEXT; @@ -781,14 +784,15 @@ case DEBUGGER_BREAKPOINT_TYPE_EXECUTE: case DEBUGGER_BREAKPOINT_TYPE_READ: case DEBUGGER_BREAKPOINT_TYPE_WRITE: - if( bp->value.address.page == -1 ) { - _sntprintf( breakpoint_text[2], 40, format_16_bit(), - bp->value.address.offset ); + if( bp->value.address.source == memory_source_any ) { + _sntprintf( breakpoint_text[2], 40, format_16_bit(), + bp->value.address.offset ); } else { - debugger_breakpoint_decode_page( page, 1024, bp->value.address.page ); - _sntprintf( format_string, 1024, "%%s:%s", format_16_bit() ); - _sntprintf( breakpoint_text[2], 40, format_string, page, - bp->value.address.offset ); + snprintf( format_string, 1024, "%%s:%s:%s", + format_16_bit(), format_16_bit() ); + snprintf( breakpoint_text[2], 40, format_string, + memory_source_description( bp->value.address.source ), + bp->value.address.page, bp->value.address.offset ); } break; @@ -1091,7 +1095,7 @@ } static INT_PTR CALLBACK -win32ui_debugger_proc( HWND hWnd, UINT msg, +win32ui_debugger_proc( HWND hWnd GCC_UNUSED, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { Modified: branches/2011-05-04-memory/fuse/ui/win32/pokefinder.c =================================================================== --- branches/2011-05-04-memory/fuse/ui/win32/pokefinder.c 2011-06-06 21:53:04 UTC (rev 4466) +++ branches/2011-05-04-memory/fuse/ui/win32/pokefinder.c 2011-06-06 21:55:41 UTC (rev 4467) @@ -34,65 +34,101 @@ #include "ui/ui.h" #include "win32internals.h" -static void win32ui_pokefinder_incremented(); -static void win32ui_pokefinder_decremented(); -static void win32ui_pokefinder_search(); -static void win32ui_pokefinder_reset(); -static void win32ui_pokefinder_close(); +void menu_machine_pokefinder( int action ); +void move_button( int button, int dlg_height ); +static void possible_click( LPNMITEMACTIVATE lpnmitem ); static void update_pokefinder( void ); -static void possible_click( LPNMITEMACTIVATE lpnmitem ); +static void win32ui_pokefinder_incremented( void ); +static void win32ui_pokefinder_decremented( void ); +static void win32ui_pokefinder_search( void ); +static void win32ui_pokefinder_reset( void ); +static void win32ui_pokefinder_close( void ); #define MAX_POSSIBLE 20 int possible_page[ MAX_POSSIBLE ]; libspectrum_word possible_offset[ MAX_POSSIBLE ]; +int initial_width = 0; +int initial_height = 0; +HWND lv_hWnd = NULL; +int lv_width = 0; static INT_PTR CALLBACK -win32ui_pokefinder_proc( HWND hWnd, UINT msg, +win32ui_pokefinder_proc( HWND hWnd GCC_UNUSED, UINT msg, WPARAM wParam, LPARAM lParam ) { + int height; + switch( msg ) { case WM_COMMAND: switch( LOWORD( wParam ) ) { case IDCLOSE: + case IDCANCEL: win32ui_pokefinder_close(); - return 0; + return TRUE; case IDC_PF_INC: win32ui_pokefinder_incremented(); - return 0; + return TRUE; case IDC_PF_DEC: win32ui_pokefinder_decremented(); - return 0; + return TRUE; case IDC_PF_SEARCH: win32ui_pokefinder_search(); - return 0; + return TRUE; case IDC_PF_RESET: win32ui_pokefinder_reset(); - return 0; + return TRUE; } break; + case WM_SIZE: + height = HIWORD( lParam ); + move_button( IDC_PF_INC, height ); + move_button( IDC_PF_DEC, height ); + move_button( IDC_PF_SEARCH, height ); + move_button( IDC_PF_RESET, height ); + move_button( IDCLOSE, height ); + return TRUE; + case WM_CLOSE: win32ui_pokefinder_close(); - return 0; + return TRUE; case WM_NOTIFY: switch ( ( ( LPNMHDR ) lParam )->code ) { case NM_DBLCLK: possible_click( ( LPNMITEMACTIVATE ) lParam ); - return 0; /* "The return value for this notification is not used." */ + return TRUE; /* The return value for this notification is not used */ } break; } return FALSE; } +void +move_button( int button, int dlg_height ) +{ + HWND ctrl_hWnd; + RECT rect; + int x, y; + + ctrl_hWnd = GetDlgItem( fuse_hPFWnd, button ); + GetWindowRect( ctrl_hWnd, &rect ); + MapWindowPoints( 0, fuse_hPFWnd, (POINT *)&rect, 2 ); + x = rect.left; + y = dlg_height - ( rect.bottom - rect.top ) - 10; + SetWindowPos( ctrl_hWnd, 0, x, y, 0, 0, + SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE ); +} + static void update_pokefinder( void ) { size_t page, offset; TCHAR buffer[256], *possible_text[2] = { &buffer[0], &buffer[128] }; + int rcx, rcy; + DWORD dw_res; /* clear the listview */ SendDlgItemMessage( fuse_hPFWnd, IDC_PF_LIST, LVM_DELETEALLITEMS, 0, 0 ); @@ -136,21 +172,42 @@ } /* show the listview */ - ShowWindow( GetDlgItem( fuse_hPFWnd, IDC_PF_LIST ), SW_SHOW ); - + ShowWindow( lv_hWnd, SW_SHOW ); + + /* change the size of the listview */ + dw_res = SendMessage( lv_hWnd, LVM_APPROXIMATEVIEWRECT, pokefinder_count, + MAKELPARAM( -1, -1 ) ); + rcx = lv_width; /* same width */ + rcy = HIWORD( dw_res ); + SetWindowPos( lv_hWnd, NULL, 0, 0, rcx, rcy, + SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE ); + + rcx = initial_width; + rcy += initial_height + 10; } else { /* hide the listview */ - ShowWindow( GetDlgItem( fuse_hPFWnd, IDC_PF_LIST ), SW_HIDE ); + ShowWindow( lv_hWnd, SW_HIDE ); + + rcx = initial_width; + rcy = initial_height; } + /* change the size of the dialog */ + SetWindowPos( fuse_hPFWnd, NULL, 0, 0, rcx, rcy, + SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE ); + /* print possible locations */ - _sntprintf( buffer, 256, "Possible locations: %d\n", pokefinder_count ); - SendDlgItemMessage( fuse_hPFWnd, IDC_PF_LOCATIONS, WM_SETTEXT, 0, (LPARAM) buffer ); + _sntprintf( buffer, 256, "Possible locations: %d", pokefinder_count ); + SendDlgItemMessage( fuse_hPFWnd, IDC_PF_LOCATIONS, WM_SETTEXT, 0, + (LPARAM) buffer ); } void -menu_machine_pokefinder( int action ) +menu_machine_pokefinder( int action GCC_UNUSED ) { + RECT rect; + int cx; + if (fuse_hPFWnd == NULL) { /* FIXME: Implement accelerators for this dialog */ fuse_hPFWnd = CreateDialog( fuse_hInstance, @@ -162,7 +219,13 @@ return; } - /* set extended listview style to select full row, when an item is selected */ + /* store initial dialog dimensions */ + GetWindowRect( fuse_hPFWnd, &rect ); + initial_width = rect.right - rect.left; + initial_height = rect.bottom - rect.top; + + /* set extended listview style to select full row, when an item + is selected */ DWORD lv_ext_style; lv_ext_style = SendDlgItemMessage( fuse_hPFWnd, IDC_PF_LIST, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0 ); @@ -170,19 +233,29 @@ SendDlgItemMessage( fuse_hPFWnd, IDC_PF_LIST, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, lv_ext_style ); + /* calculate columns width */ + lv_hWnd = GetDlgItem( fuse_hPFWnd, IDC_PF_LIST ); + GetClientRect( lv_hWnd, &rect ); + cx = rect.right - rect.left; + cx >>= 1; + /* create columns */ LVCOLUMN lvc; lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT ; lvc.fmt = LVCFMT_LEFT; - lvc.cx = 114; + lvc.cx = cx; lvc.pszText = TEXT( "Page" ); SendDlgItemMessage( fuse_hPFWnd, IDC_PF_LIST, LVM_INSERTCOLUMN, 0, ( LPARAM ) &lvc ); lvc.mask |= LVCF_SUBITEM; - lvc.cx = 114; + lvc.cx = cx; lvc.pszText = TEXT( "Offset" ); SendDlgItemMessage( fuse_hPFWnd, IDC_PF_LIST, LVM_INSERTCOLUMN, 1, ( LPARAM ) &lvc ); + + /* store listview width */ + GetWindowRect( lv_hWnd, &rect ); + lv_width = rect.right - rect.left; } else { SetActiveWindow( fuse_hPFWnd ); } @@ -266,7 +339,7 @@ row = lpnmitem->iItem; error = debugger_breakpoint_add_address( - DEBUGGER_BREAKPOINT_TYPE_WRITE, possible_page[ row ] + 1, + DEBUGGER_BREAKPOINT_TYPE_WRITE, memory_source_ram, possible_page[ row ] + 1, possible_offset[ row ], 0, DEBUGGER_BREAKPOINT_LIFE_PERMANENT, NULL ); if( error ) return; Modified: branches/2011-05-04-memory/fuse/ui/win32/pokefinder.rc =================================================================== --- branches/2011-05-04-memory/fuse/ui/win32/pokefinder.rc 2011-06-06 21:53:04 UTC (rev 4466) +++ branches/2011-05-04-memory/fuse/ui/win32/pokefinder.rc 2011-06-06 21:55:41 UTC (rev 4467) @@ -26,26 +26,24 @@ #include <windows.h> #include "pokefinder.h" -IDD_POKEFINDER DIALOGEX DISCARDABLE 6,6,341,83 +IDD_POKEFINDER DIALOGEX DISCARDABLE 6,6,330,49 CAPTION "Fuse - Poke Finder" STYLE WS_POPUP | WS_CAPTION | WS_VISIBLE | WS_SYSMENU EXSTYLE WS_EX_APPWINDOW FONT 8,"Ms Shell Dlg 2",400,0,1 BEGIN - CTEXT "Search for:", IDC_PF_SEARCH_FOR, 20, 25, 38, 9 - CTEXT "Possible locations: 6", IDC_PF_LOCATIONS, 232/*250*/, 5, 84, 9 + CTEXT "Search for:", IDC_PF_SEARCH_FOR, 20, 10, 38, 8 + EDITTEXT IDC_PF_EDIT, 70, 7, 80, 14, + WS_CHILD | WS_TABSTOP | WS_VISIBLE, WS_EX_CLIENTEDGE - PUSHBUTTON "&Incremented", IDC_PF_INC, 4, 64, 60, 15 - PUSHBUTTON "&Decremented", IDC_PF_DEC, 72, 64, 60, 15 - DEFPUSHBUTTON "&Search", IDC_PF_SEARCH, 140, 64, 60, 15 - PUSHBUTTON "&Reset", IDC_PF_RESET, 208, 64, 60, 15 - PUSHBUTTON "&Close", IDCLOSE, 276, 64, 60, 15 + CTEXT "Possible locations: 6", IDC_PF_LOCATIONS, 173, 10, 150, 8 + CONTROL "", IDC_PF_LIST, "SysListView32", + WS_CHILD | WS_TABSTOP | LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS, + 173, 25, 150, 39, WS_EX_CLIENTEDGE - EDITTEXT IDC_PF_EDIT, 70, 24, 80, 12, - WS_CHILD | WS_VISIBLE, WS_EX_CLIENTEDGE - - CONTROL "",IDC_PF_LIST,"SysListView32", - WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS , - 170, 20, 165, 39, WS_EX_CLIENTEDGE + PUSHBUTTON "&Incremented", IDC_PF_INC, 7, 28, 60, 14 + PUSHBUTTON "&Decremented", IDC_PF_DEC, 71, 28, 60, 14 + DEFPUSHBUTTON "&Search", IDC_PF_SEARCH, 135, 28, 60, 14 + PUSHBUTTON "&Reset", IDC_PF_RESET, 199, 28, 60, 14 + PUSHBUTTON "&Close", IDCLOSE, 263, 28, 60, 14 END - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |