From: <fr...@us...> - 2008-04-16 14:32:31
|
Revision: 3604 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=3604&view=rev Author: fredm Date: 2008-04-16 07:32:19 -0700 (Wed, 16 Apr 2008) Log Message: ----------- Add support for Kempston mouse for szx snapshots. Modified Paths: -------------- trunk/fuse/fuse.c trunk/fuse/hacking/ChangeLog trunk/fuse/kempmouse.c trunk/fuse/kempmouse.h 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/fuse/fuse.c =================================================================== --- trunk/fuse/fuse.c 2008-04-15 13:33:24 UTC (rev 3603) +++ trunk/fuse/fuse.c 2008-04-16 14:32:19 UTC (rev 3604) @@ -1,5 +1,5 @@ /* fuse.c: The Free Unix Spectrum Emulator - Copyright (c) 1999-2007 Philip Kendall + Copyright (c) 1999-2008 Philip Kendall $Id$ @@ -55,6 +55,7 @@ #include "if2.h" #include "joystick.h" #include "keyboard.h" +#include "kempmouse.h" #include "machine.h" #include "memory.h" #include "pokefinder/pokefinder.h" @@ -269,6 +270,7 @@ if( ay_init() ) return 1; if( slt_init() ) return 1; if( profile_init() ) return 1; + if( kempmouse_init() ) return 1; error = pokefinder_clear(); if( error ) return error; Modified: trunk/fuse/hacking/ChangeLog =================================================================== --- trunk/fuse/hacking/ChangeLog 2008-04-15 13:33:24 UTC (rev 3603) +++ trunk/fuse/hacking/ChangeLog 2008-04-16 14:32:19 UTC (rev 3604) @@ -2624,3 +2624,5 @@ 20080415 fuse.c,memory.[ch],menu.c,tape.[ch],ui/win32/win32ui.c: don't use tape traps or auto-load snapshots if we are using a custom ROM as the entry points are very likely to have moved (Fred). +20080417 kempmouse.[ch],fuse.c: write Kempston mouse status to snapshots + (Fred). Modified: trunk/fuse/kempmouse.c =================================================================== --- trunk/fuse/kempmouse.c 2008-04-15 13:33:24 UTC (rev 3603) +++ trunk/fuse/kempmouse.c 2008-04-16 14:32:19 UTC (rev 3604) @@ -1,5 +1,5 @@ /* kempmouse.c: Kempston mouse emulation - Copyright (c) 2004 Darren Salt + Copyright (c) 2004-2008 Darren Salt, Fredrick Meunier $Id$ @@ -28,10 +28,24 @@ #include <libspectrum.h> #include "kempmouse.h" +#include "module.h" #include "periph.h" #include "settings.h" #include "ui/ui.h" +static void kempmouse_from_snapshot( libspectrum_snap *snap ); +static void kempmouse_to_snapshot( libspectrum_snap *snap ); + +static module_info_t kempmouse_module_info = { + + NULL, + NULL, + NULL, + kempmouse_from_snapshot, + kempmouse_to_snapshot, + +}; + static struct { struct { libspectrum_byte x, y; } pos; libspectrum_byte buttons; @@ -60,6 +74,15 @@ const size_t kempmouse_peripherals_count = sizeof( kempmouse_peripherals ) / sizeof( periph_t ); +int +kempmouse_init( void ) +{ + module_register( &kempmouse_module_info ); + + return 0; +} + + void kempmouse_update( int dx, int dy, int btn, int down ) { @@ -72,3 +95,17 @@ kempmouse.buttons |= 1 << btn; } } + +static void +kempmouse_from_snapshot( libspectrum_snap *snap ) +{ + settings_current.kempston_mouse = + libspectrum_snap_kempston_mouse_active( snap ); +} + +static void +kempmouse_to_snapshot( libspectrum_snap *snap ) +{ + libspectrum_snap_set_kempston_mouse_active( snap, + settings_current.kempston_mouse ); +} Modified: trunk/fuse/kempmouse.h =================================================================== --- trunk/fuse/kempmouse.h 2008-04-15 13:33:24 UTC (rev 3603) +++ trunk/fuse/kempmouse.h 2008-04-16 14:32:19 UTC (rev 3604) @@ -1,5 +1,5 @@ /* kempmouse.h: Kempston mouse emulation - Copyright (c) 2004 Darren Salt + Copyright (c) 2004-2008 Darren Salt, Fredrick Meunier $Id$ @@ -32,6 +32,7 @@ extern const periph_t kempmouse_peripherals[]; extern const size_t kempmouse_peripherals_count; +int kempmouse_init( void ); void kempmouse_update( int dx, int dy, int button, int down ); #endif Modified: trunk/libspectrum/accessor.pl =================================================================== --- trunk/libspectrum/accessor.pl 2008-04-15 13:33:24 UTC (rev 3603) +++ trunk/libspectrum/accessor.pl 2008-04-16 14:32:19 UTC (rev 3604) @@ -1,7 +1,7 @@ #!/usr/bin/perl -w # accessor.pl: generate accessor functions -# Copyright (c) 2003-2004 Philip Kendall +# Copyright (c) 2003-2008 Philip Kendall # $Id$ @@ -27,7 +27,7 @@ print << "CODE"; /* snap_accessors.c: simple accessor functions for libspectrum_snap - Copyright (c) 2003-2004 Philip Kendall + Copyright (c) 2003-2008 Philip Kendall This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -174,6 +174,9 @@ size_t joystick_active_count; libspectrum_joystick joystick_list[ SNAPSHOT_JOYSTICKS ]; int joystick_inputs[ SNAPSHOT_JOYSTICKS ]; + + /* Kempston mouse status */ + int kempston_mouse_active; }; /* Initialise a libspectrum_snap structure */ Modified: trunk/libspectrum/doc/libspectrum.txt =================================================================== --- trunk/libspectrum/doc/libspectrum.txt 2008-04-15 13:33:24 UTC (rev 3603) +++ trunk/libspectrum/doc/libspectrum.txt 2008-04-16 14:32:19 UTC (rev 3604) @@ -566,6 +566,8 @@ * libspectrum_joystick joystick_list[ SNAPSHOT_JOYSTICKS ] * int joystick_inputs[ SNAPSHOT_JOYSTICKS ] +* int kempston_mouse_active + Most of those should be fairly self-explanatory; those which may not be are: Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2008-04-15 13:33:24 UTC (rev 3603) +++ trunk/libspectrum/hacking/ChangeLog 2008-04-16 14:32:19 UTC (rev 3604) @@ -633,3 +633,5 @@ for tape acceleration (patch #1880376). 20080409 szx.c: write 2 ROMs totalling 32k for Pentagon 128k and 3 ROMs totalling 48k for newer Pentagon models (Fred). +20080417 accessor.pl,doc/libspectrum.txt,snap_accessors.txt,snapshot.c,szx.c: + add support for Kempston mouse for szx snapshots (Fred). Modified: trunk/libspectrum/snap_accessors.txt =================================================================== --- trunk/libspectrum/snap_accessors.txt 2008-04-15 13:33:24 UTC (rev 3603) +++ trunk/libspectrum/snap_accessors.txt 2008-04-16 14:32:19 UTC (rev 3604) @@ -1,5 +1,5 @@ # snap_accessors.txt: simple accessors for libspectrum_snap -# Copyright (c) 2003 Philip Kendall +# Copyright (c) 2003-2008 Philip Kendall # $Id$ @@ -132,3 +132,5 @@ size_t joystick_active_count libspectrum_joystick joystick_list 1 int joystick_inputs 1 + +int kempston_mouse_active Modified: trunk/libspectrum/snapshot.c =================================================================== --- trunk/libspectrum/snapshot.c 2008-04-15 13:33:24 UTC (rev 3603) +++ trunk/libspectrum/snapshot.c 2008-04-16 14:32:19 UTC (rev 3604) @@ -1,5 +1,5 @@ /* snapshot.c: Snapshot handling routines - Copyright (c) 2001-2003 Philip Kendall, Darren Salt + Copyright (c) 2001-2008 Philip Kendall, Darren Salt $Id$ @@ -168,6 +168,8 @@ libspectrum_snap_set_joystick_inputs( *snap, i, 0 ); } + libspectrum_snap_set_kempston_mouse_active( *snap, 0 ); + return LIBSPECTRUM_ERROR_NONE; } Modified: trunk/libspectrum/szx.c =================================================================== --- trunk/libspectrum/szx.c 2008-04-15 13:33:24 UTC (rev 3603) +++ trunk/libspectrum/szx.c 2008-04-16 14:32:19 UTC (rev 3604) @@ -97,8 +97,18 @@ } szx_joystick_type; #define ZXSTBID_IF2ROM "IF2R" + #define ZXSTBID_MOUSE "AMXM" +typedef enum szx_mouse_type { + + ZXSTM_NONE = 0, + ZXSTM_AMX, + ZXSTM_KEMPSTON, + +} szx_mouse_type; + #define ZXSTBID_ROM "ROM\0" + #define ZXSTBID_ZXPRINTER "ZXPR" #define ZXSTBID_IF1 "IF1\0" @@ -172,6 +182,9 @@ write_spcr_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, size_t *length, libspectrum_snap *snap ); static libspectrum_error +write_amxm_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, + size_t *length, libspectrum_snap *snap ); +static libspectrum_error write_joy_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, size_t *length, int *out_flags, libspectrum_snap *snap ); static libspectrum_error @@ -849,6 +862,39 @@ } 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 ) +{ + if( data_length != 7 ) { + libspectrum_print_error( LIBSPECTRUM_ERROR_UNKNOWN, + "read_amxm_chunk: unknown length %lu", + (unsigned long)data_length ); + return LIBSPECTRUM_ERROR_UNKNOWN; + } + + switch( **buffer ) { + case ZXSTM_AMX: + break; + case ZXSTM_KEMPSTON: + libspectrum_snap_set_kempston_mouse_active( snap, 1 ); + break; + case ZXSTM_NONE: + default: + break; + } + (*buffer)++; + + /* Z80 PIO CTRLA registers for AMX mouse */ + (*buffer)++; (*buffer)++; (*buffer)++; + + /* Z80 PIO CTRLB registers for AMX mouse */ + (*buffer)++; (*buffer)++; (*buffer)++; + + return LIBSPECTRUM_ERROR_NONE; +} + +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 ) @@ -1463,7 +1509,7 @@ { ZXSTBID_JOYSTICK, read_joy_chunk }, { ZXSTBID_KEYBOARD, read_keyb_chunk }, { ZXSTBID_MICRODRIVE, skip_chunk }, - { ZXSTBID_MOUSE, skip_chunk }, + { ZXSTBID_MOUSE, read_amxm_chunk }, { ZXSTBID_MULTIFACE, skip_chunk }, { ZXSTBID_PLUS3DISK, skip_chunk }, { ZXSTBID_PLUSD, read_plsd_chunk }, @@ -1778,6 +1824,11 @@ if( error ) return error; } + if( libspectrum_snap_kempston_mouse_active( snap ) ) { + error = write_amxm_chunk( buffer, &ptr, length, snap ); + if( error ) return error; + } + /* Set length to be actual length, not allocated length */ *length = ptr - *buffer; @@ -2027,6 +2078,29 @@ } static libspectrum_error +write_amxm_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, + size_t *length, libspectrum_snap *snap ) +{ + libspectrum_error error; + + error = write_chunk_header( buffer, ptr, length, ZXSTBID_MOUSE, 7 ); + if( error ) return error; + + if( libspectrum_snap_kempston_mouse_active( snap ) ) + *(*ptr)++ = ZXSTM_KEMPSTON; + else + *(*ptr)++ = ZXSTM_NONE; + + /* Z80 PIO CTRLA registers for AMX mouse */ + *(*ptr)++ = '\0'; *(*ptr)++ = '\0'; *(*ptr)++ = '\0'; + + /* Z80 PIO CTRLB registers for AMX mouse */ + *(*ptr)++ = '\0'; *(*ptr)++ = '\0'; *(*ptr)++ = '\0'; + + return LIBSPECTRUM_ERROR_NONE; +} + +static libspectrum_error write_keyb_chunk( libspectrum_byte **buffer, libspectrum_byte **ptr, size_t *length, int *out_flags, libspectrum_snap *snap ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |