From: <fr...@us...> - 2009-06-27 06:04:47
|
Revision: 4039 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4039&view=rev Author: fredm Date: 2009-06-27 06:04:44 +0000 (Sat, 27 Jun 2009) Log Message: ----------- Fix loading Warajevo TAPs of raw samples (e.g. BRUCELEE.TAP). Modified Paths: -------------- trunk/libspectrum/doc/libspectrum.txt trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/libspectrum.h.in trunk/libspectrum/make-perl.c trunk/libspectrum/myglib/gslist.c trunk/libspectrum/tape.c trunk/libspectrum/tzx_write.c trunk/libspectrum/warajevo_read.c Modified: trunk/libspectrum/doc/libspectrum.txt =================================================================== --- trunk/libspectrum/doc/libspectrum.txt 2009-06-24 14:25:23 UTC (rev 4038) +++ trunk/libspectrum/doc/libspectrum.txt 2009-06-27 06:04:44 UTC (rev 4039) @@ -870,6 +870,12 @@ Get the next block on the tape, but don't move the tape along or initialise the block. +libspectrum_tape_block WIN32_DLL * +libspectrum_tape_peek_last_block( libspectrum_tape *tape ) + +Get the last block on the tape, but don't move the tape along or +initialise the block. + libspectrum_tape_block* libspectrum_tape_select_next_block( libspectrum_tape *tape ) Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2009-06-24 14:25:23 UTC (rev 4038) +++ trunk/libspectrum/hacking/ChangeLog 2009-06-27 06:04:44 UTC (rev 4039) @@ -729,3 +729,6 @@ interfaces (feature request #1841501) (Fred). 20090611 sna.c: note info loss of Fuller or Melodik info when writing sna format snapshots (Fred). +20090627 doc/libspectrum.txt,libspectrum.h.in,make-perl.c,myglib/gslist.c, + tape.c,tzx_write.c,warajevo_read.c: fix loading Warajevo TAPs of raw + samples (e.g. BRUCELEE.TAP) (Fred). Modified: trunk/libspectrum/libspectrum.h.in =================================================================== --- trunk/libspectrum/libspectrum.h.in 2009-06-24 14:25:23 UTC (rev 4038) +++ trunk/libspectrum/libspectrum.h.in 2009-06-27 06:04:44 UTC (rev 4039) @@ -612,6 +612,10 @@ libspectrum_tape_block WIN32_DLL * libspectrum_tape_peek_next_block( libspectrum_tape *tape ); +/* Peek at the last block on the tape */ +libspectrum_tape_block WIN32_DLL * +libspectrum_tape_peek_last_block( libspectrum_tape *tape ); + /* Cause the next block on the tape to be active, initialise it and return it */ libspectrum_tape_block WIN32_DLL * Modified: trunk/libspectrum/make-perl.c =================================================================== --- trunk/libspectrum/make-perl.c 2009-06-24 14:25:23 UTC (rev 4038) +++ trunk/libspectrum/make-perl.c 2009-06-27 06:04:44 UTC (rev 4039) @@ -161,6 +161,10 @@ "GSList WIN32_DLL *g_slist_remove (GSList *list,\n" " gpointer data);\n" "\n" +"GSList WIN32_DLL *g_slist_last (GSList *list);\n" +"\n" +"GSList WIN32_DLL *g_slist_reverse (GSList *list);\n" +"\n" "GSList WIN32_DLL *g_slist_delete_link (GSList *list,\n" " GSList *link);\n" "\n" @@ -175,7 +179,7 @@ "GSList WIN32_DLL *g_slist_nth (GSList *list,\n" " guint n);\n" "\n" -"GSList WIN32_DLL * g_slist_find_custom (GSList *list,\n" +"GSList WIN32_DLL *g_slist_find_custom (GSList *list,\n" " gpointer data,\n" " GCompareFunc func );\n" "\n" Modified: trunk/libspectrum/myglib/gslist.c =================================================================== --- trunk/libspectrum/myglib/gslist.c 2009-06-24 14:25:23 UTC (rev 4038) +++ trunk/libspectrum/myglib/gslist.c 2009-06-27 06:04:44 UTC (rev 4039) @@ -246,6 +246,18 @@ return list; } +GSList* +g_slist_last (GSList *list) +{ + if (list) + { + while (list->next) + list = list->next; + } + + return list; +} + guint g_slist_length (GSList *list) { @@ -285,6 +297,24 @@ } } +GSList* +g_slist_reverse (GSList *list) +{ + GSList *prev = NULL; + + while (list) + { + GSList *next = list->next; + + list->next = prev; + + prev = list; + list = next; + } + + return prev; +} + GSList* g_slist_nth (GSList *list, guint n) { for( ; n; n-- ) { Modified: trunk/libspectrum/tape.c =================================================================== --- trunk/libspectrum/tape.c 2009-06-24 14:25:23 UTC (rev 4038) +++ trunk/libspectrum/tape.c 2009-06-27 06:04:44 UTC (rev 4039) @@ -37,6 +37,9 @@ /* All the blocks */ GSList* blocks; + /* The last block */ + GSList* last_block; + /* The state of the current block */ libspectrum_tape_block_state state; @@ -112,6 +115,7 @@ { libspectrum_tape *tape = libspectrum_malloc( sizeof( *tape ) ); tape->blocks = NULL; + tape->last_block = NULL; libspectrum_tape_iterator_init( &(tape->state.current_block), tape ); tape->state.loop_block = NULL; return tape; @@ -835,8 +839,8 @@ if( state->bytes_through_block == block->length ) break; } - } while( (block->data[state->bytes_through_block] << state->bits_through_byte - & 0x80 ) != state->last_bit) ; + } while( ( block->data[state->bytes_through_block] << + state->bits_through_byte & 0x80 ) != state->last_bit) ; state->bit_tstates = length * block->bit_length; state->last_bit ^= 0x80; @@ -1039,6 +1043,13 @@ return block ? block : tape->blocks->data; } +/* Peek at the last block on the tape */ +libspectrum_tape_block WIN32_DLL * +libspectrum_tape_peek_last_block( libspectrum_tape *tape ) +{ + return tape->last_block ? tape->last_block->data : NULL; +} + /* Cause the next block on the tape to be active, initialise it and return it */ libspectrum_tape_block* @@ -1105,7 +1116,13 @@ libspectrum_tape_append_block( libspectrum_tape *tape, libspectrum_tape_block *block ) { - tape->blocks = g_slist_append( tape->blocks, (gpointer)block ); + if( tape->blocks == NULL ) { + tape->blocks = g_slist_append( tape->blocks, (gpointer)block ); + tape->last_block = tape->blocks; + } else { + tape->last_block = + g_slist_append( tape->last_block, (gpointer)block )->next; + } /* If we previously didn't have a tape loaded ( implied by tape->current_block == NULL ), set up so that we point to the @@ -1122,6 +1139,7 @@ { if( it->data ) libspectrum_tape_block_free( it->data ); tape->blocks = g_slist_delete_link( tape->blocks, it ); + tape->last_block = g_slist_last( tape->blocks ); } libspectrum_error @@ -1130,6 +1148,7 @@ size_t position ) { tape->blocks = g_slist_insert( tape->blocks, block, position ); + tape->last_block = g_slist_last( tape->blocks ); return LIBSPECTRUM_ERROR_NONE; } Modified: trunk/libspectrum/tzx_write.c =================================================================== --- trunk/libspectrum/tzx_write.c 2009-06-24 14:25:23 UTC (rev 4038) +++ trunk/libspectrum/tzx_write.c 2009-06-27 06:04:44 UTC (rev 4039) @@ -331,7 +331,7 @@ /* Make room for the ID byte, the metadata and the actual data */ data_length = libspectrum_tape_block_data_length( block ); - libspectrum_make_room( buffer, 8 + data_length, ptr, length ); + libspectrum_make_room( buffer, 9 + data_length, ptr, length ); /* Write the ID byte and the metadata */ *(*ptr)++ = LIBSPECTRUM_TAPE_BLOCK_RAW_DATA; Modified: trunk/libspectrum/warajevo_read.c =================================================================== --- trunk/libspectrum/warajevo_read.c 2009-06-24 14:25:23 UTC (rev 4038) +++ trunk/libspectrum/warajevo_read.c 2009-06-27 06:04:44 UTC (rev 4039) @@ -154,7 +154,6 @@ mem[1] * 0x100 + mem[2] * 0x10000 + mem[3] * 0x1000000 ; - } static libspectrum_word @@ -201,7 +200,7 @@ error = get_next_block( &offset, ptr, end, tape ); if( error != LIBSPECTRUM_ERROR_NONE ) return error; } - + return LIBSPECTRUM_ERROR_NONE; } @@ -260,7 +259,8 @@ for( i = 0; i < 8; i++ ) { bit = ( command_byte & ( 0x80 >> i ) ) ? 1 : 0; - error = add_bit_to_copy_command( dest, src, dest + to_write, bit, sp, bytes_written ); + error = add_bit_to_copy_command( dest, src, dest + to_write, bit, sp, + bytes_written ); if( error ) { return error; } if( *bytes_written >= to_write ) break; @@ -541,7 +541,9 @@ error = decompress_block( block_data, data, end, lsb2word( ptr + offset + 15 ), length ); - if( error ) { libspectrum_free( block_data ); libspectrum_free( block ); return error; } + if( error ) { + libspectrum_free( block_data ); libspectrum_free( block ); return error; + } } else { /* Uncompressed block: just copy the data across */ memcpy( block_data, data, length ); @@ -568,9 +570,45 @@ libspectrum_tape_block_set_bits_in_last_byte( block, status.bits.bits_used + 1 ); - /* Put the block into the block list */ - libspectrum_tape_append_block( tape, block ); + /* Warajevo TAPs have a relatively short limit on RAW blocks of 64995 bytes + which is only 11.74 secs at 44100Hz. + As a result when these blocks are used they often are a sequence of these + short blocks as opposed to other formats which have a long single block + corresponding to the sampled section of tape. + + This presents a problem for libspectrum which assumes that a pulse cannot + span two different blocks, so we will work around this limitation by + coalesing adjacent compatible RAW blocks to ensure the pulse structure is + preserved. + */ + + /* Check if the last block was also a raw block of the same sample rate + and with all 8 bits used in the last byte */ + libspectrum_tape_block *last_block = libspectrum_tape_peek_last_block( tape ); + if( last_block && + libspectrum_tape_block_type( last_block ) == + LIBSPECTRUM_TAPE_BLOCK_RAW_DATA && + libspectrum_tape_block_bit_length( last_block ) == bit_length && + libspectrum_tape_block_bits_in_last_byte( last_block ) == 8 ) { + /* Combine the two blocks */ + size_t new_length = libspectrum_tape_block_data_length( last_block ) + + length; + block_data = libspectrum_realloc( libspectrum_tape_block_data( last_block ), + new_length * sizeof( libspectrum_byte ) ); + + memcpy( block_data + libspectrum_tape_block_data_length( last_block ), + libspectrum_tape_block_data( block ), length ); + libspectrum_tape_block_set_data( last_block, block_data ); + libspectrum_tape_block_set_data_length( last_block, new_length ); + libspectrum_tape_block_set_bits_in_last_byte( last_block, + status.bits.bits_used + 1 ); + libspectrum_tape_block_free( block ); + } else { + /* Put the block into the block list */ + libspectrum_tape_append_block( tape, block ); + } + /* And return with no error */ return LIBSPECTRUM_ERROR_NONE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2009-09-01 11:49:25
|
Revision: 4076 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4076&view=rev Author: fredm Date: 2009-09-01 11:49:17 +0000 (Tue, 01 Sep 2009) Log Message: ----------- Give up if file decompression fails. Modified Paths: -------------- trunk/libspectrum/dck.c trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/rzx.c trunk/libspectrum/snapshot.c trunk/libspectrum/tape.c Modified: trunk/libspectrum/dck.c =================================================================== --- trunk/libspectrum/dck.c 2009-08-31 19:41:41 UTC (rev 4075) +++ trunk/libspectrum/dck.c 2009-09-01 11:49:17 UTC (rev 4076) @@ -131,6 +131,7 @@ error = libspectrum_uncompress_file( &new_buffer, &new_length, NULL, raw_type, buffer, length, NULL ); + if( error ) return error; buffer = new_buffer; length = new_length; } Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2009-08-31 19:41:41 UTC (rev 4075) +++ trunk/libspectrum/hacking/ChangeLog 2009-09-01 11:49:17 UTC (rev 4076) @@ -734,4 +734,6 @@ samples (e.g. BRUCELEE.TAP) (Fred). 20090729 accessor.pl,libspectrum.c,libspectrum.h.in,sna.c,snap_accessors.txt, snapshot.c,szx.c,z80.c: add snapshot support for Opus Discovery - (Fred & Gergely) + (Fred & Gergely). +20090901 dck.c,rzx.c,snapshot.c,tape.c: give up if file decompression fails + (Fred). Modified: trunk/libspectrum/rzx.c =================================================================== --- trunk/libspectrum/rzx.c 2009-08-31 19:41:41 UTC (rev 4075) +++ trunk/libspectrum/rzx.c 2009-09-01 11:49:17 UTC (rev 4076) @@ -691,6 +691,7 @@ error = libspectrum_uncompress_file( &new_buffer, &new_length, NULL, raw_type, buffer, length, NULL ); + if( error ) return error; buffer = new_buffer; length = new_length; uncompressed = 1; } Modified: trunk/libspectrum/snapshot.c =================================================================== --- trunk/libspectrum/snapshot.c 2009-08-31 19:41:41 UTC (rev 4075) +++ trunk/libspectrum/snapshot.c 2009-09-01 11:49:17 UTC (rev 4076) @@ -303,6 +303,7 @@ error = libspectrum_uncompress_file( &new_buffer, &new_length, NULL, raw_type, buffer, length, NULL ); + if( error ) return error; buffer = new_buffer; length = new_length; uncompressed = 1; } Modified: trunk/libspectrum/tape.c =================================================================== --- trunk/libspectrum/tape.c 2009-08-31 19:41:41 UTC (rev 4075) +++ trunk/libspectrum/tape.c 2009-09-01 11:49:17 UTC (rev 4076) @@ -196,6 +196,7 @@ error = libspectrum_uncompress_file( &new_buffer, &new_length, NULL, raw_type, buffer, length, NULL ); + if( error ) return error; buffer = new_buffer; length = new_length; uncompressed = 1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2009-09-01 13:05:59
|
Revision: 4077 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4077&view=rev Author: fredm Date: 2009-09-01 13:05:45 +0000 (Tue, 01 Sep 2009) Log Message: ----------- Remove unused uncompressed variable. Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/rzx.c trunk/libspectrum/snapshot.c trunk/libspectrum/tape.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2009-09-01 11:49:17 UTC (rev 4076) +++ trunk/libspectrum/hacking/ChangeLog 2009-09-01 13:05:45 UTC (rev 4077) @@ -737,3 +737,4 @@ (Fred & Gergely). 20090901 dck.c,rzx.c,snapshot.c,tape.c: give up if file decompression fails (Fred). +20090901 rzx.c,snapshot.c,tape.c: remove unused uncompressed variable (Fred). Modified: trunk/libspectrum/rzx.c =================================================================== --- trunk/libspectrum/rzx.c 2009-09-01 11:49:17 UTC (rev 4076) +++ trunk/libspectrum/rzx.c 2009-09-01 13:05:45 UTC (rev 4077) @@ -671,13 +671,12 @@ { libspectrum_error error; const libspectrum_byte *ptr, *end; - int uncompressed; libspectrum_byte *new_buffer; libspectrum_id_t raw_type; libspectrum_class_t class; /* Find out if this file needs decompression */ - uncompressed = 0; new_buffer = NULL; + new_buffer = NULL; error = libspectrum_identify_file_raw( &raw_type, NULL, buffer, length ); if( error ) return error; @@ -693,7 +692,6 @@ raw_type, buffer, length, NULL ); if( error ) return error; buffer = new_buffer; length = new_length; - uncompressed = 1; } ptr = buffer; end = buffer + length; Modified: trunk/libspectrum/snapshot.c =================================================================== --- trunk/libspectrum/snapshot.c 2009-09-01 11:49:17 UTC (rev 4076) +++ trunk/libspectrum/snapshot.c 2009-09-01 13:05:45 UTC (rev 4077) @@ -262,7 +262,6 @@ libspectrum_class_t class; libspectrum_byte *new_buffer; libspectrum_error error; - int uncompressed; /* If we don't know what sort of file this is, make a best guess */ if( type == LIBSPECTRUM_ID_UNKNOWN ) { @@ -289,7 +288,7 @@ } /* Find out if this file needs decompression */ - uncompressed = 0; new_buffer = NULL; + new_buffer = NULL; error = libspectrum_identify_file_raw( &raw_type, filename, buffer, length ); if( error ) return error; @@ -305,7 +304,6 @@ raw_type, buffer, length, NULL ); if( error ) return error; buffer = new_buffer; length = new_length; - uncompressed = 1; } switch( type ) { Modified: trunk/libspectrum/tape.c =================================================================== --- trunk/libspectrum/tape.c 2009-09-01 11:49:17 UTC (rev 4076) +++ trunk/libspectrum/tape.c 2009-09-01 13:05:45 UTC (rev 4077) @@ -164,7 +164,6 @@ libspectrum_class_t class; libspectrum_byte *new_buffer; libspectrum_error error; - int uncompressed; /* If we don't know what sort of file this is, make a best guess */ if( type == LIBSPECTRUM_ID_UNKNOWN ) { @@ -182,7 +181,7 @@ } /* Find out if this file needs decompression */ - uncompressed = 0; new_buffer = NULL; + new_buffer = NULL; error = libspectrum_identify_file_raw( &raw_type, filename, buffer, length ); if( error ) return error; @@ -198,7 +197,6 @@ raw_type, buffer, length, NULL ); if( error ) return error; buffer = new_buffer; length = new_length; - uncompressed = 1; } switch( type ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2009-09-01 13:26:53
|
Revision: 4078 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4078&view=rev Author: fredm Date: 2009-09-01 13:26:45 +0000 (Tue, 01 Sep 2009) Log Message: ----------- Remove unused buffer modification in libspectrum_plusd_read_header. Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/plusd.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2009-09-01 13:05:45 UTC (rev 4077) +++ trunk/libspectrum/hacking/ChangeLog 2009-09-01 13:26:45 UTC (rev 4078) @@ -738,3 +738,5 @@ 20090901 dck.c,rzx.c,snapshot.c,tape.c: give up if file decompression fails (Fred). 20090901 rzx.c,snapshot.c,tape.c: remove unused uncompressed variable (Fred). +20090901 plusd.c: remove unused buffer modification in + libspectrum_plusd_read_header (Fred). Modified: trunk/libspectrum/plusd.c =================================================================== --- trunk/libspectrum/plusd.c 2009-09-01 13:05:45 UTC (rev 4077) +++ trunk/libspectrum/plusd.c 2009-09-01 13:26:45 UTC (rev 4078) @@ -108,8 +108,6 @@ /* Make a guess at the interrupt mode depending on what I was set to */ libspectrum_snap_set_im( snap, ( i == 0 || i == 63 ) ? 1 : 2 ); - buffer += PLUSD_HEADER_LENGTH; - return LIBSPECTRUM_ERROR_NONE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2009-09-01 13:30:56
|
Revision: 4079 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4079&view=rev Author: fredm Date: 2009-09-01 13:30:50 +0000 (Tue, 01 Sep 2009) Log Message: ----------- Remove unused block_size initialisation. Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/szx.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2009-09-01 13:26:45 UTC (rev 4078) +++ trunk/libspectrum/hacking/ChangeLog 2009-09-01 13:30:50 UTC (rev 4079) @@ -740,3 +740,4 @@ 20090901 rzx.c,snapshot.c,tape.c: remove unused uncompressed variable (Fred). 20090901 plusd.c: remove unused buffer modification in libspectrum_plusd_read_header (Fred). +20090901 szx.c: remove unused block_size initialisation (Fred). Modified: trunk/libspectrum/szx.c =================================================================== --- trunk/libspectrum/szx.c 2009-09-01 13:26:45 UTC (rev 4078) +++ trunk/libspectrum/szx.c 2009-09-01 13:30:50 UTC (rev 4079) @@ -2829,8 +2829,6 @@ compressed_rom_data = NULL; - block_size = 0; - #ifdef HAVE_ZLIB_H if( rom_data && compress ) { @@ -2899,8 +2897,6 @@ compressed_ram_data = compressed_rom_data = NULL; - block_size = 0; - #ifdef HAVE_ZLIB_H if( compress ) { @@ -2993,8 +2989,6 @@ compressed_ram_data = compressed_rom_data = NULL; - block_size = 0; - #ifdef HAVE_ZLIB_H if( compress ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2009-09-02 11:45:47
|
Revision: 4080 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4080&view=rev Author: fredm Date: 2009-09-02 11:45:36 +0000 (Wed, 02 Sep 2009) Log Message: ----------- Return error from libspectrum_plusd_read_data. Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/plusd.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2009-09-01 13:30:50 UTC (rev 4079) +++ trunk/libspectrum/hacking/ChangeLog 2009-09-02 11:45:36 UTC (rev 4080) @@ -741,3 +741,4 @@ 20090901 plusd.c: remove unused buffer modification in libspectrum_plusd_read_header (Fred). 20090901 szx.c: remove unused block_size initialisation (Fred). +20090902 plusd.c: return error from libspectrum_plusd_read_data (Fred). Modified: trunk/libspectrum/plusd.c =================================================================== --- trunk/libspectrum/plusd.c 2009-09-01 13:30:50 UTC (rev 4079) +++ trunk/libspectrum/plusd.c 2009-09-02 11:45:36 UTC (rev 4080) @@ -61,7 +61,7 @@ buffer += PLUSD_HEADER_LENGTH; error = libspectrum_plusd_read_data( buffer, snap ); - if( error != LIBSPECTRUM_ERROR_NONE ); + if( error != LIBSPECTRUM_ERROR_NONE ) return error; return LIBSPECTRUM_ERROR_NONE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2009-09-12 10:54:46
|
Revision: 4093 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4093&view=rev Author: fredm Date: 2009-09-12 10:54:32 +0000 (Sat, 12 Sep 2009) Log Message: ----------- libspectrum was reading and writing AF and AF' in the wrong order in SZX files (fixes bug #2857419; thanks, velesoft). Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/szx.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2009-09-03 12:38:38 UTC (rev 4092) +++ trunk/libspectrum/hacking/ChangeLog 2009-09-12 10:54:32 UTC (rev 4093) @@ -742,3 +742,5 @@ libspectrum_plusd_read_header (Fred). 20090901 szx.c: remove unused block_size initialisation (Fred). 20090902 plusd.c: return error from libspectrum_plusd_read_data (Fred). +20090912 szx.c: libspectrum was reading and writing AF and AF' in the wrong + order in SZX files (fixes bug #2857419; thanks, velesoft) (Fred). Modified: trunk/libspectrum/szx.c =================================================================== --- trunk/libspectrum/szx.c 2009-09-03 12:38:38 UTC (rev 4092) +++ trunk/libspectrum/szx.c 2009-09-12 10:54:32 UTC (rev 4093) @@ -1205,14 +1205,14 @@ return LIBSPECTRUM_ERROR_UNKNOWN; } + libspectrum_snap_set_f ( snap, **buffer ); (*buffer)++; libspectrum_snap_set_a ( snap, **buffer ); (*buffer)++; - libspectrum_snap_set_f ( snap, **buffer ); (*buffer)++; libspectrum_snap_set_bc ( snap, libspectrum_read_word( buffer ) ); libspectrum_snap_set_de ( snap, libspectrum_read_word( buffer ) ); libspectrum_snap_set_hl ( snap, libspectrum_read_word( buffer ) ); + libspectrum_snap_set_f_ ( snap, **buffer ); (*buffer)++; libspectrum_snap_set_a_ ( snap, **buffer ); (*buffer)++; - libspectrum_snap_set_f_ ( snap, **buffer ); (*buffer)++; libspectrum_snap_set_bc_ ( snap, libspectrum_read_word( buffer ) ); libspectrum_snap_set_de_ ( snap, libspectrum_read_word( buffer ) ); libspectrum_snap_set_hl_ ( snap, libspectrum_read_word( buffer ) ); @@ -2229,14 +2229,14 @@ write_chunk_header( buffer, ptr, length, ZXSTBID_Z80REGS, 37 ); + *(*ptr)++ = libspectrum_snap_f ( snap ); *(*ptr)++ = libspectrum_snap_a ( snap ); - *(*ptr)++ = libspectrum_snap_f ( snap ); libspectrum_write_word( ptr, libspectrum_snap_bc ( snap ) ); libspectrum_write_word( ptr, libspectrum_snap_de ( snap ) ); libspectrum_write_word( ptr, libspectrum_snap_hl ( snap ) ); + *(*ptr)++ = libspectrum_snap_f_( snap ); *(*ptr)++ = libspectrum_snap_a_( snap ); - *(*ptr)++ = libspectrum_snap_f_( snap ); libspectrum_write_word( ptr, libspectrum_snap_bc_ ( snap ) ); libspectrum_write_word( ptr, libspectrum_snap_de_ ( snap ) ); libspectrum_write_word( ptr, libspectrum_snap_hl_ ( snap ) ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2010-01-15 13:43:22
|
Revision: 4113 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4113&view=rev Author: fredm Date: 2010-01-15 13:43:15 +0000 (Fri, 15 Jan 2010) Log Message: ----------- Export libspectrum_zlib_inflate() and libspectrum_zlib_compress() (patch #2927624) (Gergely Szasz and Fred). Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/internals.h trunk/libspectrum/libspectrum.h.in trunk/libspectrum/make-perl.c trunk/libspectrum/szx.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-01-08 11:03:43 UTC (rev 4112) +++ trunk/libspectrum/hacking/ChangeLog 2010-01-15 13:43:15 UTC (rev 4113) @@ -746,3 +746,6 @@ order in SZX files (fixes bug #2857419; thanks, velesoft) (Fred). 20091022 wav.c: we expect mono sound files, tell audiofile to make the required adjustments (fixes bug #2883135; thanks, Gilberto Almeida) (Fred). +20100116 internals.h,libspectrum.h.in,make-perl.c,szx.c: export + libspectrum_zlib_inflate() and libspectrum_zlib_compress() (patch + #2927624) (Gergely Szasz and Fred). Modified: trunk/libspectrum/internals.h =================================================================== --- trunk/libspectrum/internals.h 2010-01-08 11:03:43 UTC (rev 4112) +++ trunk/libspectrum/internals.h 2010-01-15 13:43:15 UTC (rev 4113) @@ -81,13 +81,6 @@ size_t old_length, const char *old_filename ); libspectrum_error -libspectrum_zlib_inflate( const libspectrum_byte *gzptr, size_t gzlength, - libspectrum_byte **outptr, size_t *outlength ); -libspectrum_error -libspectrum_zlib_compress( const libspectrum_byte *data, size_t length, - libspectrum_byte **gzptr, size_t *gzlength ); - -libspectrum_error libspectrum_gzip_inflate( const libspectrum_byte *gzptr, size_t gzlength, libspectrum_byte **outptr, size_t *outlength ); Modified: trunk/libspectrum/libspectrum.h.in =================================================================== --- trunk/libspectrum/libspectrum.h.in 2010-01-08 11:03:43 UTC (rev 4112) +++ trunk/libspectrum/libspectrum.h.in 2010-01-15 13:43:15 UTC (rev 4113) @@ -70,9 +70,6 @@ /* glib replacement (if necessary) */ LIBSPECTRUM_GLIB_REPLACEMENT -/* Library capabilities */ -LIBSPECTRUM_CAPABILITIES - /* * General libspectrum routines */ @@ -97,6 +94,9 @@ } libspectrum_error; +/* Library capabilities */ +LIBSPECTRUM_CAPABILITIES + /* Initialisation */ libspectrum_error WIN32_DLL libspectrum_init( void ); Modified: trunk/libspectrum/make-perl.c =================================================================== --- trunk/libspectrum/make-perl.c 2010-01-08 11:03:43 UTC (rev 4112) +++ trunk/libspectrum/make-perl.c 2010-01-15 13:43:15 UTC (rev 4113) @@ -292,7 +292,14 @@ #ifdef HAVE_ZLIB_H printf( "\n/* we support snapshots etc. requiring zlib (e.g. compressed szx) */\n" ); - printf( "#define LIBSPECTRUM_SUPPORTS_ZLIB_COMPRESSION (1)\n" ); + printf( "#define LIBSPECTRUM_SUPPORTS_ZLIB_COMPRESSION (1)\n\n" ); + printf( "/* zlib (de)compression routines */\n\n" ); + printf( "libspectrum_error WIN32_DLL\n" ); + printf( "libspectrum_zlib_inflate( const libspectrum_byte *gzptr, size_t gzlength,\n" ); + printf( " libspectrum_byte **outptr, size_t *outlength );\n\n" ); + printf( "libspectrum_error WIN32_DLL\n" ); + printf( "libspectrum_zlib_compress( const libspectrum_byte *data, size_t length,\n" ); + printf( " libspectrum_byte **gzptr, size_t *gzlength );\n\n" ); #endif /* #ifdef HAVE_ZLIB_H */ Modified: trunk/libspectrum/szx.c =================================================================== --- trunk/libspectrum/szx.c 2010-01-08 11:03:43 UTC (rev 4112) +++ trunk/libspectrum/szx.c 2010-01-15 13:43:15 UTC (rev 4113) @@ -408,7 +408,9 @@ const libspectrum_byte **buffer, const libspectrum_byte *end GCC_UNUSED, size_t data_length ) { +#ifdef HAVE_ZLIB_H libspectrum_error error; +#endif libspectrum_byte *rom_data = NULL; libspectrum_dword flags; const size_t expected_length = 0x4000; @@ -501,7 +503,9 @@ const libspectrum_byte **buffer, const libspectrum_byte *end GCC_UNUSED, size_t data_length ) { +#ifdef HAVE_ZLIB_H libspectrum_error error; +#endif libspectrum_byte *ram_data = NULL, *rom_data = NULL; libspectrum_dword flags; size_t disc_ram_length; @@ -690,7 +694,9 @@ const libspectrum_byte **buffer, const libspectrum_byte *end GCC_UNUSED, size_t data_length ) { +#ifdef HAVE_ZLIB_H libspectrum_error error; +#endif libspectrum_byte *ram_data = NULL, *rom_data = NULL; libspectrum_byte rom_type; libspectrum_dword flags; @@ -1664,7 +1670,9 @@ const libspectrum_byte **buffer, const libspectrum_byte *end GCC_UNUSED, size_t data_length ) { +#ifdef HAVE_ZLIB_H libspectrum_error error; +#endif libspectrum_word flags; libspectrum_byte *eprom_data = NULL; const size_t expected_length = 0x2000; @@ -2429,7 +2437,9 @@ write_rom_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, size_t *length, int *out_flags, libspectrum_snap *snap, int compress ) { +#ifdef HAVE_ZLIB_H libspectrum_error error; +#endif size_t i, data_length = 0; size_t uncompressed_data_length = 0; libspectrum_byte *data, *rom_base; @@ -2640,7 +2650,9 @@ size_t *length, const char *id, const libspectrum_byte *data, size_t data_length, int page, int compress, int extra_flags ) { +#ifdef HAVE_ZLIB_H libspectrum_error error; +#endif libspectrum_byte *block_length, *flags, *compressed_data; int use_compression; @@ -2734,7 +2746,9 @@ write_b128_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, size_t *length, libspectrum_snap *snap, int compress ) { +#ifdef HAVE_ZLIB_H libspectrum_error error; +#endif libspectrum_byte *rom_data = NULL; libspectrum_byte *compressed_rom_data = NULL; size_t block_size; @@ -2802,7 +2816,9 @@ write_if1_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, size_t *length, libspectrum_snap *snap, int compress ) { +#ifdef HAVE_ZLIB_H libspectrum_error error; +#endif libspectrum_byte *rom_data = NULL; libspectrum_byte *compressed_rom_data = NULL; size_t block_size; @@ -2883,7 +2899,9 @@ write_opus_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, size_t *length, libspectrum_snap *snap, int compress ) { +#ifdef HAVE_ZLIB_H libspectrum_error error; +#endif libspectrum_byte *rom_data, *ram_data; libspectrum_byte *compressed_rom_data = NULL, *compressed_ram_data = NULL; size_t disk_rom_length, disk_ram_length, block_size; @@ -2975,7 +2993,9 @@ write_plsd_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, size_t *length, libspectrum_snap *snap, int compress ) { +#ifdef HAVE_ZLIB_H libspectrum_error error; +#endif libspectrum_byte *rom_data, *ram_data; libspectrum_byte *compressed_rom_data = NULL, *compressed_ram_data = NULL; size_t disk_rom_length, disk_ram_length, block_size; @@ -3209,7 +3229,9 @@ write_dide_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, size_t *length, libspectrum_snap *snap, int compress ) { +#ifdef HAVE_ZLIB_H libspectrum_error error; +#endif libspectrum_byte *eprom_data = NULL; libspectrum_byte *compressed_eprom_data = NULL; size_t block_size; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2010-02-21 04:32:30
|
Revision: 4117 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4117&view=rev Author: fredm Date: 2010-02-21 04:32:23 +0000 (Sun, 21 Feb 2010) Log Message: ----------- Correct switch variable name (part of patch #2533274) (Simon Owen). Modified Paths: -------------- trunk/libspectrum/dll.c trunk/libspectrum/hacking/ChangeLog Modified: trunk/libspectrum/dll.c =================================================================== --- trunk/libspectrum/dll.c 2010-02-14 23:10:49 UTC (rev 4116) +++ trunk/libspectrum/dll.c 2010-02-21 04:32:23 UTC (rev 4117) @@ -30,7 +30,7 @@ BOOL APIENTRY DllMain( HANDLE module, DWORD reason, LPVOID opaque ) { - switch( ul_reason_for_call ) { + switch( reason ) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-02-14 23:10:49 UTC (rev 4116) +++ trunk/libspectrum/hacking/ChangeLog 2010-02-21 04:32:23 UTC (rev 4117) @@ -749,3 +749,5 @@ 20100116 internals.h,libspectrum.h.in,make-perl.c,szx.c: export libspectrum_zlib_inflate() and libspectrum_zlib_compress() (patch #2927624) (Gergely Szasz and Fred). +20100221 dll.c: correct switch variable name (part of patch #2533274) (Simon + Owen). This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2010-02-21 04:36:23
|
Revision: 4118 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4118&view=rev Author: fredm Date: 2010-02-21 04:36:17 +0000 (Sun, 21 Feb 2010) Log Message: ----------- Don't declare variables mid-block for C89 (part of patch #2533274) (Simon Owen). Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/warajevo_read.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-02-21 04:32:23 UTC (rev 4117) +++ trunk/libspectrum/hacking/ChangeLog 2010-02-21 04:36:17 UTC (rev 4118) @@ -751,3 +751,5 @@ #2927624) (Gergely Szasz and Fred). 20100221 dll.c: correct switch variable name (part of patch #2533274) (Simon Owen). +20100221 warajevo_read.c: don't declare variables mid-block for C89 (part of + patch #2533274) (Simon Owen). Modified: trunk/libspectrum/warajevo_read.c =================================================================== --- trunk/libspectrum/warajevo_read.c 2010-02-21 04:32:23 UTC (rev 4117) +++ trunk/libspectrum/warajevo_read.c 2010-02-21 04:36:17 UTC (rev 4118) @@ -511,6 +511,7 @@ { libspectrum_tape_block *block = libspectrum_tape_block_alloc( LIBSPECTRUM_TAPE_BLOCK_RAW_DATA ); + libspectrum_tape_block *last_block; libspectrum_error error; libspectrum_word compressed_size, decompressed_size; const libspectrum_byte *data = ptr + offset + 17; @@ -585,7 +586,7 @@ /* Check if the last block was also a raw block of the same sample rate and with all 8 bits used in the last byte */ - libspectrum_tape_block *last_block = libspectrum_tape_peek_last_block( tape ); + last_block = libspectrum_tape_peek_last_block( tape ); if( last_block && libspectrum_tape_block_type( last_block ) == LIBSPECTRUM_TAPE_BLOCK_RAW_DATA && This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2010-02-21 04:40:43
|
Revision: 4119 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4119&view=rev Author: fredm Date: 2010-02-21 04:40:36 +0000 (Sun, 21 Feb 2010) Log Message: ----------- Should use libspectrum_dword instead of uint32_t (part of patch #2533274) (Simon Owen). Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/myglib/ghash.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-02-21 04:36:17 UTC (rev 4118) +++ trunk/libspectrum/hacking/ChangeLog 2010-02-21 04:40:36 UTC (rev 4119) @@ -753,3 +753,5 @@ Owen). 20100221 warajevo_read.c: don't declare variables mid-block for C89 (part of patch #2533274) (Simon Owen). +20100221 myglib/ghash.c: should use libspectrum_dword instead of uint32_t (part + of patch #2533274) (Simon Owen). Modified: trunk/libspectrum/myglib/ghash.c =================================================================== --- trunk/libspectrum/myglib/ghash.c 2010-02-21 04:36:17 UTC (rev 4118) +++ trunk/libspectrum/myglib/ghash.c 2010-02-21 04:40:36 UTC (rev 4119) @@ -254,7 +254,7 @@ { /* 31 bit hash function */ const signed char *p = v; - uint32_t h = *p; + libspectrum_dword h = *p; if (h) for (p += 1; *p != '\0'; p++) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2010-02-21 05:07:03
|
Revision: 4120 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4120&view=rev Author: fredm Date: 2010-02-21 05:06:56 +0000 (Sun, 21 Feb 2010) Log Message: ----------- WIN32_DLL [__declspec(dllexport)] should be before the return type in declarations, rather than between return type and function name (part of patch #2533274) (Simon Owen). Modified Paths: -------------- trunk/libspectrum/generate.pl.in trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/libspectrum.h.in trunk/libspectrum/make-perl.c Modified: trunk/libspectrum/generate.pl.in =================================================================== --- trunk/libspectrum/generate.pl.in 2010-02-21 04:40:36 UTC (rev 4119) +++ trunk/libspectrum/generate.pl.in 2010-02-21 05:06:56 UTC (rev 4120) @@ -17,23 +17,23 @@ my $return_type; if( $type =~ /^(.*)\*/ ) { - $return_type = "$1 WIN32_DLL *"; + $return_type = "WIN32_DLL $1 *"; } else { - $return_type = "$type WIN32_DLL"; + $return_type = "WIN32_DLL $type"; } if( $indexed ) { print << "CODE"; $return_type libspectrum_snap_$name( libspectrum_snap *snap, int idx ); -void WIN32_DLL libspectrum_snap_set_$name( libspectrum_snap *snap, int idx, $type $name ); +WIN32_DLL void libspectrum_snap_set_$name( libspectrum_snap *snap, int idx, $type $name ); CODE } else { print << "CODE"; $return_type libspectrum_snap_$name( libspectrum_snap *snap ); -void WIN32_DLL libspectrum_snap_set_$name( libspectrum_snap *snap, $type $name ); +WIN32_DLL void libspectrum_snap_set_$name( libspectrum_snap *snap, $type $name ); CODE } @@ -59,23 +59,23 @@ my $return_type; if( $type =~ /^(.*)\*/ ) { - $return_type = "$1 WIN32_DLL *"; + $return_type = "WIN32_DLL $1 *"; } else { - $return_type = "$type WIN32_DLL"; + $return_type = "WIN32_DLL $type"; } if( $indexed ) { print << "CODE"; $return_type libspectrum_tape_block_$name( libspectrum_tape_block *block, size_t idx ); -libspectrum_error WIN32_DLL libspectrum_tape_block_set_$name( libspectrum_tape_block *block, $type \*$name ); +WIN32_DLL libspectrum_error libspectrum_tape_block_set_$name( libspectrum_tape_block *block, $type \*$name ); CODE } else { print << "CODE"; $return_type libspectrum_tape_block_$name( libspectrum_tape_block *block ); -libspectrum_error WIN32_DLL libspectrum_tape_block_set_$name( libspectrum_tape_block *block, $type $name ); +WIN32_DLL libspectrum_error libspectrum_tape_block_set_$name( libspectrum_tape_block *block, $type $name ); CODE } Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-02-21 04:40:36 UTC (rev 4119) +++ trunk/libspectrum/hacking/ChangeLog 2010-02-21 05:06:56 UTC (rev 4120) @@ -755,3 +755,7 @@ patch #2533274) (Simon Owen). 20100221 myglib/ghash.c: should use libspectrum_dword instead of uint32_t (part of patch #2533274) (Simon Owen). +20100221 generate.pl.in,libspectrum.h.in,make-perl.c: WIN32_DLL + [__declspec(dllexport)] should be before the return type in + declarations, rather than between return type and function name (part + of patch #2533274) (Simon Owen). Modified: trunk/libspectrum/libspectrum.h.in =================================================================== --- trunk/libspectrum/libspectrum.h.in 2010-02-21 04:40:36 UTC (rev 4119) +++ trunk/libspectrum/libspectrum.h.in 2010-02-21 05:06:56 UTC (rev 4120) @@ -99,22 +99,22 @@ /* Initialisation */ -libspectrum_error WIN32_DLL libspectrum_init( void ); +WIN32_DLL libspectrum_error libspectrum_init( void ); /* Version checking */ -int WIN32_DLL libspectrum_check_version( const char *version ); -const char WIN32_DLL *libspectrum_version( void ); -const char WIN32_DLL *libspectrum_gcrypt_version( void ); +WIN32_DLL int libspectrum_check_version( const char *version ); +WIN32_DLL const char *libspectrum_version( void ); +WIN32_DLL const char *libspectrum_gcrypt_version( void ); /* Error handling */ typedef libspectrum_error (*libspectrum_error_function_t)( libspectrum_error error, const char *format, va_list ap ); -extern libspectrum_error_function_t WIN32_DLL libspectrum_error_function; +extern WIN32_DLL libspectrum_error_function_t libspectrum_error_function; -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_default_error_function( libspectrum_error error, const char *format, va_list ap ); @@ -132,12 +132,12 @@ libspectrum_free_fn_t free; } libspectrum_mem_vtable_t; -void* WIN32_DLL libspectrum_malloc( size_t size ); -void* WIN32_DLL libspectrum_calloc( size_t nmemb, size_t size ); -void* WIN32_DLL libspectrum_realloc( void *ptr, size_t size ); -void WIN32_DLL libspectrum_free( void *ptr ); +WIN32_DLL void* libspectrum_malloc( size_t size ); +WIN32_DLL void* libspectrum_calloc( size_t nmemb, size_t size ); +WIN32_DLL void* libspectrum_realloc( void *ptr, size_t size ); +WIN32_DLL void libspectrum_free( void *ptr ); -void WIN32_DLL libspectrum_mem_set_vtable( libspectrum_mem_vtable_t *table ); +WIN32_DLL void libspectrum_mem_set_vtable( libspectrum_mem_vtable_t *table ); /* Attempt to identify a given file */ @@ -248,20 +248,20 @@ } libspectrum_class_t; -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_identify_file( libspectrum_id_t *type, const char *filename, const unsigned char *buffer, size_t length ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_identify_file_with_class( libspectrum_id_t *type, libspectrum_class_t *libspectrum_class, const char *filename, const unsigned char *buffer, size_t length ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_identify_file_raw( libspectrum_id_t *type, const char *filename, const unsigned char *buffer, size_t length ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_identify_class( libspectrum_class_t *libspectrum_class, libspectrum_id_t type ); @@ -296,122 +296,122 @@ } libspectrum_machine; -const char* WIN32_DLL libspectrum_machine_name( libspectrum_machine type ); +WIN32_DLL const char* libspectrum_machine_name( libspectrum_machine type ); /* The various capabilities of the different machines */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_AY; /* AY-3-8192 */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_128_MEMORY; /* 128-style memory paging */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_PLUS3_MEMORY; /* +3-style memory paging */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_PLUS3_DISK; /* +3-style disk drive */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_TIMEX_MEMORY; /* Timex-style memory paging */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_TIMEX_VIDEO; /* Timex-style video modes */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_TRDOS_DISK; /* TRDOS-style disk drive */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_TIMEX_DOCK; /* T[SC]2068-style cartridge port */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_SINCLAIR_JOYSTICK; /* Sinclair-style joystick ports */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_KEMPSTON_JOYSTICK; /* Kempston-style joystick ports */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_SCORP_MEMORY; /* Scorpion-style memory paging */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_EVEN_M1; /* M1 cycles always start on even tstate counts */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_SE_MEMORY; /* SE-style memory paging */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_NTSC; /* NTSC display */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_PENT512_MEMORY; /* Pentagon 512 memory paging */ -extern const int WIN32_DLL +extern WIN32_DLL const int LIBSPECTRUM_MACHINE_CAPABILITY_PENT1024_MEMORY; /* Pentagon 1024 memory paging */ /* Get the capabilities of a machine */ -int WIN32_DLL libspectrum_machine_capabilities( libspectrum_machine type ); +WIN32_DLL int libspectrum_machine_capabilities( libspectrum_machine type ); /* Get the timings of a machine */ -libspectrum_dword WIN32_DLL +WIN32_DLL libspectrum_dword libspectrum_timings_processor_speed( libspectrum_machine machine ); -libspectrum_dword WIN32_DLL +WIN32_DLL libspectrum_dword libspectrum_timings_ay_speed( libspectrum_machine machine ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_timings_left_border( libspectrum_machine machine ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_timings_horizontal_screen( libspectrum_machine machine ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_timings_right_border( libspectrum_machine machine ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_timings_horizontal_retrace( libspectrum_machine machine ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_timings_top_border( libspectrum_machine machine ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_timings_vertical_screen( libspectrum_machine machine ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_timings_bottom_border( libspectrum_machine machine ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_timings_vertical_retrace( libspectrum_machine machine ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_timings_interrupt_length( libspectrum_machine machine ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_timings_top_left_pixel( libspectrum_machine machine ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_timings_tstates_per_line( libspectrum_machine machine ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_timings_lines_per_frame( libspectrum_machine machine ); -libspectrum_dword WIN32_DLL +WIN32_DLL libspectrum_dword libspectrum_timings_tstates_per_frame( libspectrum_machine machine ); /* Creator information */ typedef struct libspectrum_creator libspectrum_creator; -libspectrum_creator* WIN32_DLL +WIN32_DLL libspectrum_creator* libspectrum_creator_alloc( void ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_creator_free( libspectrum_creator *creator ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_creator_set_program( libspectrum_creator *creator, const char *program ); -const char WIN32_DLL * +WIN32_DLL const char * libspectrum_creator_program( libspectrum_creator *creator ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_creator_set_major( libspectrum_creator *creator, libspectrum_word major ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_creator_major( libspectrum_creator *creator ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_creator_set_minor( libspectrum_creator *creator, libspectrum_word minor ); -libspectrum_word WIN32_DLL +WIN32_DLL libspectrum_word libspectrum_creator_minor( libspectrum_creator *creator ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_creator_set_competition_code( libspectrum_creator *creator, libspectrum_dword competition_code ); -libspectrum_dword WIN32_DLL +WIN32_DLL libspectrum_dword libspectrum_creator_competition_code( libspectrum_creator *creator ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_creator_set_custom( libspectrum_creator *creator, libspectrum_byte *data, size_t length ); -libspectrum_byte WIN32_DLL * +WIN32_DLL libspectrum_byte * libspectrum_creator_custom( libspectrum_creator *creator ); -size_t WIN32_DLL +WIN32_DLL size_t libspectrum_creator_custom_length( libspectrum_creator *creator ); /* @@ -420,29 +420,29 @@ typedef struct libspectrum_snap libspectrum_snap; -libspectrum_snap* WIN32_DLL libspectrum_snap_alloc( void ); -libspectrum_error WIN32_DLL libspectrum_snap_free( libspectrum_snap *snap ); +WIN32_DLL libspectrum_snap* libspectrum_snap_alloc( void ); +WIN32_DLL libspectrum_error libspectrum_snap_free( libspectrum_snap *snap ); /* Read in a snapshot, optionally guessing what type it is */ -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_snap_read( libspectrum_snap *snap, const libspectrum_byte *buffer, size_t length, libspectrum_id_t type, const char *filename ); /* Write a snapshot */ -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_snap_write( libspectrum_byte **buffer, size_t *length, int *out_flags, libspectrum_snap *snap, libspectrum_id_t type, libspectrum_creator *creator, int in_flags ); /* The flags that can be given to libspectrum_snap_write() */ -extern const int WIN32_DLL LIBSPECTRUM_FLAG_SNAPSHOT_NO_COMPRESSION; -extern const int WIN32_DLL LIBSPECTRUM_FLAG_SNAPSHOT_ALWAYS_COMPRESS; +extern WIN32_DLL const int LIBSPECTRUM_FLAG_SNAPSHOT_NO_COMPRESSION; +extern WIN32_DLL const int LIBSPECTRUM_FLAG_SNAPSHOT_ALWAYS_COMPRESS; /* The flags that may be returned from libspectrum_snap_write() */ -extern const int WIN32_DLL LIBSPECTRUM_FLAG_SNAPSHOT_MINOR_INFO_LOSS; -extern const int WIN32_DLL LIBSPECTRUM_FLAG_SNAPSHOT_MAJOR_INFO_LOSS; +extern WIN32_DLL const int LIBSPECTRUM_FLAG_SNAPSHOT_MINOR_INFO_LOSS; +extern WIN32_DLL const int LIBSPECTRUM_FLAG_SNAPSHOT_MAJOR_INFO_LOSS; /* The joystick types we can handle */ typedef enum libspectrum_joystick { @@ -459,12 +459,12 @@ } libspectrum_joystick; -const char* WIN32_DLL libspectrum_joystick_name( libspectrum_joystick type ); +WIN32_DLL const char* libspectrum_joystick_name( libspectrum_joystick type ); -extern const int WIN32_DLL LIBSPECTRUM_JOYSTICK_INPUT_NONE; -extern const int WIN32_DLL LIBSPECTRUM_JOYSTICK_INPUT_KEYBOARD; -extern const int WIN32_DLL LIBSPECTRUM_JOYSTICK_INPUT_JOYSTICK_1; -extern const int WIN32_DLL LIBSPECTRUM_JOYSTICK_INPUT_JOYSTICK_2; +extern WIN32_DLL const int LIBSPECTRUM_JOYSTICK_INPUT_NONE; +extern WIN32_DLL const int LIBSPECTRUM_JOYSTICK_INPUT_KEYBOARD; +extern WIN32_DLL const int LIBSPECTRUM_JOYSTICK_INPUT_JOYSTICK_1; +extern WIN32_DLL const int LIBSPECTRUM_JOYSTICK_INPUT_JOYSTICK_2; /* Accessor functions */ LIBSPECTRUM_SNAP_ACCESSORS @@ -521,15 +521,15 @@ typedef struct _GSList *libspectrum_tape_iterator; /* Some flags */ -extern const int WIN32_DLL LIBSPECTRUM_TAPE_FLAGS_BLOCK; /* End of block */ -extern const int WIN32_DLL LIBSPECTRUM_TAPE_FLAGS_STOP; /* Stop tape */ -extern const int WIN32_DLL LIBSPECTRUM_TAPE_FLAGS_STOP48; /* Stop tape if in 48K mode */ -extern const int WIN32_DLL LIBSPECTRUM_TAPE_FLAGS_NO_EDGE; /* Edge isn't really an edge */ -extern const int WIN32_DLL LIBSPECTRUM_TAPE_FLAGS_LEVEL_LOW; /* Set level low */ -extern const int WIN32_DLL LIBSPECTRUM_TAPE_FLAGS_LEVEL_HIGH; /* Set level high */ -extern const int WIN32_DLL LIBSPECTRUM_TAPE_FLAGS_LENGTH_SHORT; -extern const int WIN32_DLL LIBSPECTRUM_TAPE_FLAGS_LENGTH_LONG; -extern const int WIN32_DLL LIBSPECTRUM_TAPE_FLAGS_TAPE; /* Tape has finished */ +extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_BLOCK; /* End of block */ +extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_STOP; /* Stop tape */ +extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_STOP48; /* Stop tape if in 48K mode */ +extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_NO_EDGE; /* Edge isn't really an edge */ +extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_LEVEL_LOW; /* Set level low */ +extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_LEVEL_HIGH; /* Set level high */ +extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_LENGTH_SHORT; +extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_LENGTH_LONG; +extern WIN32_DLL const int LIBSPECTRUM_TAPE_FLAGS_TAPE; /* Tape has finished */ /* The states which a block can be in */ typedef enum libspectrum_tape_state_type { @@ -546,28 +546,28 @@ } libspectrum_tape_state_type; /* Routines to manipulate tape blocks */ -libspectrum_tape_block* WIN32_DLL +WIN32_DLL libspectrum_tape_block* libspectrum_tape_block_alloc( libspectrum_tape_type type ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_tape_block_free( libspectrum_tape_block *block ); -libspectrum_tape_type WIN32_DLL +WIN32_DLL libspectrum_tape_type libspectrum_tape_block_type( libspectrum_tape_block *block ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_tape_block_set_type( libspectrum_tape_block *block, libspectrum_tape_type type ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_tape_block_init( libspectrum_tape_block *block, libspectrum_tape_block_state *state ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_tape_block_description( char *buffer, size_t length, libspectrum_tape_block *block ); -int WIN32_DLL +WIN32_DLL int libspectrum_tape_block_metadata( libspectrum_tape_block *block ); -libspectrum_dword WIN32_DLL +WIN32_DLL libspectrum_dword libspectrum_tape_block_length( libspectrum_tape_block *block ); /* Accessor functions */ @@ -576,86 +576,86 @@ /* A linked list of tape blocks */ typedef struct libspectrum_tape libspectrum_tape; -libspectrum_tape* WIN32_DLL libspectrum_tape_alloc( void ); -libspectrum_error WIN32_DLL libspectrum_tape_clear( libspectrum_tape *tape ); -libspectrum_error WIN32_DLL libspectrum_tape_free( libspectrum_tape *tape ); +WIN32_DLL libspectrum_tape* libspectrum_tape_alloc( void ); +WIN32_DLL libspectrum_error libspectrum_tape_clear( libspectrum_tape *tape ); +WIN32_DLL libspectrum_error libspectrum_tape_free( libspectrum_tape *tape ); /* Read in a tape file, optionally guessing what sort of file it is */ -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_tape_read( libspectrum_tape *tape, const libspectrum_byte *buffer, size_t length, libspectrum_id_t type, const char *filename ); /* Write a tape file */ -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_tape_write( libspectrum_byte **buffer, size_t *length, libspectrum_tape *tape, libspectrum_id_t type ); /* Does this tape structure actually contain a tape? */ -int WIN32_DLL libspectrum_tape_present( const libspectrum_tape *tape ); +WIN32_DLL int libspectrum_tape_present( const libspectrum_tape *tape ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_tape_get_next_edge( libspectrum_dword *tstates, int *flags, libspectrum_tape *tape ); /* Get the current block from the tape */ -libspectrum_tape_block WIN32_DLL * +WIN32_DLL libspectrum_tape_block * libspectrum_tape_current_block( libspectrum_tape *tape ); /* Get the state of the active block on the tape */ -libspectrum_tape_state_type WIN32_DLL +WIN32_DLL libspectrum_tape_state_type libspectrum_tape_state( libspectrum_tape *tape ); /* Set the state of the active block on the tape */ -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_tape_set_state( libspectrum_tape *tape, libspectrum_tape_state_type state ); /* Peek at the next block on the tape */ -libspectrum_tape_block WIN32_DLL * +WIN32_DLL libspectrum_tape_block * libspectrum_tape_peek_next_block( libspectrum_tape *tape ); /* Peek at the last block on the tape */ -libspectrum_tape_block WIN32_DLL * +WIN32_DLL libspectrum_tape_block * libspectrum_tape_peek_last_block( libspectrum_tape *tape ); /* Cause the next block on the tape to be active, initialise it and return it */ -libspectrum_tape_block WIN32_DLL * +WIN32_DLL libspectrum_tape_block * libspectrum_tape_select_next_block( libspectrum_tape *tape ); /* Get the position on the tape of the current block */ -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_tape_position( int *n, libspectrum_tape *tape ); /* Select the nth block on the tape */ -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_tape_nth_block( libspectrum_tape *tape, int n ); /* Append a block to the current tape */ -void WIN32_DLL +WIN32_DLL void libspectrum_tape_append_block( libspectrum_tape *tape, libspectrum_tape_block *block ); -void WIN32_DLL +WIN32_DLL void libspectrum_tape_remove_block( libspectrum_tape *tape, libspectrum_tape_iterator it ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_tape_insert_block( libspectrum_tape *tape, libspectrum_tape_block *block, size_t position ); /*** Routines for iterating through a tape ***/ -libspectrum_tape_block WIN32_DLL * +WIN32_DLL libspectrum_tape_block * libspectrum_tape_iterator_init( libspectrum_tape_iterator *iterator, libspectrum_tape *tape ); -libspectrum_tape_block WIN32_DLL * +WIN32_DLL libspectrum_tape_block * libspectrum_tape_iterator_current( libspectrum_tape_iterator iterator ); -libspectrum_tape_block WIN32_DLL * +WIN32_DLL libspectrum_tape_block * libspectrum_tape_iterator_next( libspectrum_tape_iterator *iterator ); /*** Routines for handling the TZX generalised data block symbol table @@ -672,13 +672,13 @@ typedef struct libspectrum_tape_generalised_data_symbol libspectrum_tape_generalised_data_symbol; -libspectrum_dword WIN32_DLL libspectrum_tape_generalised_data_symbol_table_symbols_in_block( const libspectrum_tape_generalised_data_symbol_table *table ); -libspectrum_byte WIN32_DLL libspectrum_tape_generalised_data_symbol_table_max_pulses( const libspectrum_tape_generalised_data_symbol_table *table ); -libspectrum_word WIN32_DLL libspectrum_tape_generalised_data_symbol_table_symbols_in_table( const libspectrum_tape_generalised_data_symbol_table *table ); -libspectrum_tape_generalised_data_symbol* WIN32_DLL libspectrum_tape_generalised_data_symbol_table_symbol( const libspectrum_tape_generalised_data_symbol_table *table, size_t which ); +WIN32_DLL libspectrum_dword libspectrum_tape_generalised_data_symbol_table_symbols_in_block( const libspectrum_tape_generalised_data_symbol_table *table ); +WIN32_DLL libspectrum_byte libspectrum_tape_generalised_data_symbol_table_max_pulses( const libspectrum_tape_generalised_data_symbol_table *table ); +WIN32_DLL libspectrum_word libspectrum_tape_generalised_data_symbol_table_symbols_in_table( const libspectrum_tape_generalised_data_symbol_table *table ); +WIN32_DLL libspectrum_tape_generalised_data_symbol* libspectrum_tape_generalised_data_symbol_table_symbol( const libspectrum_tape_generalised_data_symbol_table *table, size_t which ); -libspectrum_tape_generalised_data_symbol_edge_type WIN32_DLL libspectrum_tape_generalised_data_symbol_type( const libspectrum_tape_generalised_data_symbol *symbol ); -libspectrum_word WIN32_DLL libspectrum_tape_generalised_data_symbol_pulse( const libspectrum_tape_generalised_data_symbol *symbol, size_t which ); +WIN32_DLL libspectrum_tape_generalised_data_symbol_edge_type libspectrum_tape_generalised_data_symbol_type( const libspectrum_tape_generalised_data_symbol *symbol ); +WIN32_DLL libspectrum_word libspectrum_tape_generalised_data_symbol_pulse( const libspectrum_tape_generalised_data_symbol *symbol, size_t which ); /* @@ -687,40 +687,40 @@ typedef struct libspectrum_rzx libspectrum_rzx; -libspectrum_rzx* WIN32_DLL libspectrum_rzx_alloc( void ); -libspectrum_error WIN32_DLL libspectrum_rzx_free( libspectrum_rzx *rzx ); +WIN32_DLL libspectrum_rzx* libspectrum_rzx_alloc( void ); +WIN32_DLL libspectrum_error libspectrum_rzx_free( libspectrum_rzx *rzx ); -void WIN32_DLL +WIN32_DLL void libspectrum_rzx_start_input( libspectrum_rzx *rzx, libspectrum_dword tstates ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_rzx_stop_input( libspectrum_rzx *rzx ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_rzx_add_snap( libspectrum_rzx *rzx, libspectrum_snap *snap, int automatic ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_rzx_rollback( libspectrum_rzx *rzx, libspectrum_snap **snap ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_rzx_rollback_to( libspectrum_rzx *rzx, libspectrum_snap **snap, size_t which ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_rzx_store_frame( libspectrum_rzx *rzx, size_t instructions, size_t count, libspectrum_byte *in_bytes ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_rzx_start_playback( libspectrum_rzx *rzx, int which, libspectrum_snap **snap ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_rzx_playback_frame( libspectrum_rzx *rzx, int *finished, libspectrum_snap **snap ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_rzx_playback( libspectrum_rzx *rzx, libspectrum_byte *byte ); /* Get and set the tstate counter */ -size_t WIN32_DLL libspectrum_rzx_tstates( libspectrum_rzx *rzx ); +WIN32_DLL size_t libspectrum_rzx_tstates( libspectrum_rzx *rzx ); /* Get the current frame's instruction count */ -size_t WIN32_DLL libspectrum_rzx_instructions( libspectrum_rzx *rzx ); +WIN32_DLL size_t libspectrum_rzx_instructions( libspectrum_rzx *rzx ); -libspectrum_dword WIN32_DLL libspectrum_rzx_get_keyid( libspectrum_rzx *rzx ); +WIN32_DLL libspectrum_dword libspectrum_rzx_get_keyid( libspectrum_rzx *rzx ); typedef struct libspectrum_signature { @@ -731,7 +731,7 @@ } libspectrum_signature; -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_rzx_get_signature( libspectrum_rzx *rzx, libspectrum_signature *signature ); @@ -743,11 +743,11 @@ } libspectrum_rzx_dsa_key; -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_rzx_read( libspectrum_rzx *rzx, const libspectrum_byte *buffer, size_t length ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_rzx_write( libspectrum_byte **buffer, size_t *length, libspectrum_rzx *rzx, libspectrum_id_t snap_format, libspectrum_creator *creator, int compress, @@ -774,22 +774,22 @@ libspectrum_rzx_insert_snap( libspectrum_rzx *rzx, libspectrum_snap *snap, int where ); -libspectrum_rzx_iterator WIN32_DLL +WIN32_DLL libspectrum_rzx_iterator libspectrum_rzx_iterator_begin( libspectrum_rzx *rzx ); -libspectrum_rzx_iterator WIN32_DLL +WIN32_DLL libspectrum_rzx_iterator libspectrum_rzx_iterator_next( libspectrum_rzx_iterator it ); -libspectrum_rzx_block_id WIN32_DLL +WIN32_DLL libspectrum_rzx_block_id libspectrum_rzx_iterator_get_type( libspectrum_rzx_iterator it ); -size_t WIN32_DLL +WIN32_DLL size_t libspectrum_rzx_iterator_get_frames( libspectrum_rzx_iterator it ); -void WIN32_DLL +WIN32_DLL void libspectrum_rzx_iterator_delete( libspectrum_rzx *rzx, libspectrum_rzx_iterator it ); -libspectrum_snap* WIN32_DLL +WIN32_DLL libspectrum_snap* libspectrum_rzx_iterator_get_snap( libspectrum_rzx_iterator it ); -int WIN32_DLL +WIN32_DLL int libspectrum_rzx_iterator_snap_is_automatic( libspectrum_rzx_iterator it ); /* @@ -809,41 +809,41 @@ /* Constructor/destructor */ -libspectrum_microdrive* WIN32_DLL +WIN32_DLL libspectrum_microdrive* libspectrum_microdrive_alloc( void ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_microdrive_free( libspectrum_microdrive *microdrive ); /* Accessors */ -libspectrum_byte WIN32_DLL +WIN32_DLL libspectrum_byte libspectrum_microdrive_data( const libspectrum_microdrive *microdrive, size_t which ); -void WIN32_DLL +WIN32_DLL void libspectrum_microdrive_set_data( libspectrum_microdrive *microdrive, size_t which, libspectrum_byte data ); -int WIN32_DLL +WIN32_DLL int libspectrum_microdrive_write_protect( const libspectrum_microdrive *microdrive ); -void WIN32_DLL +WIN32_DLL void libspectrum_microdrive_set_write_protect( libspectrum_microdrive *microdrive, int write_protect ); -libspectrum_byte WIN32_DLL +WIN32_DLL libspectrum_byte libspectrum_microdrive_cartridge_len( const libspectrum_microdrive *microdrive ); -void WIN32_DLL +WIN32_DLL void libspectrum_microdrive_set_cartridge_len( libspectrum_microdrive *microdrive, libspectrum_byte len ); /* .mdr format routines */ -int WIN32_DLL +WIN32_DLL int libspectrum_microdrive_checksum( libspectrum_microdrive *microdrive, libspectrum_byte what ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_microdrive_mdr_read( libspectrum_microdrive *microdrive, libspectrum_byte *buffer, size_t length ); -void WIN32_DLL +WIN32_DLL void libspectrum_microdrive_mdr_write( const libspectrum_microdrive *microdrive, libspectrum_byte **buffer, size_t *length ); @@ -879,17 +879,17 @@ libspectrum_dck_block *dck[256]; /* dck block data */ } libspectrum_dck; -libspectrum_dck* WIN32_DLL libspectrum_dck_alloc( void ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_dck* libspectrum_dck_alloc( void ); +WIN32_DLL libspectrum_error libspectrum_dck_free( libspectrum_dck *dck, int keep_pages ); /* Read in a DCK file */ -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_dck_read( libspectrum_dck *dck, const libspectrum_byte *buffer, size_t length ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_dck_read2( libspectrum_dck *dck, const libspectrum_byte *buffer, size_t length, const char *filename ); @@ -897,10 +897,10 @@ * Crypto functions */ -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_verify_signature( libspectrum_signature *signature, libspectrum_rzx_dsa_key *key ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_signature_free( libspectrum_signature *signature ); /* @@ -939,33 +939,33 @@ typedef struct libspectrum_ide_channel libspectrum_ide_channel; -libspectrum_ide_channel* WIN32_DLL +WIN32_DLL libspectrum_ide_channel* libspectrum_ide_alloc( libspectrum_ide_databus databus ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_ide_free( libspectrum_ide_channel *chn ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_ide_insert( libspectrum_ide_channel *chn, libspectrum_ide_unit unit, const char *filename ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_ide_commit( libspectrum_ide_channel *chn, libspectrum_ide_unit unit ); -int WIN32_DLL +WIN32_DLL int libspectrum_ide_dirty( libspectrum_ide_channel *chn, libspectrum_ide_unit unit ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_ide_eject( libspectrum_ide_channel *chn, libspectrum_ide_unit unit ); -libspectrum_error WIN32_DLL +WIN32_DLL libspectrum_error libspectrum_ide_reset( libspectrum_ide_channel *chn ); -libspectrum_byte WIN32_DLL +WIN32_DLL libspectrum_byte libspectrum_ide_read( libspectrum_ide_channel *chn, libspectrum_ide_register reg ); -void WIN32_DLL +WIN32_DLL void libspectrum_ide_write( libspectrum_ide_channel *chn, libspectrum_ide_register reg, libspectrum_byte data ); Modified: trunk/libspectrum/make-perl.c =================================================================== --- trunk/libspectrum/make-perl.c 2010-02-21 04:40:36 UTC (rev 4119) +++ trunk/libspectrum/make-perl.c 2010-02-21 05:06:56 UTC (rev 4120) @@ -144,46 +144,46 @@ " gconstpointer b);\n" "\n" "\n" -"GSList WIN32_DLL *g_slist_insert_sorted (GSList *list,\n" +"WIN32_DLL GSList *g_slist_insert_sorted (GSList *list,\n" " gpointer data,\n" " GCompareFunc func);\n" "\n" -"GSList WIN32_DLL *g_slist_insert (GSList *list,\n" +"WIN32_DLL GSList *g_slist_insert (GSList *list,\n" " gpointer data,\n" " gint position);\n" "\n" -"GSList WIN32_DLL *g_slist_append (GSList *list,\n" +"WIN32_DLL GSList *g_slist_append (GSList *list,\n" " gpointer data);\n" "\n" -"GSList WIN32_DLL *g_slist_prepend (GSList *list,\n" +"WIN32_DLL GSList *g_slist_prepend (GSList *list,\n" " gpointer data);\n" "\n" -"GSList WIN32_DLL *g_slist_remove (GSList *list,\n" +"WIN32_DLL GSList *g_slist_remove (GSList *list,\n" " gpointer data);\n" "\n" -"GSList WIN32_DLL *g_slist_last (GSList *list);\n" +"WIN32_DLL GSList *g_slist_last (GSList *list);\n" "\n" -"GSList WIN32_DLL *g_slist_reverse (GSList *list);\n" +"WIN32_DLL GSList *g_slist_reverse (GSList *list);\n" "\n" -"GSList WIN32_DLL *g_slist_delete_link (GSList *list,\n" +"WIN32_DLL GSList *g_slist_delete_link (GSList *list,\n" " GSList *link);\n" "\n" -"guint WIN32_DLL g_slist_length (GSList *list);\n" +"WIN32_DLL guint g_slist_length (GSList *list);\n" "\n" -"void WIN32_DLL g_slist_foreach (GSList *list,\n" +"WIN32_DLL void g_slist_foreach (GSList *list,\n" " GFunc func,\n" " gpointer user_data);\n" "\n" -"void WIN32_DLL g_slist_free (GSList *list);\n" +"WIN32_DLL void g_slist_free (GSList *list);\n" "\n" -"GSList WIN32_DLL *g_slist_nth (GSList *list,\n" +"WIN32_DLL GSList *g_slist_nth (GSList *list,\n" " guint n);\n" "\n" -"GSList WIN32_DLL *g_slist_find_custom (GSList *list,\n" +"WIN32_DLL GSList *g_slist_find_custom (GSList *list,\n" " gpointer data,\n" " GCompareFunc func );\n" "\n" -"gint WIN32_DLL g_slist_position (GSList *list,\n" +"WIN32_DLL gint g_slist_position (GSList *list,\n" " GSList *llink);\n" "\n" "typedef struct _GHashTable GHashTable;\n" @@ -194,31 +194,31 @@ " gpointer value,\n" " gpointer user_data);\n" "\n" -"gint WIN32_DLL g_int_equal (gconstpointer v,\n" +"WIN32_DLL gint g_int_equal (gconstpointer v,\n" " gconstpointer v2);\n" -"guint WIN32_DLL g_int_hash (gconstpointer v);\n" +"WIN32_DLL guint g_int_hash (gconstpointer v);\n" "\n" -"gint WIN32_DLL g_str_equal (gconstpointer v,\n" +"WIN32_DLL gint g_str_equal (gconstpointer v,\n" " gconstpointer v2);\n" -"guint WIN32_DLL g_str_hash (gconstpointer v);\n" +"WIN32_DLL guint g_str_hash (gconstpointer v);\n" "\n" -"GHashTable WIN32_DLL *g_hash_table_new (GHashFunc hash_func,\n" +"WIN32_DLL GHashTable *g_hash_table_new (GHashFunc hash_func,\n" " GCompareFunc key_compare_func);\n" "\n" -"void WIN32_DLL g_hash_table_destroy (GHashTable *hash_table);\n" +"WIN32_DLL void g_hash_table_destroy (GHashTable *hash_table);\n" "\n" -"void WIN32_DLL g_hash_table_insert (GHashTable *hash_table,\n" +"WIN32_DLL void g_hash_table_insert (GHashTable *hash_table,\n" " gpointer key,\n" " gpointer value);\n" "\n" -"gpointer WIN32_DLL g_hash_table_lookup (GHashTable *hash_table,\n" +"WIN32_DLL gpointer g_hash_table_lookup (GHashTable *hash_table,\n" " gconstpointer key);\n" "\n" -"guint WIN32_DLL g_hash_table_foreach_remove (GHashTable *hash_table,\n" +"WIN32_DLL guint g_hash_table_foreach_remove (GHashTable *hash_table,\n" " GHRFunc func,\n" " gpointer user_data);\n" "\n" -"guint WIN32_DLL g_hash_table_size (GHashTable *hash_table);\n" +"WIN32_DLL guint g_hash_table_size (GHashTable *hash_table);\n" "\n" "typedef struct _GArray GArray;\n" "\n" @@ -232,12 +232,12 @@ " size_t allocated;\n" "};\n" "\n" -"GArray* WIN32_DLL g_array_new( gboolean zero_terminated, gboolean clear,\n" +"WIN32_DLL GArray* g_array_new( gboolean zero_terminated, gboolean clear,\n" " guint element_size );\n" "#define g_array_append_val(a,v) g_array_append_vals( a, &(v), 1 );\n" -"GArray* WIN32_DLL g_array_append_vals( GArray *array, gconstpointer data, guint len );\n" +"WIN32_DLL GArray* g_array_append_vals( GArray *array, gconstpointer data, guint len );\n" "#define g_array_index(a,t,i) (*(((t*)a->data)+i))\n" -"GArray* WIN32_DLL g_array_set_size( GArray *array, guint length );\n" +"WIN32_DLL GArray* g_array_set_size( GArray *array, guint length );\n" "\n" ); if( sizeof( void* ) == sizeof( int ) ) { printf( "#define GINT_TO_POINTER(i) ((gpointer) (i))\n" ); @@ -294,10 +294,10 @@ printf( "\n/* we support snapshots etc. requiring zlib (e.g. compressed szx) */\n" ); printf( "#define LIBSPECTRUM_SUPPORTS_ZLIB_COMPRESSION (1)\n\n" ); printf( "/* zlib (de)compression routines */\n\n" ); - printf( "libspectrum_error WIN32_DLL\n" ); + printf( "WIN32_DLL libspectrum_error\n" ); printf( "libspectrum_zlib_inflate( const libspectrum_byte *gzptr, size_t gzlength,\n" ); printf( " libspectrum_byte **outptr, size_t *outlength );\n\n" ); - printf( "libspectrum_error WIN32_DLL\n" ); + printf( "WIN32_DLL libspectrum_error\n" ); printf( "libspectrum_zlib_compress( const libspectrum_byte *data, size_t length,\n" ); printf( " libspectrum_byte **gzptr, size_t *gzlength );\n\n" ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2010-02-21 05:10:34
|
Revision: 4121 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4121&view=rev Author: fredm Date: 2010-02-21 05:10:28 +0000 (Sun, 21 Feb 2010) Log Message: ----------- Define __func__ in MSVC (part of patch #2533274) (Simon Owen). Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/internals.h Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-02-21 05:06:56 UTC (rev 4120) +++ trunk/libspectrum/hacking/ChangeLog 2010-02-21 05:10:28 UTC (rev 4121) @@ -759,3 +759,5 @@ [__declspec(dllexport)] should be before the return type in declarations, rather than between return type and function name (part of patch #2533274) (Simon Owen). +20100221 internals.h: define __func__ in MSVC (part of patch #2533274) (Simon + Owen). Modified: trunk/libspectrum/internals.h =================================================================== --- trunk/libspectrum/internals.h 2010-02-21 05:06:56 UTC (rev 4120) +++ trunk/libspectrum/internals.h 2010-02-21 05:10:28 UTC (rev 4121) @@ -43,6 +43,14 @@ #define GCC_PRINTF( fmtstring, args ) #endif /* #ifdef __GNUC__ */ +#ifdef _MSC_VER +#if _MSC_VER > 1200 /* VC2005 or later */ +#define __func__ __FUNCTION__ +#else /* #if _MSC_VER > 1200 */ +#define __func__ "__func__" +#endif /* _MSC_VER > 1200 */ +#endif /* #ifdef _MSC_VER */ + /* On Win32 systems, map snprintf -> _snprintf, strcasecmp -> _stricmp and strncasecmp -> _strnicmp */ #if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2010-02-21 05:45:06
|
Revision: 4122 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4122&view=rev Author: fredm Date: 2010-02-21 05:45:00 +0000 (Sun, 21 Feb 2010) Log Message: ----------- Define M_LN2 for use with non C99 math.h (part of patch #2533274) (Simon Owen). Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/internals.h Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-02-21 05:10:28 UTC (rev 4121) +++ trunk/libspectrum/hacking/ChangeLog 2010-02-21 05:45:00 UTC (rev 4122) @@ -761,3 +761,5 @@ of patch #2533274) (Simon Owen). 20100221 internals.h: define __func__ in MSVC (part of patch #2533274) (Simon Owen). +20100221 internals.h: define M_LN2 for use with non C99 math.h (part of patch + #2533274) (Simon Owen). Modified: trunk/libspectrum/internals.h =================================================================== --- trunk/libspectrum/internals.h 2010-02-21 05:10:28 UTC (rev 4121) +++ trunk/libspectrum/internals.h 2010-02-21 05:45:00 UTC (rev 4122) @@ -51,6 +51,12 @@ #endif /* _MSC_VER > 1200 */ #endif /* #ifdef _MSC_VER */ +/* VC6 lacks M_LN2, and VS2003+ require _USE_MATH_DEFINES defined before math.h + */ +#ifndef M_LN2 +#define M_LN2 0.693147180559945309417 +#endif + /* On Win32 systems, map snprintf -> _snprintf, strcasecmp -> _stricmp and strncasecmp -> _strnicmp */ #if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2010-02-22 11:56:16
|
Revision: 4123 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4123&view=rev Author: fredm Date: 2010-02-22 11:56:10 +0000 (Mon, 22 Feb 2010) Log Message: ----------- VC6 has __int64 instead of long long (Fred; thanks, Simon Owen). Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/make-perl.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-02-21 05:45:00 UTC (rev 4122) +++ trunk/libspectrum/hacking/ChangeLog 2010-02-22 11:56:10 UTC (rev 4123) @@ -763,3 +763,5 @@ Owen). 20100221 internals.h: define M_LN2 for use with non C99 math.h (part of patch #2533274) (Simon Owen). +20100222 make-perl.c: VC6 has __int64 instead of long long (Fred; thanks, Simon + Owen). Modified: trunk/libspectrum/make-perl.c =================================================================== --- trunk/libspectrum/make-perl.c 2010-02-21 05:45:00 UTC (rev 4122) +++ trunk/libspectrum/make-perl.c 2010-02-22 11:56:10 UTC (rev 4123) @@ -89,12 +89,18 @@ if( sizeof( long ) == 8 ) { printf( "typedef unsigned long libspectrum_qword;\n" ); printf( "typedef signed long libspectrum_signed_qword;\n" ); +#if defined(_MSC_VER) && _MSC_VER <= 1200 + } else { + printf( "typedef unsigned __int64 libspectrum_qword;\n" ); + printf( "typedef signed __int64 libspectrum_signed_qword;\n" ); +#else } else if( sizeof( long long ) == 8 ) { printf( "typedef unsigned long long libspectrum_qword;\n" ); printf( "typedef signed long long libspectrum_signed_qword;\n" ); } else { fprintf( stderr, "No plausible 64 bit types found\n" ); return 1; +#endif } #endif /* #ifdef HAVE_STDINT_H */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2010-05-26 12:41:38
|
Revision: 4136 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4136&view=rev Author: fredm Date: 2010-05-26 12:41:32 +0000 (Wed, 26 May 2010) Log Message: ----------- Declare libspectrum_bits_set_n_bits static as it isn't used outside it's file to silence a warning on LLVM 4.2. Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/tape_block.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-05-22 12:25:40 UTC (rev 4135) +++ trunk/libspectrum/hacking/ChangeLog 2010-05-26 12:41:32 UTC (rev 4136) @@ -765,3 +765,5 @@ #2533274) (Simon Owen). 20100222 make-perl.c: VC6 has __int64 instead of long long (Fred; thanks, Simon Owen). +20100526 tape_block.c: declare libspectrum_bits_set_n_bits static as it isn't + used outside it's file to silence a warning on LLVM 4.2 (Fred). Modified: trunk/libspectrum/tape_block.c =================================================================== --- trunk/libspectrum/tape_block.c 2010-05-22 12:25:40 UTC (rev 4135) +++ trunk/libspectrum/tape_block.c 2010-05-26 12:41:32 UTC (rev 4136) @@ -447,7 +447,7 @@ static const int LIBSPECTRUM_BITS_IN_BYTE = 8; -int +static int libspectrum_bits_set_n_bits( libspectrum_byte byte, libspectrum_byte bits ) { int i; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2010-07-11 13:03:04
|
Revision: 4140 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4140&view=rev Author: fredm Date: 2010-07-11 13:02:58 +0000 (Sun, 11 Jul 2010) Log Message: ----------- Fix a typo in libspectrum_rzx_start_input. Modified Paths: -------------- trunk/libspectrum/doc/libspectrum.txt trunk/libspectrum/hacking/ChangeLog Modified: trunk/libspectrum/doc/libspectrum.txt =================================================================== --- trunk/libspectrum/doc/libspectrum.txt 2010-06-27 13:18:07 UTC (rev 4139) +++ trunk/libspectrum/doc/libspectrum.txt 2010-07-11 13:02:58 UTC (rev 4140) @@ -1229,7 +1229,7 @@ void libspectrum_rzx_start_input( libspectrum_rzx *rzx, libspectrum_dword tstates ) -Start an input recording block int the object. +Start an input recording block in the object. libspectrum_error libspectrum_rzx_stop_input( libspectrum_rzx *rzx ) Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-06-27 13:18:07 UTC (rev 4139) +++ trunk/libspectrum/hacking/ChangeLog 2010-07-11 13:02:58 UTC (rev 4140) @@ -767,3 +767,4 @@ Owen). 20100526 tape_block.c: declare libspectrum_bits_set_n_bits static as it isn't used outside it's file to silence a warning on LLVM 4.2 (Fred). +20100711 doc/libspectrum.txt: fix a typo in libspectrum_rzx_start_input (Fred). This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2010-08-31 14:05:11
|
Revision: 4153 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4153&view=rev Author: fredm Date: 2010-08-31 14:01:43 +0000 (Tue, 31 Aug 2010) Log Message: ----------- Add SZX read support for NTSC Spectrum machine ID. Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/szx.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-08-31 13:51:25 UTC (rev 4152) +++ trunk/libspectrum/hacking/ChangeLog 2010-08-31 14:01:43 UTC (rev 4153) @@ -770,3 +770,4 @@ 20100711 doc/libspectrum.txt: fix a typo in libspectrum_rzx_start_input (Fred). 20100825 libspectrum.c,libspectrum.h.in,sna.c,szx.c,timings.c,z80.c: reintegrate NTSC Spectrum branch. +20100831 szx.c: add SZX read support for NTSC Spectrum machine ID (Fred). Modified: trunk/libspectrum/szx.c =================================================================== --- trunk/libspectrum/szx.c 2010-08-31 13:51:25 UTC (rev 4152) +++ trunk/libspectrum/szx.c 2010-08-31 14:01:43 UTC (rev 4153) @@ -1941,6 +1941,10 @@ libspectrum_snap_set_machine( snap, LIBSPECTRUM_MACHINE_48 ); break; + case SZX_MACHINE_48_NTSC: + libspectrum_snap_set_machine( snap, LIBSPECTRUM_MACHINE_48_NTSC ); + break; + case SZX_MACHINE_128: libspectrum_snap_set_machine( snap, LIBSPECTRUM_MACHINE_128 ); break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2010-09-29 21:29:06
|
Revision: 4163 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4163&view=rev Author: pak21 Date: 2010-09-29 21:29:00 +0000 (Wed, 29 Sep 2010) Log Message: ----------- Ensure last OUT to 0x1ffd is serialised into .z80 files (fixes bug #3078262; thanks, Nick Corey). Modified Paths: -------------- trunk/libspectrum/test/test.c trunk/libspectrum/z80.c Modified: trunk/libspectrum/test/test.c =================================================================== --- trunk/libspectrum/test/test.c 2010-09-19 02:25:49 UTC (rev 4162) +++ trunk/libspectrum/test/test.c 2010-09-29 21:29:00 UTC (rev 4163) @@ -625,6 +625,66 @@ return r; } +/* Tests for bug #3078262: last out to 0x1ffd is not serialised into .z80 + files */ +static test_return_t +test_26( void ) +{ + const char *filename = STATIC_TEST_PATH( "plus3.z80" ); + libspectrum_byte *buffer = NULL; + size_t filesize = 0, length = 0; + libspectrum_snap *snap; + int flags; + test_return_t r = TEST_INCOMPLETE; + + if( read_file( &buffer, &filesize, filename ) ) return TEST_INCOMPLETE; + + snap = libspectrum_snap_alloc(); + + if( libspectrum_snap_read( snap, buffer, filesize, LIBSPECTRUM_ID_UNKNOWN, + filename ) != LIBSPECTRUM_ERROR_NONE ) { + fprintf( stderr, "%s: reading `%s' failed\n", progname, filename ); + libspectrum_snap_free( snap ); + libspectrum_free( buffer ); + return TEST_INCOMPLETE; + } + + libspectrum_free( buffer ); + buffer = NULL; + + if( libspectrum_snap_write( &buffer, &length, &flags, snap, + LIBSPECTRUM_ID_SNAPSHOT_Z80, NULL, 0 ) != + LIBSPECTRUM_ERROR_NONE ) { + fprintf( stderr, "%s: serialising to Z80 failed\n", progname ); + libspectrum_snap_free( snap ); + return TEST_INCOMPLETE; + } + + libspectrum_snap_free( snap ); + snap = libspectrum_snap_alloc(); + + if( libspectrum_snap_read( snap, buffer, length, LIBSPECTRUM_ID_SNAPSHOT_Z80, + NULL ) != LIBSPECTRUM_ERROR_NONE ) { + fprintf( stderr, "%s: restoring from Z80 failed\n", progname ); + libspectrum_snap_free( snap ); + libspectrum_free( buffer ); + return TEST_INCOMPLETE; + } + + if( libspectrum_snap_out_plus3_memoryport( snap ) == 0xaa ) { + r = TEST_PASS; + } else { + fprintf( stderr, + "%s: Last out to 0x1ffd is 0x%02x, not the expected 0xaa\n", + progname, libspectrum_snap_out_plus3_memoryport( snap ) ); + r = TEST_FAIL; + } + + libspectrum_snap_free( snap ); + + return r; +} + struct test_description { test_fn test; @@ -659,6 +719,7 @@ { test_23, "MDR write protection 2", 0 }, { test_24, "Complete TZX timings", 0 }, { test_25, "Writing SNA file", 0 }, + { test_26, "Writing +3 .Z80 file", 0 }, }; static size_t test_count = sizeof( tests ) / sizeof( tests[0] ); Modified: trunk/libspectrum/z80.c =================================================================== --- trunk/libspectrum/z80.c 2010-09-19 02:25:49 UTC (rev 4162) +++ trunk/libspectrum/z80.c 2010-09-29 21:29:00 UTC (rev 4163) @@ -1269,19 +1269,15 @@ { int i, bottom_16kb_ram; libspectrum_byte hardware_flag = 0; /* No special emulation features */ + int second_memory_port = 0; /* By default, don't write the extra bytes */ + libspectrum_byte machine_byte; + size_t header_length; libspectrum_dword quarter_states; int capabilities = libspectrum_machine_capabilities( libspectrum_snap_machine( snap ) ); - /* +2 here to deal with the two length bytes */ - libspectrum_make_room( buffer, LIBSPECTRUM_Z80_V3_LENGTH + 2, ptr, length ); - - libspectrum_write_word( ptr, LIBSPECTRUM_Z80_V3_LENGTH ); - - libspectrum_write_word( ptr, libspectrum_snap_pc( snap ) ); - switch( libspectrum_snap_machine( snap ) ) { case LIBSPECTRUM_MACHINE_48_NTSC: *flags |= LIBSPECTRUM_FLAG_SNAPSHOT_MAJOR_INFO_LOSS; @@ -1289,11 +1285,11 @@ case LIBSPECTRUM_MACHINE_16: case LIBSPECTRUM_MACHINE_48: if( libspectrum_snap_plusd_active( snap ) ) { - *(*ptr)++ = Z80_MACHINE_48_MGT; + machine_byte = Z80_MACHINE_48_MGT; } else if( libspectrum_snap_interface1_active( snap ) ) { - *(*ptr)++ = Z80_MACHINE_48_IF1; + machine_byte = Z80_MACHINE_48_IF1; } else { - *(*ptr)++ = Z80_MACHINE_48; + machine_byte = Z80_MACHINE_48; } break; case LIBSPECTRUM_MACHINE_SE: @@ -1301,40 +1297,48 @@ /* fall through */ case LIBSPECTRUM_MACHINE_128: if( libspectrum_snap_plusd_active( snap ) ) { - *(*ptr)++ = Z80_MACHINE_128_MGT; + machine_byte = Z80_MACHINE_128_MGT; } else if( libspectrum_snap_interface1_active( snap ) ) { - *(*ptr)++ = Z80_MACHINE_128_IF1; + machine_byte = Z80_MACHINE_128_IF1; } else { - *(*ptr)++ = Z80_MACHINE_128; + machine_byte = Z80_MACHINE_128; } break; case LIBSPECTRUM_MACHINE_PLUS3E: *flags |= LIBSPECTRUM_FLAG_SNAPSHOT_MINOR_INFO_LOSS; /* fall through */ case LIBSPECTRUM_MACHINE_PLUS3: - *(*ptr)++ = Z80_MACHINE_PLUS3; break; + second_memory_port = 1; + machine_byte = Z80_MACHINE_PLUS3; + break; case LIBSPECTRUM_MACHINE_PENT: case LIBSPECTRUM_MACHINE_PENT512: case LIBSPECTRUM_MACHINE_PENT1024: - *(*ptr)++ = Z80_MACHINE_PENTAGON; break; + second_memory_port = 1; + machine_byte = Z80_MACHINE_PENTAGON; + break; case LIBSPECTRUM_MACHINE_SCORP: - *(*ptr)++ = Z80_MACHINE_SCORPION; break; + second_memory_port = 1; + machine_byte = Z80_MACHINE_SCORPION; + break; case LIBSPECTRUM_MACHINE_PLUS2: if( libspectrum_snap_interface1_active( snap ) ) { *flags |= LIBSPECTRUM_FLAG_SNAPSHOT_MINOR_INFO_LOSS; } - *(*ptr)++ = Z80_MACHINE_PLUS2; break; + machine_byte = Z80_MACHINE_PLUS2; break; case LIBSPECTRUM_MACHINE_PLUS2A: - *(*ptr)++ = Z80_MACHINE_PLUS2A; break; + second_memory_port = 1; + machine_byte = Z80_MACHINE_PLUS2A; + break; case LIBSPECTRUM_MACHINE_TC2048: if( libspectrum_snap_interface1_active( snap ) ) { *flags |= LIBSPECTRUM_FLAG_SNAPSHOT_MINOR_INFO_LOSS; } - *(*ptr)++ = Z80_MACHINE_TC2048; break; + machine_byte = Z80_MACHINE_TC2048; break; case LIBSPECTRUM_MACHINE_TC2068: - *(*ptr)++ = Z80_MACHINE_TC2068; break; + machine_byte = Z80_MACHINE_TC2068; break; case LIBSPECTRUM_MACHINE_TS2068: - *(*ptr)++ = Z80_MACHINE_TS2068; break; + machine_byte = Z80_MACHINE_TS2068; break; case LIBSPECTRUM_MACHINE_UNKNOWN: libspectrum_print_error( LIBSPECTRUM_ERROR_UNKNOWN, @@ -1343,6 +1347,17 @@ return LIBSPECTRUM_ERROR_UNKNOWN; } + header_length = second_memory_port ? LIBSPECTRUM_Z80_V3X_LENGTH + : LIBSPECTRUM_Z80_V3_LENGTH; + + /* +2 here to deal with the two length bytes */ + libspectrum_make_room( buffer, header_length + 2, ptr, length ); + + libspectrum_write_word( ptr, header_length ); + + libspectrum_write_word( ptr, libspectrum_snap_pc( snap ) ); + *(*ptr)++ = machine_byte; + if( capabilities & LIBSPECTRUM_MACHINE_CAPABILITY_128_MEMORY ) { *(*ptr)++ = libspectrum_snap_out_128_memoryport( snap ); } else if( capabilities & LIBSPECTRUM_MACHINE_CAPABILITY_TIMEX_MEMORY ) { @@ -1463,8 +1478,9 @@ for( i=52; i<55; i++ ) *(*ptr)++ = '\0'; } - /* etc */ - for( i=55; i<=LIBSPECTRUM_Z80_V3_LENGTH; i++ ) *(*ptr)++ = '\0'; + if( second_memory_port ) { + *(*ptr)++ = libspectrum_snap_out_plus3_memoryport( snap ); + } return LIBSPECTRUM_ERROR_NONE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2010-09-30 21:29:00
|
Revision: 4164 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4164&view=rev Author: pak21 Date: 2010-09-30 21:28:54 +0000 (Thu, 30 Sep 2010) Log Message: ----------- Remember to add test file. Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog Added Paths: ----------- trunk/libspectrum/test/plus3.z80 Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-09-29 21:29:00 UTC (rev 4163) +++ trunk/libspectrum/hacking/ChangeLog 2010-09-30 21:28:54 UTC (rev 4164) @@ -776,3 +776,6 @@ #3054536) (Sergio Baldovi). 20100912 Makefile.am,configure.in,windres.rc: add Windows version encoding similar to Fuse (patch #3061430) (Sergio Baldovi). +20100929 test/test.c,z80.c: ensure last OUT to 0x1ffd is serialised into .z80 + files (fixes bug #3078262; thanks, Nick Corey). +20100930 test/plus3.z80: remember to add test file. Added: trunk/libspectrum/test/plus3.z80 =================================================================== (Binary files differ) Property changes on: trunk/libspectrum/test/plus3.z80 ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2010-10-02 12:08:41
|
Revision: 4167 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4167&view=rev Author: pak21 Date: 2010-10-02 12:08:34 +0000 (Sat, 02 Oct 2010) Log Message: ----------- Check for SZX files written with A and F swapped and read them in appropriately. Bump libspectrum version number so we know that new files are written without the bug. Modified Paths: -------------- trunk/libspectrum/configure.in trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/szx.c trunk/libspectrum/test/test.c Added Paths: ----------- trunk/libspectrum/test/empty.szx Modified: trunk/libspectrum/configure.in =================================================================== --- trunk/libspectrum/configure.in 2010-10-02 12:07:02 UTC (rev 4166) +++ trunk/libspectrum/configure.in 2010-10-02 12:08:34 UTC (rev 4167) @@ -24,7 +24,7 @@ AC_INIT(libspectrum.c) AM_CONFIG_HEADER(config.h) -define(LIBSPECTRUM_VERSION, [0.5.0]) +define(LIBSPECTRUM_VERSION, [0.5.1]) dnl Use automake to produce `Makefile.in' AM_INIT_AUTOMAKE(libspectrum, LIBSPECTRUM_VERSION) Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-10-02 12:07:02 UTC (rev 4166) +++ trunk/libspectrum/hacking/ChangeLog 2010-10-02 12:08:34 UTC (rev 4167) @@ -780,3 +780,7 @@ files (fixes bug #3078262; thanks, Nick Corey). 20100930 test/plus3.z80: remember to add test file. 20100930 ChangeLog,README: first updates for a "1.0" release. +20101002 configure.in,szx.c,test/{empty.szx,test.c}: check for SZX files + written with A and F swapped and read them in appropriately. Bump + libspectrum version number so we know that new files are written + without the bug. Modified: trunk/libspectrum/szx.c =================================================================== --- trunk/libspectrum/szx.c 2010-10-02 12:07:02 UTC (rev 4166) +++ trunk/libspectrum/szx.c 2010-10-02 12:08:34 UTC (rev 4167) @@ -1,5 +1,5 @@ /* szx.c: Routines for .szx snapshots - Copyright (c) 1998-2009 Philip Kendall, Fredrick Meunier, Stuart Brady + Copyright (c) 1998-2010 Philip Kendall, Fredrick Meunier, Stuart Brady $Id$ @@ -29,6 +29,14 @@ #include "internals.h" +/* Used for passing internal data around */ + +typedef struct szx_context { + + int swap_af; + +} szx_context; + /* The machine numbers used in the .szx format */ typedef enum szx_machine_type { @@ -55,6 +63,8 @@ static const char *signature = "ZXST"; static const size_t signature_length = 4; +static const char *libspectrum_string = "libspectrum: "; + static const libspectrum_byte SZX_VERSION_MAJOR = 1; static const libspectrum_byte SZX_VERSION_MINOR = 3; @@ -182,13 +192,15 @@ static libspectrum_error read_chunk( libspectrum_snap *snap, libspectrum_word version, - const libspectrum_byte **buffer, const libspectrum_byte *end ); + const libspectrum_byte **buffer, const libspectrum_byte *end, + szx_context *ctx ); typedef libspectrum_error (*read_chunk_fn)( libspectrum_snap *snap, libspectrum_word version, const libspectrum_byte **buffer, const libspectrum_byte *end, - size_t data_length ); + size_t data_length, + szx_context *ctx ); static libspectrum_error write_file_header( libspectrum_byte **buffer, libspectrum_byte **ptr, @@ -353,7 +365,8 @@ static libspectrum_error read_atrp_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { libspectrum_byte *data; size_t page; @@ -379,7 +392,8 @@ static libspectrum_error read_ay_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { size_t i; libspectrum_byte flags; @@ -407,7 +421,8 @@ static libspectrum_error read_b128_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { #ifdef HAVE_ZLIB_H libspectrum_error error; @@ -498,11 +513,56 @@ return LIBSPECTRUM_ERROR_NONE; } + +static libspectrum_error +read_crtr_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, + const libspectrum_byte **buffer, + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx ) +{ + if( data_length < 36 ) { + libspectrum_print_error( LIBSPECTRUM_ERROR_UNKNOWN, + "%s:read_crtr_chunk: length %lu too short", + __FILE__, (unsigned long)data_length ); + return LIBSPECTRUM_ERROR_UNKNOWN; + } + + *buffer += 36; + data_length -= 36; + + /* This is ugly, but I can't see a better way to do it */ + if( sizeof( libspectrum_byte ) == sizeof( char ) ) { + char *custom = libspectrum_malloc( data_length + 1 ); + memcpy( custom, *buffer, data_length ); + custom[data_length] = 0; + + char *libspectrum = strstr( custom, libspectrum_string ); + if( libspectrum ) { + int matches, v1, v2, v3; + libspectrum += strlen( libspectrum_string ); + matches = sscanf( libspectrum, "%d.%d.%d", &v1, &v2, &v3 ); + if( matches == 3 ) { + if( v1 == 0 ) { + if( v2 < 5 || ( v2 == 5 && v3 == 0 ) ) { + ctx->swap_af = 1; + } + } + } + } + + libspectrum_free( custom ); + } + + *buffer += data_length; + + return LIBSPECTRUM_ERROR_NONE; +} static libspectrum_error read_opus_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, - const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte **buffer, + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { #ifdef HAVE_ZLIB_H libspectrum_error error; @@ -693,7 +753,8 @@ static libspectrum_error read_plsd_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { #ifdef HAVE_ZLIB_H libspectrum_error error; @@ -874,7 +935,8 @@ static libspectrum_error read_cfrp_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { libspectrum_byte *data; size_t page; @@ -900,7 +962,8 @@ static libspectrum_error read_side_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { if( data_length ) { libspectrum_print_error( LIBSPECTRUM_ERROR_UNKNOWN, @@ -936,7 +999,8 @@ static libspectrum_error read_joy_chunk( libspectrum_snap *snap, libspectrum_word version, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { libspectrum_dword flags; @@ -1027,7 +1091,8 @@ static libspectrum_error read_keyb_chunk( libspectrum_snap *snap, libspectrum_word version, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { size_t expected_length; libspectrum_dword flags; @@ -1086,7 +1151,8 @@ static libspectrum_error read_amxm_chunk( libspectrum_snap *snap, libspectrum_word version, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { if( data_length != 7 ) { libspectrum_print_error( LIBSPECTRUM_ERROR_UNKNOWN, @@ -1119,7 +1185,8 @@ static libspectrum_error read_ramp_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { libspectrum_byte *data; size_t page; @@ -1146,7 +1213,8 @@ static libspectrum_error read_scld_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { if( data_length != 2 ) { libspectrum_print_error( LIBSPECTRUM_ERROR_UNKNOWN, @@ -1164,7 +1232,8 @@ static libspectrum_error read_spcr_chunk( libspectrum_snap *snap, libspectrum_word version, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { libspectrum_byte out_ula; int capabilities; @@ -1203,7 +1272,8 @@ static libspectrum_error read_z80r_chunk( libspectrum_snap *snap, libspectrum_word version, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx ) { if( data_length != 37 ) { libspectrum_print_error( LIBSPECTRUM_ERROR_UNKNOWN, @@ -1212,8 +1282,14 @@ return LIBSPECTRUM_ERROR_UNKNOWN; } - libspectrum_snap_set_f ( snap, **buffer ); (*buffer)++; - libspectrum_snap_set_a ( snap, **buffer ); (*buffer)++; + if( ctx->swap_af ) { + libspectrum_snap_set_a( snap, **buffer ); (*buffer)++; + libspectrum_snap_set_f( snap, **buffer ); (*buffer)++; + } else { + libspectrum_snap_set_f( snap, **buffer ); (*buffer)++; + libspectrum_snap_set_a( snap, **buffer ); (*buffer)++; + } + libspectrum_snap_set_bc ( snap, libspectrum_read_word( buffer ) ); libspectrum_snap_set_de ( snap, libspectrum_read_word( buffer ) ); libspectrum_snap_set_hl ( snap, libspectrum_read_word( buffer ) ); @@ -1257,7 +1333,8 @@ static libspectrum_error read_zxat_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { libspectrum_word flags; @@ -1288,7 +1365,8 @@ static libspectrum_error read_zxcf_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { libspectrum_word flags; @@ -1313,7 +1391,8 @@ static libspectrum_error read_if1_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { libspectrum_word flags; libspectrum_word expected_length; @@ -1462,7 +1541,8 @@ static libspectrum_error read_rom_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { libspectrum_word flags; libspectrum_dword expected_length; @@ -1580,7 +1660,8 @@ static libspectrum_error read_if2r_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { #ifdef HAVE_ZLIB_H @@ -1632,7 +1713,8 @@ static libspectrum_error read_dock_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { libspectrum_byte *data; size_t page; @@ -1669,7 +1751,8 @@ static libspectrum_error read_dide_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { #ifdef HAVE_ZLIB_H libspectrum_error error; @@ -1756,7 +1839,8 @@ static libspectrum_error read_dirp_chunk( libspectrum_snap *snap, libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, - const libspectrum_byte *end GCC_UNUSED, size_t data_length ) + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) { libspectrum_byte *data; size_t page; @@ -1784,7 +1868,8 @@ libspectrum_word version GCC_UNUSED, const libspectrum_byte **buffer, const libspectrum_byte *end GCC_UNUSED, - size_t data_length ) + size_t data_length, + szx_context *ctx GCC_UNUSED ) { *buffer += data_length; return LIBSPECTRUM_ERROR_NONE; @@ -1803,7 +1888,7 @@ { ZXSTBID_BETA128, read_b128_chunk }, { ZXSTBID_BETADISK, skip_chunk }, { ZXSTBID_COVOX, skip_chunk }, - { ZXSTBID_CREATOR, skip_chunk }, + { ZXSTBID_CREATOR, read_crtr_chunk }, { ZXSTBID_DIVIDE, read_dide_chunk }, { ZXSTBID_DIVIDERAMPAGE, read_dirp_chunk }, { ZXSTBID_DOCK, read_dock_chunk }, @@ -1863,7 +1948,8 @@ static libspectrum_error read_chunk( libspectrum_snap *snap, libspectrum_word version, - const libspectrum_byte **buffer, const libspectrum_byte *end ) + const libspectrum_byte **buffer, const libspectrum_byte *end, + szx_context *ctx ) { char id[5]; libspectrum_dword data_length; @@ -1887,7 +1973,7 @@ if( !memcmp( id, read_chunks[i].id, 4 ) ) { error = read_chunks[i].function( snap, version, buffer, end, - data_length ); + data_length, ctx ); if( error ) return error; done = 1; } @@ -1911,6 +1997,7 @@ libspectrum_error error; const libspectrum_byte *end = buffer + length; + szx_context *ctx; if( end - buffer < 8 ) { libspectrum_print_error( @@ -2008,11 +2095,18 @@ /* Skip to the end of the header */ buffer += 2; + ctx = libspectrum_malloc( sizeof( *ctx ) ); + ctx->swap_af = 0; + while( buffer < end ) { - error = read_chunk( snap, version, &buffer, end ); - if( error ) return error; + error = read_chunk( snap, version, &buffer, end, ctx ); + if( error ) { + libspectrum_free( ctx ); + return error; + } } + libspectrum_free( ctx ); return LIBSPECTRUM_ERROR_NONE; } Added: trunk/libspectrum/test/empty.szx =================================================================== (Binary files differ) Property changes on: trunk/libspectrum/test/empty.szx ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/libspectrum/test/test.c =================================================================== --- trunk/libspectrum/test/test.c 2010-10-02 12:07:02 UTC (rev 4166) +++ trunk/libspectrum/test/test.c 2010-10-02 12:08:34 UTC (rev 4167) @@ -685,6 +685,45 @@ return r; } +/* Tests for bug #2857419: SZX files were written with A and F reversed */ +static test_return_t +test_27( void ) +{ + const char *filename = STATIC_TEST_PATH( "empty.szx" ); + libspectrum_byte *buffer = NULL; + size_t filesize = 0; + libspectrum_snap *snap; + test_return_t r = TEST_INCOMPLETE; + + if( read_file( &buffer, &filesize, filename ) ) return TEST_INCOMPLETE; + + snap = libspectrum_snap_alloc(); + + if( libspectrum_snap_read( snap, buffer, filesize, LIBSPECTRUM_ID_UNKNOWN, + filename ) != LIBSPECTRUM_ERROR_NONE ) { + fprintf( stderr, "%s: reading `%s' failed\n", progname, filename ); + libspectrum_snap_free( snap ); + libspectrum_free( buffer ); + return TEST_INCOMPLETE; + } + + libspectrum_free( buffer ); + + if( libspectrum_snap_a( snap ) != 0x12 ) { + fprintf( stderr, "%s: A is 0x%02x, not the expected 0x12\n", progname, + libspectrum_snap_a( snap ) ); + r = TEST_FAIL; + } else if( libspectrum_snap_f( snap ) != 0x34 ) { + fprintf( stderr, "%s: F is 0x%04x, not the expected 0x34\n", progname, + libspectrum_snap_f( snap ) ); + r = TEST_FAIL; + } else { + r = TEST_PASS; + } + + return r; +} + struct test_description { test_fn test; @@ -720,6 +759,7 @@ { test_24, "Complete TZX timings", 0 }, { test_25, "Writing SNA file", 0 }, { test_26, "Writing +3 .Z80 file", 0 }, + { test_27, "Reading old SZX file", 0 }, }; static size_t test_count = sizeof( tests ) / sizeof( tests[0] ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2010-10-03 17:49:37
|
Revision: 4170 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4170&view=rev Author: pak21 Date: 2010-10-03 17:49:30 +0000 (Sun, 03 Oct 2010) Log Message: ----------- We also need to swap A' and F'. Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/szx.c trunk/libspectrum/test/empty.szx trunk/libspectrum/test/test.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-10-03 17:38:56 UTC (rev 4169) +++ trunk/libspectrum/hacking/ChangeLog 2010-10-03 17:49:30 UTC (rev 4170) @@ -784,3 +784,4 @@ written with A and F swapped and read them in appropriately. Bump libspectrum version number so we know that new files are written without the bug. +20101003 szx.c,test/{empty.szx,test.c}: we also need to swap A' and F'. Modified: trunk/libspectrum/szx.c =================================================================== --- trunk/libspectrum/szx.c 2010-10-03 17:38:56 UTC (rev 4169) +++ trunk/libspectrum/szx.c 2010-10-03 17:49:30 UTC (rev 4170) @@ -1294,8 +1294,14 @@ libspectrum_snap_set_de ( snap, libspectrum_read_word( buffer ) ); libspectrum_snap_set_hl ( snap, libspectrum_read_word( buffer ) ); - libspectrum_snap_set_f_ ( snap, **buffer ); (*buffer)++; - libspectrum_snap_set_a_ ( snap, **buffer ); (*buffer)++; + if( ctx->swap_af ) { + libspectrum_snap_set_a_( snap, **buffer ); (*buffer)++; + libspectrum_snap_set_f_( snap, **buffer ); (*buffer)++; + } else { + libspectrum_snap_set_f_( snap, **buffer ); (*buffer)++; + libspectrum_snap_set_a_( snap, **buffer ); (*buffer)++; + } + libspectrum_snap_set_bc_ ( snap, libspectrum_read_word( buffer ) ); libspectrum_snap_set_de_ ( snap, libspectrum_read_word( buffer ) ); libspectrum_snap_set_hl_ ( snap, libspectrum_read_word( buffer ) ); Modified: trunk/libspectrum/test/empty.szx =================================================================== (Binary files differ) Modified: trunk/libspectrum/test/test.c =================================================================== --- trunk/libspectrum/test/test.c 2010-10-03 17:38:56 UTC (rev 4169) +++ trunk/libspectrum/test/test.c 2010-10-03 17:49:30 UTC (rev 4170) @@ -714,9 +714,17 @@ libspectrum_snap_a( snap ) ); r = TEST_FAIL; } else if( libspectrum_snap_f( snap ) != 0x34 ) { - fprintf( stderr, "%s: F is 0x%04x, not the expected 0x34\n", progname, + fprintf( stderr, "%s: F is 0x%02x, not the expected 0x34\n", progname, libspectrum_snap_f( snap ) ); r = TEST_FAIL; + } else if( libspectrum_snap_a_( snap ) != 0x56 ) { + fprintf( stderr, "%s: A' is 0x%02x, not the expected 0x56\n", progname, + libspectrum_snap_a_( snap ) ); + r = TEST_FAIL; + } else if( libspectrum_snap_f_( snap ) != 0x78 ) { + fprintf( stderr, "%s: F' is 0x%02x, not the expected 0x78\n", progname, + libspectrum_snap_f( snap ) ); + r = TEST_FAIL; } else { r = TEST_PASS; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2010-11-30 18:45:24
|
Revision: 4196 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4196&view=rev Author: pak21 Date: 2010-11-30 18:45:18 +0000 (Tue, 30 Nov 2010) Log Message: ----------- Remove potential signedness problem. Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/warajevo_read.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-11-29 22:26:56 UTC (rev 4195) +++ trunk/libspectrum/hacking/ChangeLog 2010-11-30 18:45:18 UTC (rev 4196) @@ -787,3 +787,4 @@ 20101003 szx.c,test/{empty.szx,test.c}: we also need to swap A' and F'. 20101010 configure.in: pad version number for Win32 if needed (patch #3084574) (Sergio Baldovi). +20101130 warajevo_read.c: remove potential signedness problem. Modified: trunk/libspectrum/warajevo_read.c =================================================================== --- trunk/libspectrum/warajevo_read.c 2010-11-29 22:26:56 UTC (rev 4195) +++ trunk/libspectrum/warajevo_read.c 2010-11-30 18:45:18 UTC (rev 4196) @@ -150,17 +150,17 @@ static libspectrum_dword lsb2dword( const libspectrum_byte *mem ) { - return mem[0] + - mem[1] * 0x100 + - mem[2] * 0x10000 + - mem[3] * 0x1000000 ; + return ( mem[0] << 0 ) | + ( mem[1] << 8 ) | + ( mem[2] << 16 ) | + ( mem[3] << 24 ); } static libspectrum_word lsb2word( const libspectrum_byte *mem ) { - return mem[0] + - mem[1] * 0x100 ; + return ( mem[0] << 0 ) | + ( mem[1] << 8 ); } /* The main load function */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2010-12-17 18:54:51
|
Revision: 4221 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4221&view=rev Author: pak21 Date: 2010-12-17 18:54:45 +0000 (Fri, 17 Dec 2010) Log Message: ----------- Mark windres.rc as a source file so it is distributed (thanks, Guesser). Modified Paths: -------------- trunk/libspectrum/Makefile.am trunk/libspectrum/hacking/ChangeLog Modified: trunk/libspectrum/Makefile.am =================================================================== --- trunk/libspectrum/Makefile.am 2010-12-17 10:54:29 UTC (rev 4220) +++ trunk/libspectrum/Makefile.am 2010-12-17 18:54:45 UTC (rev 4221) @@ -53,6 +53,7 @@ tzx_write.c \ warajevo_read.c \ wav.c \ + windres.rc \ z80.c \ z80em.c \ zlib.c \ Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2010-12-17 10:54:29 UTC (rev 4220) +++ trunk/libspectrum/hacking/ChangeLog 2010-12-17 18:54:45 UTC (rev 4221) @@ -794,3 +794,5 @@ for 1.0.0 release. 20101216 ChangeLog: update date here as well. 20101216 test/Makefile.am: ensure all test files are distributed. +20101217 Makefile.am: mark windres.rc as a source file so it is distributed + (thanks, Guesser). This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2011-01-20 12:19:10
|
Revision: 4267 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4267&view=rev Author: fredm Date: 2011-01-20 12:19:04 +0000 (Thu, 20 Jan 2011) Log Message: ----------- Add the g_hash_table_foreach() function and update g_hash_table_new() function to support the g_hash_table_new( NULL, NULL ) syntax (patch #3160211) (Sergio Baldovi). Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/make-perl.c trunk/libspectrum/myglib/ghash.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2011-01-20 11:47:49 UTC (rev 4266) +++ trunk/libspectrum/hacking/ChangeLog 2011-01-20 12:19:04 UTC (rev 4267) @@ -796,3 +796,7 @@ 20101216 test/Makefile.am: ensure all test files are distributed. 20101217 Makefile.am: mark windres.rc as a source file so it is distributed (thanks, Guesser). +20110120 make-perl.c,myglib/ghash.c: add the g_hash_table_foreach() function and + update g_hash_table_new() function to support the + g_hash_table_new( NULL, NULL ) syntax (patch #3160211) (Sergio + Baldovi). Modified: trunk/libspectrum/make-perl.c =================================================================== --- trunk/libspectrum/make-perl.c 2011-01-20 11:47:49 UTC (rev 4266) +++ trunk/libspectrum/make-perl.c 2011-01-20 12:19:04 UTC (rev 4267) @@ -133,6 +133,7 @@ "typedef long glong;\n" "typedef gint gboolean;\n" "typedef unsigned int guint;\n" +"typedef unsigned long gulong;\n" "typedef const void * gconstpointer;\n" "typedef void * gpointer;\n" "\n" @@ -196,6 +197,10 @@ "\n" "typedef guint (*GHashFunc) (gconstpointer key);\n" "\n" +"typedef void (*GHFunc) (gpointer key,\n" +" gpointer value,\n" +" gpointer user_data);\n" +"\n" "typedef gboolean (*GHRFunc) (gpointer key,\n" " gpointer value,\n" " gpointer user_data);\n" @@ -220,6 +225,10 @@ "WIN32_DLL gpointer g_hash_table_lookup (GHashTable *hash_table,\n" " gconstpointer key);\n" "\n" +"WIN32_DLL void g_hash_table_foreach (GHashTable *hash_table,\n" +" GHFunc func,\n" +" gpointer user_data);\n" +"\n" "WIN32_DLL guint g_hash_table_foreach_remove (GHashTable *hash_table,\n" " GHRFunc func,\n" " gpointer user_data);\n" @@ -248,9 +257,11 @@ if( sizeof( void* ) == sizeof( int ) ) { printf( "#define GINT_TO_POINTER(i) ((gpointer) (i))\n" ); printf( "#define GPOINTER_TO_INT(p) ((gint) (p))\n" ); + printf( "#define GPOINTER_TO_UINT(p) ((guint) (p))\n" ); } else if( sizeof( void* ) == sizeof( long ) ) { printf( "#define GINT_TO_POINTER(i) ((gpointer) (glong)(i))\n" ); printf( "#define GPOINTER_TO_INT(p) ((gint) (glong)(p))\n" ); + printf( "#define GPOINTER_TO_UINT(p) ((guint) (gulong)(p))\n" ); } else { fprintf( stderr, "No plausible int to pointer cast found\n" ); return 1; Modified: trunk/libspectrum/myglib/ghash.c =================================================================== --- trunk/libspectrum/myglib/ghash.c 2011-01-20 11:47:49 UTC (rev 4266) +++ trunk/libspectrum/myglib/ghash.c 2011-01-20 12:19:04 UTC (rev 4267) @@ -8,7 +8,7 @@ files for a list of changes. These files are distributed with GLib at ftp://ftp.gtk.org/pub/gtk/. - Modified by Philip Kendall 2004-2008. + Modified by Philip Kendall 2004-2011. $Id$ @@ -61,6 +61,12 @@ static GHashNode *node_free_list = NULL; +guint +g_direct_hash (gconstpointer v) +{ + return GPOINTER_TO_UINT (v); +} + GHashTable* g_hash_table_new (GHashFunc hash_func, GCompareFunc key_equal_func) @@ -71,7 +77,7 @@ hash_table = libspectrum_malloc (sizeof (GHashTable)); hash_table->nnodes = 0; - hash_table->hash_func = hash_func; + hash_table->hash_func = hash_func? hash_func : g_direct_hash; hash_table->key_equal_func = key_equal_func; hash_table->nodes = libspectrum_malloc (HASH_TABLE_SIZE * sizeof (GHashNode*)); @@ -116,10 +122,17 @@ node = &hash_table->nodes [(* hash_table->hash_func) (key) % HASH_TABLE_SIZE]; - - while (*node && !(*hash_table->key_equal_func) ((*node)->key, key)) + + while( *node ) { + if( hash_table->key_equal_func ) { + if( hash_table->key_equal_func( (*node)->key, key ) ) break; + } else if( (*node)->key == key ) { + break; + } + node = &(*node)->next; - + } + return node; } @@ -230,6 +243,19 @@ return deleted; } +void +g_hash_table_foreach (GHashTable *hash_table, + GHFunc func, + gpointer user_data) +{ + GHashNode *node; + gint i; + + for (i = 0; i < HASH_TABLE_SIZE; i++) + for (node = hash_table->nodes[i]; node; node = node->next) + (* func) (node->key, node->value, user_data); +} + guint g_hash_table_size (GHashTable *hash_table) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |