diff -cr mame074/makefile w074new/makefile
*** mame074/makefile	Tue Sep 16 19:03:12 2003
--- w074new/makefile	Fri Sep 19 22:29:02 2003
***************
*** 14,20 ****
  USE_CUSTOM_BUTTON=1
  USE_INP_CAPTION=1
  USE_AUTO_PAUSE_PLAYBACK=1
! USE_NEOGEO_HACKS=1
  # USE_UPX=1
  # LAMER=1
  
--- 14,20 ----
  USE_CUSTOM_BUTTON=1
  USE_INP_CAPTION=1
  USE_AUTO_PAUSE_PLAYBACK=1
! # USE_NEOGEO_HACKS=1
  # USE_UPX=1
  # LAMER=1
  
diff -cr mame074/src/drivers/polyplay.c w074new/src/drivers/polyplay.c
*** mame074/src/drivers/polyplay.c	Thu May 15 12:55:40 2003
--- w074new/src/drivers/polyplay.c	Fri Sep 19 22:26:14 2003
***************
*** 81,86 ****
--- 81,87 ----
  #include "driver.h"
  #include "vidhrdw/generic.h"
  #include "cpu/z80/z80.h"
+ #include "machine/random.h"
  
  /* video hardware access */
  extern unsigned char *polyplay_characterram;
***************
*** 268,274 ****
  
  static READ_HANDLER( polyplay_random_read )
  {
! 	return rand() & 0xff;
  }
  
  /* graphic structures */
--- 269,275 ----
  
  static READ_HANDLER( polyplay_random_read )
  {
! 	return mame_rand() & 0xff;
  }
  
  /* graphic structures */
diff -cr mame074/src/drivers/psikyo.c w074new/src/drivers/psikyo.c
*** mame074/src/drivers/psikyo.c	Thu May 15 12:55:46 2003
--- w074new/src/drivers/psikyo.c	Fri Sep 19 22:23:38 2003
***************
*** 1496,1502 ****
  	/* basic machine hardware */
  	MDRV_CPU_ADD(M68EC020, 16000000)
  	MDRV_CPU_MEMORY(psikyo_readmem,psikyo_writemem)
! 	MDRV_CPU_VBLANK_INT(irq1_line_hold,1)
  
  	MDRV_CPU_ADD(Z80, 4000000)	/* ! LZ8420M (Z80 core) ! */
  	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
--- 1496,1502 ----
  	/* basic machine hardware */
  	MDRV_CPU_ADD(M68EC020, 16000000)
  	MDRV_CPU_MEMORY(psikyo_readmem,psikyo_writemem)
! 	MDRV_CPU_VBLANK_INT(irq1_line_hold,2)
  
  	MDRV_CPU_ADD(Z80, 4000000)	/* ! LZ8420M (Z80 core) ! */
  	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
diff -cr mame074/src/drivers/rohga.c w074new/src/drivers/rohga.c
*** mame074/src/drivers/rohga.c	Mon Sep 15 04:18:24 2003
--- w074new/src/drivers/rohga.c	Fri Sep 19 22:23:00 2003
***************
*** 308,314 ****
  	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 )
  	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 )
  	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
! 	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
  	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
  	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
  	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
--- 308,314 ----
  	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 )
  	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 )
  	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
! 	PORT_BIT_IMPULSE( 0x0080, IP_ACTIVE_LOW, IPT_START1, 1 )
  	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
  	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
  	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
***************
*** 316,322 ****
  	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
  	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
  	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED )
! 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 )
  
  	PORT_START
  	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
--- 316,322 ----
  	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
  	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
  	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED )
! 	PORT_BIT_IMPULSE( 0x8000, IP_ACTIVE_LOW, IPT_START2, 1 )
  
  	PORT_START
  	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
diff -cr mame074/src/inptport.c w074new/src/inptport.c
*** mame074/src/inptport.c	Tue Sep 16 17:27:12 2003
--- w074new/src/inptport.c	Fri Sep 19 22:12:50 2003
***************
*** 46,51 ****
--- 46,59 ----
  extern void *playback;
  static int	pback;
  
+ // W: game speed storage
+ extern unsigned short framer;
+ static unsigned short hold;
+ 
+ // W: Average speed calculation
+ double speed_total;
+ unsigned int speed_counter;
+ 
  extern unsigned int dispensed_tickets;
  extern unsigned int coins[COIN_COUNTERS];
  extern unsigned int lastcoin[COIN_COUNTERS];
***************
*** 3143,3155 ****
  	if (playback && pback)
  	{
  		int i;
  
  		ib=0;
  		in = Machine->input_ports;
  		in++;
! 		for (i = 0; i < MAX_INPUT_PORTS; i ++)
  		{
! 			if(readword(playback,&input_port_value[i])) {
  				pback = 0;
  				usrintf_showmessage(_("End of playback"));
  #ifdef AUTO_PAUSE_PLAYBACK
--- 3151,3164 ----
  	if (playback && pback)
  	{
  		int i;
+ 		short buf[MAX_INPUT_PORTS+1];  /* W: Buffer to read data into */
  
  		ib=0;
  		in = Machine->input_ports;
  		in++;
! 		for (i = 0; i < MAX_INPUT_PORTS+1; i ++)
  		{
! 			if(readword(playback,&buf[i])) {
  				pback = 0;
  				usrintf_showmessage(_("End of playback"));
  #ifdef AUTO_PAUSE_PLAYBACK
***************
*** 3158,3163 ****
--- 3167,3179 ----
  #endif /* AUTO_PAUSE_PLAYBACK */
  				break;
  			}
+ 			else
+ 			{
+ 				if(i == MAX_INPUT_PORTS)
+ 					framer = buf[i];
+ 				else
+ 					input_port_value[i] = buf[i];
+ 			}
  
  			/* check if the input port includes an IPF_RESETCPU bit
  			   and reset the CPU on first "press", no need to check
***************
*** 3178,3183 ****
--- 3194,3205 ----
  			}
  			if (in->type == IPT_PORT) in++;
  		}
+ 		// For average speed calculations
+ 		if(!mame_feof(playback)) 
+ 		{
+ 			speed_counter++;
+ 			speed_total += (framer - 0x823e);
+ 		}
  
  		in = Machine->input_ports;
  		in++;
***************
*** 3198,3213 ****
  		}
  	}
  
! #ifdef MESS
! 	inputx_update(input_port_value);
! #endif
! 
! 	if (record)
  	{
  		int i;
  
  		for (i = 0; i < MAX_INPUT_PORTS; i ++)
  			writeword(record,input_port_value[i]);
  	}
  #ifdef MAME_NET
  	if ( net_active() && (default_player != NET_SPECTATOR) )
--- 3220,3234 ----
  		}
  	}
  
! 	else if (record)
  	{
  		int i;
  
  		for (i = 0; i < MAX_INPUT_PORTS; i ++)
  			writeword(record,input_port_value[i]);
+ 		hold = 0x823e + framer;
+ 		writeword(record,hold);
+ 
  	}
  #ifdef MAME_NET
  	if ( net_active() && (default_player != NET_SPECTATOR) )
diff -cr mame074/src/mame.c w074new/src/mame.c
*** mame074/src/mame.c	Mon Sep 15 04:18:24 2003
--- w074new/src/mame.c	Fri Sep 19 22:00:00 2003
***************
*** 577,583 ****
  				/* load the NVRAM now */
  				if (Machine->drv->nvram_handler)
  				{
! 					if (record || playback)
  						(*Machine->drv->nvram_handler)(0,0);
  					else
  					{
--- 577,583 ----
  				/* load the NVRAM now */
  				if (Machine->drv->nvram_handler)
  				{
! 					if ((record || playback) && !options.allownvram)
  						(*Machine->drv->nvram_handler)(0,0);
  					else
  					{
diff -cr mame074/src/mame.h w074new/src/mame.h
*** mame074/src/mame.h	Mon Sep 15 04:18:24 2003
--- w074new/src/mame.h	Fri Sep 19 22:00:54 2003
***************
*** 266,271 ****
--- 266,272 ----
  #ifdef AUTO_PAUSE_PLAYBACK
  	int		auto_pause_playback;	/* automatic pause after playback is finished */
  #endif /* AUTO_PAUSE_PLAYBACK */
+ 	int     allownvram;  /* allows NVRAM to be used when recording or playing INPs */
  };
  
  
diff -cr mame074/src/osdepend.h w074new/src/osdepend.h
*** mame074/src/osdepend.h	Sat Aug  9 02:53:02 2003
--- w074new/src/osdepend.h	Fri Sep 19 22:02:28 2003
***************
*** 274,280 ****
  {
  	char name[9];      /* 8 bytes for game->name + NUL */
  	char version[3];   /* byte[0] = 0, byte[1] = version byte[2] = beta_version */
! 	char reserved[20]; /* for future use, possible store game options? */
  } INP_HEADER;
  
  
--- 274,286 ----
  {
  	char name[9];      /* 8 bytes for game->name + NUL */
  	char version[3];   /* byte[0] = 0, byte[1] = version byte[2] = beta_version */
! 	char options;  /* Store some options */
! 	char fskip;    /* Store fskip value */
! 	char reserved[2]; /* for future use, possible store game options? */
! 	INT64 spd;  /* recorded clock speed */
! 	long timestamp; /* date/time INP was started */
! 	char reserved2[2];
! 	unsigned short check;  /* checksum */
  } INP_HEADER;
  
  
diff -cr mame074/src/usrintrf.c w074new/src/usrintrf.c
*** mame074/src/usrintrf.c	Mon Sep 15 04:27:00 2003
--- w074new/src/usrintrf.c	Fri Sep 19 22:07:50 2003
***************
*** 121,127 ****
  static int wave_counter;
  #endif /* LOGWAVE */
  
! 
  
  /***************************************************************************
  
--- 121,129 ----
  static int wave_counter;
  #endif /* LOGWAVE */
  
! // W: for speed storage
! extern void* record;
! extern unsigned short framer;
  
  /***************************************************************************
  
***************
*** 5414,5420 ****
  		"Press Select key/button to quit,\n"
  		"Cancel key/button to continue.";
  
! 	if (!options.confirm_quit)
  		return 1;
  
  	while (1)
--- 5416,5422 ----
  		"Press Select key/button to quit,\n"
  		"Cancel key/button to continue.";
  
! 	if (!options.confirm_quit || record)
  		return 1;
  
  	while (1)
***************
*** 5588,5600 ****
  	if (input_ui_pressed(IPT_UI_RESET_MACHINE))
  		machine_reset();
  
! 	if (input_ui_pressed(IPT_UI_SAVE_STATE))
  		do_loadsave(bitmap, LOADSAVE_SAVE);
  
! 	if (input_ui_pressed(IPT_UI_LOAD_STATE))
  		do_loadsave(bitmap, LOADSAVE_LOAD);
  
! 	if (auto_pause || single_step || input_ui_pressed(IPT_UI_PAUSE)) /* pause the game */
  	{
  /*		osd_selected = 0;	   disable on screen display, since we are going   */
  							/* to change parameters affected by it */
--- 5590,5602 ----
  	if (input_ui_pressed(IPT_UI_RESET_MACHINE))
  		machine_reset();
  
! 	if (input_ui_pressed(IPT_UI_SAVE_STATE) && !record)
  		do_loadsave(bitmap, LOADSAVE_SAVE);
  
! 	if (input_ui_pressed(IPT_UI_LOAD_STATE) && !record)
  		do_loadsave(bitmap, LOADSAVE_LOAD);
  
! 	if ((auto_pause || single_step || input_ui_pressed(IPT_UI_PAUSE)) && !record) /* pause the game */
  	{
  /*		osd_selected = 0;	   disable on screen display, since we are going   */
  							/* to change parameters affected by it */
***************
*** 5663,5676 ****
  				}
  			}
  
! 			if (input_ui_pressed(IPT_UI_SAVE_STATE))
  				do_loadsave(bitmap, LOADSAVE_SAVE);
  
! 			if (input_ui_pressed(IPT_UI_LOAD_STATE))
  				do_loadsave(bitmap, LOADSAVE_LOAD);
  
  			/* if the user pressed F4, show the character set */
! 			if (input_ui_pressed(IPT_UI_SHOW_GFX))
  				showcharset(bitmap);
  
  			if (setup_selected == 0 && input_ui_pressed(IPT_UI_CANCEL))
--- 5665,5678 ----
  				}
  			}
  
! 			if (input_ui_pressed(IPT_UI_SAVE_STATE) && !record)
  				do_loadsave(bitmap, LOADSAVE_SAVE);
  
! 			if (input_ui_pressed(IPT_UI_LOAD_STATE) && !record)
  				do_loadsave(bitmap, LOADSAVE_LOAD);
  
  			/* if the user pressed F4, show the character set */
! 			if (input_ui_pressed(IPT_UI_SHOW_GFX) && !record)
  				showcharset(bitmap);
  
  			if (setup_selected == 0 && input_ui_pressed(IPT_UI_CANCEL))
***************
*** 5795,5800 ****
--- 5797,5809 ----
  
  	if (show_profiler) profiler_show(bitmap);
  
+ 	/* W: Store speed */
+ 	if(record) 
+ 	{
+ 		const struct performance_info *performance = mame_get_performance_info();
+ 
+ 		framer = (int)(performance->game_speed_percent + 0.5);
+ 	}
  
  	/* show FPS display? */
  	if (input_ui_pressed(IPT_UI_SHOW_FPS))
***************
*** 5805,5811 ****
  
  
  	/* if the user pressed F4, show the character set */
! 	if (input_ui_pressed(IPT_UI_SHOW_GFX))
  	{
  		osd_sound_enable(0);
  
--- 5814,5820 ----
  
  
  	/* if the user pressed F4, show the character set */
! 	if (input_ui_pressed(IPT_UI_SHOW_GFX) && !record)
  	{
  		osd_sound_enable(0);
  
***************
*** 5814,5820 ****
  		osd_sound_enable(1);
  	}
  
! 	if (input_ui_pressed(IPT_UI_TOGGLE_AUTOFIRE))
  	{
  		extern void toggle_autofire(void);
  
--- 5823,5829 ----
  		osd_sound_enable(1);
  	}
  
! 	if (input_ui_pressed(IPT_UI_TOGGLE_AUTOFIRE) && !record)
  	{
  		extern void toggle_autofire(void);
  
diff -cr mame074/src/windows/config.c w074new/src/windows/config.c
*** mame074/src/windows/config.c	Mon Sep 15 04:18:26 2003
--- w074new/src/windows/config.c	Fri Sep 19 23:48:32 2003
***************
*** 35,40 ****
--- 35,41 ----
  #include "video.h"
  #include "fileio.h"
  #include "ui_lang.h"
+ #include <mmsystem.h>
  
  extern struct rc_option frontend_opts[];
  extern struct rc_option fileio_opts[];
***************
*** 52,57 ****
--- 53,62 ----
  extern int frontend_help(char *gamename);
  static int config_handle_arg(char *arg);
  
+ cycles_t get_cycles(void);
+ extern int win_high_priority;
+ extern int frameskip;
+ 
  static FILE *logfile;
  static int maxlogsize;
  static int curlogsize;
***************
*** 267,272 ****
--- 272,278 ----
  	{ "m68k_c_core", "m68c", rc_bool, &options.m68k_c_core, "1", 0, 0, NULL, "change m68000 & m68010 core" },
  #endif /* (HAS_M68000 || HAS_M68010 || HAS_M68EC020 || HAS_M68020) */
  //ks hcmame e switch m68k core
+ 	{ "allownvram", "allownv", rc_bool, &options.allownvram, "0", 0, 0, NULL, "Allow the use of NVRAM when recording or playing back INPs" },
  #ifdef UI_COLOR_DISPLAY
  	/* palette */
  	{ NULL, NULL, rc_link, palette_opts, NULL, 0,	0, NULL, NULL },
***************
*** 555,563 ****
--- 561,594 ----
  	if (options.playback)
  	{
  		INP_HEADER inp_header;
+ 		int a;
+ 		unsigned short chk = 0;
+ 		short* ptr;
  
  		/* read playback header */
  		mame_fread(options.playback, &inp_header, sizeof(INP_HEADER));
+ 		if (inp_header.version[0] != 'W' || inp_header.version[1] < 70)
+ 		{
+ 			fprintf(stderr,"Not an WolfMAME Plus 0.70 or later INP file\n");
+ 			exit(1);
+ 		}
+ 		
+ 		printf(_WINDOWS("Recorded system's speed = ~%I64iMHz\n"),(inp_header.spd / 1000000));
+ 		if(inp_header.options & 0x02)
+ 			printf(_WINDOWS("This recording was made with the C 68k core enabled\n"));
+ 		else
+ 			printf(_WINDOWS("This recording was made with the ASM 68k core enabled\n"));
+ 		if(inp_header.options & 0x01)
+ 			printf(_WINDOWS("This recording has cheats enabled\n"));
+ 		printf("Start date of recording: %s\n",ctime(&inp_header.timestamp));
+ 
+ 		(INP_HEADER*)ptr = &inp_header;
+ 		for(a=0;a<14;a++)
+ 			chk+=(short)*(ptr+a);
+ 		if(inp_header.check != chk)
+ 			printf(_WINDOWS("Check failed.  Expected %04x, found %04x\n"),chk,inp_header.check);
+ 		else
+ 			printf(_WINDOWS("Checks out OK. [%04x]\n"),chk);
  
  		if (!isalnum(inp_header.name[0])) /* If first byte is not alpha-numeric */
  			mame_fseek(options.playback, 0, SEEK_SET); /* old .inp file - no header */
***************
*** 685,690 ****
--- 716,725 ----
  	if (options.record)
  	{
  		INP_HEADER inp_header;
+ 		cycles_t a,b;
+ 		int start,end,priority;
+ 		unsigned short chk = 0;
+ 		short* ptr;
  
  		memset(&inp_header, '\0', sizeof(INP_HEADER));
  		strcpy(inp_header.name, drivers[game_index]->name);
***************
*** 697,702 ****
--- 732,779 ----
  		   inp_header.version[1] = VERSION;
  		   inp_header.version[2] = BETA_VERSION;
  		 */
+ 		inp_header.version[0] = 'W';
+ 	    inp_header.version[1] = 70;
+ 		inp_header.version[2] = 5;
+ 
+ 		inp_header.options = 0;
+ 		inp_header.options += options.cheat;
+ 		inp_header.options += options.m68k_c_core*2;
+ 		inp_header.fskip = frameskip;
+ 
+ 		// temporarily set our priority higher
+ 		priority = GetThreadPriority(GetCurrentThread());
+ 		SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
+ 
+ 		// wait for an edge on the timeGetTime call
+ 		start = timeGetTime();
+ 		do
+ 		{
+ 			end = timeGetTime();
+ 		} while (start == end);
+ 
+ 		a = get_cycles();
+ 		// now wait for 1/4 second total
+ 		do
+ 		{
+ 			start = timeGetTime();
+ 		} while (start - end < 250);
+ 		b = get_cycles();
+ 
+ 		// restore our priority
+ 		// raise it if the config option is set and the debugger is not active
+ 		if (win_high_priority && !options.mame_debug && priority == THREAD_PRIORITY_NORMAL)
+ 			priority = THREAD_PRIORITY_ABOVE_NORMAL;
+ 		SetThreadPriority(GetCurrentThread(), priority);
+ 
+ 		inp_header.spd = (b - a)* 4;
+ 		inp_header.timestamp = (long)time(NULL);
+ 
+ 		(INP_HEADER*)ptr = &inp_header;
+ 		for(a=0;a<14;a++)
+ 			chk+=(short)*(ptr+a);
+ 		inp_header.check = chk;
+ 
  		mame_fwrite(options.record, &inp_header, sizeof(INP_HEADER));
  	}
  
***************
*** 989,991 ****
--- 1066,1082 ----
  
  	return newname;
  }
+ 
+ // copied for use here.
+ cycles_t get_cycles(void)
+ {
+ 	INT64 result;
+ 
+ 	// use RDTSC
+ 	__asm__ __volatile__ (
+ 		"rdtsc"
+ 		: "=A" (result)
+ 	);
+ 
+ 	return result;
+ }
diff -cr mame074/src/windows/video.c w074new/src/windows/video.c
*** mame074/src/windows/video.c	Mon Sep 15 04:18:26 2003
--- w074new/src/windows/video.c	Fri Sep 19 22:16:48 2003
***************
*** 41,46 ****
--- 41,52 ----
  // from wind3dfx.c
  extern struct rc_option win_d3d_opts[];
  
+ // W: From window.c
+ extern unsigned short framer;
+ extern void* record;
+ extern void* playback;
+ extern double speed_total;
+ extern unsigned int speed_counter;
  
  
  //============================================================
***************
*** 572,577 ****
--- 578,585 ----
  	{
  		cycles_t cps = osd_cycles_per_second();
  		printf(_WINDOWS("Average FPS: %f (%d frames)\n"), (double)cps / (end_time - start_time) * frames_displayed, frames_displayed);
+ 		if(playback)
+ 			printf(_WINDOWS("Average recorded speed: %f%% (%d total frames)\n"),speed_total / speed_counter, speed_counter);
  	}
  }
  
***************
*** 619,624 ****
--- 627,636 ----
  	{
  		dest += sprintf(dest, "\n %d partial updates", performance->partial_updates_this_frame);
  	}
+     if(playback && !mame_feof(playback))
+     {
+ 	      dest += sprintf(dest, "\n Recorded speed: %4u%%",framer - 0x823e);
+     }
  
  	/* return a pointer to the static buffer */
  	return buffer;
***************
*** 686,692 ****
  	}
  
  	// toggle throttle?
! 	if (input_ui_pressed(IPT_UI_THROTTLE))
  	{
  		throttle ^= 1;
  
--- 698,704 ----
  	}
  
  	// toggle throttle?
! 	if (input_ui_pressed(IPT_UI_THROTTLE) && !record)
  	{
  		throttle ^= 1;
  
diff -cr mame074/src/windows/window.c w074new/src/windows/window.c
*** mame074/src/windows/window.c	Mon Sep 15 12:29:52 2003
--- w074new/src/windows/window.c	Fri Sep 19 22:14:12 2003
***************
*** 132,137 ****
--- 132,139 ----
  int win_physical_width;
  int win_physical_height;
  
+ // W: speed storage
+ unsigned short framer;
  
  
  //============================================================
Only in w074new: wolfmameplus.txt
