From: <fr...@us...> - 2013-01-26 11:33:28
|
Revision: 4860 http://sourceforge.net/p/fuse-emulator/code/4860 Author: fredm Date: 2013-01-26 11:33:25 +0000 (Sat, 26 Jan 2013) Log Message: ----------- Add support for storing ZX Printer state (bug [#274]). Modified Paths: -------------- trunk/libspectrum/accessor.pl trunk/libspectrum/doc/libspectrum.txt trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/snap_accessors.txt trunk/libspectrum/snapshot.c trunk/libspectrum/szx.c Modified: trunk/libspectrum/accessor.pl =================================================================== --- trunk/libspectrum/accessor.pl 2013-01-26 10:39:28 UTC (rev 4859) +++ trunk/libspectrum/accessor.pl 2013-01-26 11:33:25 UTC (rev 4860) @@ -236,6 +236,9 @@ /* Timings emulation */ int late_timings; + + /* Printer emulation */ + int zx_printer_active; }; /* Initialise a libspectrum_snap structure */ Modified: trunk/libspectrum/doc/libspectrum.txt =================================================================== --- trunk/libspectrum/doc/libspectrum.txt 2013-01-26 10:39:28 UTC (rev 4859) +++ trunk/libspectrum/doc/libspectrum.txt 2013-01-26 11:33:25 UTC (rev 4860) @@ -705,6 +705,8 @@ * int late_timings +* int zx_printer_enabled + Most of those should be fairly self-explanatory; those which may not be are: @@ -729,6 +731,9 @@ should use timings 1 t-state later than usual as in some machines that have warmed up. +* `zx_printer_enabled' being non-zero signals that the emulated Spectrum + has a ZX Printer connected. + * The `beta_*' functions represent the Betadisk interface. `beta_paged' is non-zero if the Betadisk ROM is currently paged in between 0x0000 and 0x3fff and `beta_direction' is non-zero Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2013-01-26 10:39:28 UTC (rev 4859) +++ trunk/libspectrum/hacking/ChangeLog 2013-01-26 11:33:25 UTC (rev 4860) @@ -936,3 +936,5 @@ 20130103 configure.ac: make some URLs point to the new sourceforge forge and update copyright date to 2013 (Sergio). 20130103 configure.ac: add trailing slash to URL of bug tracker (Stuart). +20130126 accessor.pl,doc/libspectrum.txt,snap_accessors.txt,snapshot.c,szx.c: + add support for storing ZX Printer state (bug #274) (Fred). Modified: trunk/libspectrum/snap_accessors.txt =================================================================== --- trunk/libspectrum/snap_accessors.txt 2013-01-26 10:39:28 UTC (rev 4859) +++ trunk/libspectrum/snap_accessors.txt 2013-01-26 11:33:25 UTC (rev 4860) @@ -191,3 +191,5 @@ libspectrum_byte* spectranet_ram 1 int late_timings + +int zx_printer_active Modified: trunk/libspectrum/snapshot.c =================================================================== --- trunk/libspectrum/snapshot.c 2013-01-26 10:39:28 UTC (rev 4859) +++ trunk/libspectrum/snapshot.c 2013-01-26 11:33:25 UTC (rev 4860) @@ -220,6 +220,8 @@ libspectrum_snap_set_spectranet_ram( snap, 0, NULL ); libspectrum_snap_set_late_timings( snap, 0 ); + + libspectrum_snap_set_zx_printer_active( snap, 0 ); return snap; } Modified: trunk/libspectrum/szx.c =================================================================== --- trunk/libspectrum/szx.c 2013-01-26 10:39:28 UTC (rev 4859) +++ trunk/libspectrum/szx.c 2013-01-26 11:33:25 UTC (rev 4860) @@ -128,6 +128,7 @@ #define ZXSTBID_ROM "ROM\0" #define ZXSTBID_ZXPRINTER "ZXPR" +static const libspectrum_word ZXSTPRF_ENABLED = 1; #define ZXSTBID_IF1 "IF1\0" static const libspectrum_word ZXSTIF1F_ENABLED = 1; @@ -333,6 +334,9 @@ write_dirp_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, size_t *length, libspectrum_snap *snap, int page, int compress ); +static libspectrum_error +write_zxpr_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, + size_t *length, int *out_flags, libspectrum_snap *snap ); static void write_chunk_header( libspectrum_byte **buffer, libspectrum_byte **ptr, @@ -1730,6 +1734,27 @@ } static libspectrum_error +read_zxpr_chunk( libspectrum_snap *snap, libspectrum_word version, + const libspectrum_byte **buffer, + const libspectrum_byte *end GCC_UNUSED, size_t data_length, + szx_context *ctx GCC_UNUSED ) +{ + libspectrum_word flags; + + if( data_length != 2 ) { + libspectrum_print_error( LIBSPECTRUM_ERROR_UNKNOWN, + "%s:read_zxpr_chunk: unknown length %lu", + __FILE__, (unsigned long)data_length ); + return LIBSPECTRUM_ERROR_UNKNOWN; + } + + flags = libspectrum_read_word( buffer ); + libspectrum_snap_set_zx_printer_active( snap, flags & ZXSTPRF_ENABLED ); + + return LIBSPECTRUM_ERROR_NONE; +} + +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, @@ -2179,7 +2204,7 @@ { ZXSTBID_ZXATASP, read_zxat_chunk }, { ZXSTBID_ZXCF, read_zxcf_chunk }, { ZXSTBID_ZXCFRAMPAGE, read_cfrp_chunk }, - { ZXSTBID_ZXPRINTER, skip_chunk }, + { ZXSTBID_ZXPRINTER, read_zxpr_chunk }, { ZXSTBID_ZXTAPE, skip_chunk }, }; @@ -2552,6 +2577,9 @@ if( error ) return error; } + error = write_zxpr_chunk( buffer, &ptr, length, out_flags, snap ); + if( error ) return error; + /* Set length to be actual length, not allocated length */ *length = ptr - *buffer; @@ -2830,6 +2858,22 @@ } static libspectrum_error +write_zxpr_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, + size_t *length, int *out_flags, libspectrum_snap *snap ) +{ + libspectrum_word flags; + + write_chunk_header( buffer, ptr, length, ZXSTBID_ZXPRINTER, 2 ); + + flags = 0; + if( libspectrum_snap_zx_printer_active( snap ) ) flags |= ZXSTPRF_ENABLED; + + libspectrum_write_word( ptr, flags ); + + return LIBSPECTRUM_ERROR_NONE; +} + +static libspectrum_error write_rom_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, size_t *length, int *out_flags, libspectrum_snap *snap, int compress ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |