From: <fr...@us...> - 2009-05-09 14:07:07
|
Revision: 4018 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4018&view=rev Author: fredm Date: 2009-05-09 14:06:50 +0000 (Sat, 09 May 2009) Log Message: ----------- Handle querying the block length for turbo and pure data blocks with 0 length. Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/tape_block.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2009-05-09 12:09:33 UTC (rev 4017) +++ trunk/libspectrum/hacking/ChangeLog 2009-05-09 14:06:50 UTC (rev 4018) @@ -719,3 +719,5 @@ 20090411 doc/libspectrum.txt,tape.c: add a new tape flag for end of tape (part of fixes for bug #2743838) (Fred). 20090411 libspectrum.h.in: export new end of tape flag. +20090509 tape_block.c: handle querying the block length for turbo and pure data + blocks with 0 length (Fred). Modified: trunk/libspectrum/tape_block.c =================================================================== --- trunk/libspectrum/tape_block.c 2009-05-09 12:09:33 UTC (rev 4017) +++ trunk/libspectrum/tape_block.c 2009-05-09 14:06:50 UTC (rev 4018) @@ -517,24 +517,26 @@ turbo->sync1_length + turbo->sync2_length + convert_ms_to_tstates( turbo->pause ); size_t i; - int bits_set_in_last_byte = - libspectrum_bits_set_n_bits( turbo->data[ turbo->length-1 ], - turbo->bits_in_last_byte ); + if( turbo->length ) { + int bits_set_in_last_byte = + libspectrum_bits_set_n_bits( turbo->data[ turbo->length-1 ], + turbo->bits_in_last_byte ); - for( i = 0; i < turbo->length-1; i++ ) { - libspectrum_byte data = turbo->data[ i ]; + for( i = 0; i < turbo->length-1; i++ ) { + libspectrum_byte data = turbo->data[ i ]; + length += convert_pulses_to_tstates( turbo->bit1_length, + turbo->bit0_length, + bits_set[ data ], + LIBSPECTRUM_BITS_IN_BYTE ); + } + + /* handle bits in last byte correctly */ length += convert_pulses_to_tstates( turbo->bit1_length, turbo->bit0_length, - bits_set[ data ], - LIBSPECTRUM_BITS_IN_BYTE ); + bits_set_in_last_byte, + turbo->bits_in_last_byte ); } - /* handle bits in last byte correctly */ - length += convert_pulses_to_tstates( turbo->bit1_length, - turbo->bit0_length, - bits_set_in_last_byte, - turbo->bits_in_last_byte ); - return length; } @@ -554,23 +556,25 @@ { libspectrum_dword length = convert_ms_to_tstates( pure_data->pause ); size_t i; - int bits_set_in_last_byte = - libspectrum_bits_set_n_bits( pure_data->data[ pure_data->length-1 ], - pure_data->bits_in_last_byte ); + if( pure_data->length ) { + int bits_set_in_last_byte = + libspectrum_bits_set_n_bits( pure_data->data[ pure_data->length-1 ], + pure_data->bits_in_last_byte ); - for( i = 0; i < pure_data->length-1; i++ ) { - libspectrum_byte data = pure_data->data[ i ]; + for( i = 0; i < pure_data->length-1; i++ ) { + libspectrum_byte data = pure_data->data[ i ]; + length += convert_pulses_to_tstates( pure_data->bit1_length, + pure_data->bit0_length, + bits_set[ data ], + LIBSPECTRUM_BITS_IN_BYTE ); + } + + /* handle bits in last byte correctly */ length += convert_pulses_to_tstates( pure_data->bit1_length, pure_data->bit0_length, - bits_set[ data ], - LIBSPECTRUM_BITS_IN_BYTE ); + bits_set_in_last_byte, + pure_data->bits_in_last_byte ); } - - /* handle bits in last byte correctly */ - length += convert_pulses_to_tstates( pure_data->bit1_length, - pure_data->bit0_length, - bits_set_in_last_byte, - pure_data->bits_in_last_byte ); return length; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |