From: <fr...@us...> - 2011-04-27 11:54:58
|
Revision: 4387 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=4387&view=rev Author: fredm Date: 2011-04-27 11:54:52 +0000 (Wed, 27 Apr 2011) Log Message: ----------- Directly store pause tstates values in blocks to allow access to either original values or native tstates values. Modified Paths: -------------- trunk/libspectrum/doc/libspectrum.txt trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/tape.c trunk/libspectrum/tape_accessors.txt trunk/libspectrum/tape_block.c trunk/libspectrum/tape_block.h trunk/libspectrum/utilities.c Modified: trunk/libspectrum/doc/libspectrum.txt =================================================================== --- trunk/libspectrum/doc/libspectrum.txt 2011-04-27 06:39:20 UTC (rev 4386) +++ trunk/libspectrum/doc/libspectrum.txt 2011-04-27 11:54:52 UTC (rev 4387) @@ -1121,13 +1121,22 @@ int offsets[] SELECT -libspectrum_dword pause MESSAGE +libspectrum_dword pause GENERALISED_DATA + MESSAGE PAUSE PURE_DATA RAW_DATA ROM TURBO +libspectrum_dword pause_tstates GENERALISED_DATA + MESSAGE + PAUSE + PURE_DATA + RAW_DATA + ROM + TURBO + libspectrum_dword pilot_length TURBO size_t pilot_pulses TURBO Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2011-04-27 06:39:20 UTC (rev 4386) +++ trunk/libspectrum/hacking/ChangeLog 2011-04-27 11:54:52 UTC (rev 4387) @@ -829,3 +829,6 @@ 20110427 z80.c: initialise machine_type to avoid a warning (Fred). 20110427 test/test.c: test needed updating for ROM block duration fix (Fred). 20110427 tzx_read.c: message time in the TZX is in seconds not ms (Fred). +20110427 doc/libspectrum.txt,tape.c,tape_accessors.txt,tape_block.[ch], + utilities.c: directly store pause tstates values in blocks to allow + access to either original values or native tstates values (Fred). Modified: trunk/libspectrum/tape.c =================================================================== --- trunk/libspectrum/tape.c 2011-04-27 06:39:20 UTC (rev 4386) +++ trunk/libspectrum/tape.c 2011-04-27 11:54:52 UTC (rev 4387) @@ -366,8 +366,7 @@ break; case LIBSPECTRUM_TAPE_BLOCK_PAUSE: - *tstates = libspectrum_ms_to_tstates( block->types.pause.length ); - end_of_block = 1; + *tstates = block->types.pause.length_tstates; end_of_block = 1; /* 0 ms pause => stop tape */ if( *tstates == 0 ) { *flags |= LIBSPECTRUM_TAPE_FLAGS_STOP; } break; @@ -527,7 +526,7 @@ case LIBSPECTRUM_TAPE_STATE_PAUSE: /* The pause at the end of the block */ - *tstates = libspectrum_ms_to_tstates( block->pause ); + *tstates = block->pause_tstates; *end_of_block = 1; break; @@ -624,7 +623,7 @@ case LIBSPECTRUM_TAPE_STATE_PAUSE: /* The pause at the end of the block */ - *tstates = libspectrum_ms_to_tstates( block->pause ); + *tstates = block->pause_tstates; *end_of_block = 1; break; @@ -732,7 +731,7 @@ case LIBSPECTRUM_TAPE_STATE_PAUSE: /* The pause at the end of the block */ - *tstates = libspectrum_ms_to_tstates( block->pause ); + *tstates = block->pause_tstates; *end_of_block = 1; break; @@ -800,7 +799,7 @@ case LIBSPECTRUM_TAPE_STATE_PAUSE: /* The pause at the end of the block */ - *tstates = libspectrum_ms_to_tstates( block->pause ); + *tstates = block->pause_tstates; *end_of_block = 1; break; @@ -960,7 +959,7 @@ case LIBSPECTRUM_TAPE_STATE_PAUSE: /* The pause at the end of the block */ - *tstates = libspectrum_ms_to_tstates( block->pause ); + *tstates = block->pause_tstates; *end_of_block = 1; break; Modified: trunk/libspectrum/tape_accessors.txt =================================================================== --- trunk/libspectrum/tape_accessors.txt 2011-04-27 06:39:20 UTC (rev 4386) +++ trunk/libspectrum/tape_accessors.txt 2011-04-27 11:54:52 UTC (rev 4387) @@ -117,6 +117,15 @@ rom turbo +libspectrum_dword pause_tstates 0 -1 + generalised_data + message time_tstates + pause length_tstates + pure_data + raw_data + rom + turbo + libspectrum_dword pilot_length 0 -1 turbo Modified: trunk/libspectrum/tape_block.c =================================================================== --- trunk/libspectrum/tape_block.c 2011-04-27 06:39:20 UTC (rev 4386) +++ trunk/libspectrum/tape_block.c 2011-04-27 11:54:52 UTC (rev 4387) @@ -486,7 +486,7 @@ static libspectrum_dword rom_block_length( libspectrum_tape_rom_block *rom ) { - libspectrum_dword length = libspectrum_ms_to_tstates( rom->pause ); + libspectrum_dword length = rom->pause_tstates; size_t i; size_t edge_count = rom->length && rom->data[0] & 0x80 ? @@ -513,7 +513,7 @@ libspectrum_dword length = turbo->pilot_pulses * turbo->pilot_length + turbo->sync1_length + turbo->sync2_length + - libspectrum_ms_to_tstates( turbo->pause ); + turbo->pause_tstates; size_t i; if( turbo->length ) { int bits_set_in_last_byte = @@ -552,7 +552,7 @@ static libspectrum_dword pure_data_block_length( libspectrum_tape_pure_data_block *pure_data ) { - libspectrum_dword length = libspectrum_ms_to_tstates( pure_data->pause ); + libspectrum_dword length = pure_data->pause_tstates; size_t i; if( pure_data->length ) { int bits_set_in_last_byte = @@ -580,7 +580,7 @@ static libspectrum_dword raw_data_block_length( libspectrum_tape_raw_data_block *raw_data ) { - libspectrum_dword length = libspectrum_ms_to_tstates( raw_data->pause ); + libspectrum_dword length = raw_data->pause_tstates; length += ( LIBSPECTRUM_BITS_IN_BYTE * raw_data->length - ( LIBSPECTRUM_BITS_IN_BYTE - raw_data->bits_in_last_byte ) ) * @@ -647,7 +647,7 @@ case LIBSPECTRUM_TAPE_BLOCK_PURE_DATA: return pure_data_block_length( &block->types.pure_data ); case LIBSPECTRUM_TAPE_BLOCK_PAUSE: - return libspectrum_ms_to_tstates( block->types.pause.length ); + return block->types.pause.length_tstates; case LIBSPECTRUM_TAPE_BLOCK_RAW_DATA: return raw_data_block_length( &block->types.raw_data ); case LIBSPECTRUM_TAPE_BLOCK_RLE_PULSE: Modified: trunk/libspectrum/tape_block.h =================================================================== --- trunk/libspectrum/tape_block.h 2011-04-27 06:39:20 UTC (rev 4386) +++ trunk/libspectrum/tape_block.h 2011-04-27 11:54:52 UTC (rev 4387) @@ -40,6 +40,7 @@ size_t length; /* How long is this block */ libspectrum_byte *data; /* The actual data */ libspectrum_dword pause; /* Pause after block (milliseconds) */ + libspectrum_dword pause_tstates; /* Pause after block (tstates) */ } libspectrum_tape_rom_block; @@ -67,6 +68,7 @@ size_t bits_in_last_byte; /* How many bits are in the last byte? */ libspectrum_byte *data; /* The actual data */ libspectrum_dword pause; /* Pause after data (in ms) */ + libspectrum_dword pause_tstates; /* Pause after block (tstates) */ libspectrum_dword pilot_length; /* Length of pilot pulse (in tstates) */ size_t pilot_pulses; /* Number of pilot pulses */ @@ -132,6 +134,7 @@ size_t bits_in_last_byte; /* How many bits are in the last byte? */ libspectrum_byte *data; /* The actual data */ libspectrum_dword pause; /* Pause after data (in ms) */ + libspectrum_dword pause_tstates; /* Pause after block (tstates) */ libspectrum_dword bit0_length, bit1_length; /* Length of (re)set bits */ @@ -159,6 +162,7 @@ size_t bits_in_last_byte; /* How many bits are in the last byte? */ libspectrum_byte *data; /* The actual data */ libspectrum_dword pause; /* Pause after data (in ms) */ + libspectrum_dword pause_tstates; /* Pause after block (tstates) */ libspectrum_dword bit_length; /* Bit length. *Not* pulse length! */ @@ -198,6 +202,7 @@ typedef struct libspectrum_tape_generalised_data_block { libspectrum_dword pause; /* Pause after data (in ms) */ + libspectrum_dword pause_tstates; /* Pause after block (tstates) */ libspectrum_tape_generalised_data_symbol_table pilot_table, data_table; @@ -228,10 +233,13 @@ } libspectrum_tape_generalised_data_block_state; -/* A pause block */ +/* A pause block - some formats use pause in ms, some use tstates. Fuse uses + tstates but wants to be able to write back the original value to a file + if re-saved so store both */ typedef struct libspectrum_tape_pause_block { libspectrum_dword length; + libspectrum_dword length_tstates; } libspectrum_tape_pause_block; @@ -285,6 +293,7 @@ typedef struct libspectrum_tape_message_block { int time; + int time_tstates; char *text; } libspectrum_tape_message_block; Modified: trunk/libspectrum/utilities.c =================================================================== --- trunk/libspectrum/utilities.c 2011-04-27 06:39:20 UTC (rev 4386) +++ trunk/libspectrum/utilities.c 2011-04-27 11:54:52 UTC (rev 4387) @@ -48,12 +48,15 @@ libspectrum_dword pause_ms ) { libspectrum_tape_block_set_pause( block, pause_ms ); + libspectrum_tape_block_set_pause_tstates( block, + libspectrum_ms_to_tstates( pause_ms ) ); } void libspectrum_set_pause_tstates( libspectrum_tape_block *block, libspectrum_dword pause_tstates ) { + libspectrum_tape_block_set_pause_tstates( block, pause_tstates ); libspectrum_tape_block_set_pause( block, libspectrum_tstates_to_ms( pause_tstates ) ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |