diff --git a/Config/Supermodel.ini b/Config/Supermodel.ini index e6c168d..4ccb79b 100644 --- a/Config/Supermodel.ini +++ b/Config/Supermodel.ini @@ -17,12 +17,12 @@ ; individual games, place settings under sections with the same name as the ; corresponding MAME ROM set, like so: ; -; ; Scud Race -; [ scud ] +; ; Scud Race +; [ scud ] ; -; SoundVolume = 50 -; MusicVolume = 200 -; ; ... etc. ... +; SoundVolume = 50 +; MusicVolume = 200 +; ; ... etc. ... ; ; Input mappings are an exceptional case: they are only allowed in the global ; section. Per-game input mappings are not supported. @@ -32,7 +32,7 @@ ; -[ Global ] ; Input settings can only be read from the global section! +[ Global ] ; Input settings can only be read from the global section! ; Common InputStart1 = "KEY_1,JOY1_BUTTON9" @@ -79,9 +79,9 @@ InputLongPass2 = "JOY2_BUTTON2" InputShoot2 = "JOY2_BUTTON3" ; Steering wheel -InputSteeringLeft = "KEY_LEFT" ; digital, turn wheel left -InputSteeringRight = "KEY_RIGHT" ; digital, turn wheel right -InputSteering = "JOY1_XAXIS" ; analog, full steering range +InputSteeringLeft = "KEY_LEFT" ; digital, turn wheel left +InputSteeringRight = "KEY_RIGHT" ; digital, turn wheel right +InputSteering = "JOY1_XAXIS" ; analog, full steering range ; Pedals InputAccelerator = "KEY_UP,JOY1_UP" @@ -93,8 +93,8 @@ InputGearShift2 = "KEY_W,JOY1_BUTTON6" InputGearShift3 = "KEY_E,JOY1_BUTTON7" InputGearShift4 = "KEY_R,JOY1_BUTTON8" InputGearShiftN = "KEY_T" -InputGearShiftUp = "NONE" ; sequential shift up -InputGearShiftDown = "NONE" ; sequential shift down +InputGearShiftUp = "NONE" ; sequential shift up +InputGearShiftDown = "NONE" ; sequential shift down ; View buttons InputVR1 = "KEY_A,JOY1_BUTTON1" @@ -102,9 +102,10 @@ InputVR2 = "KEY_S,JOY1_BUTTON2" InputVR3 = "KEY_D,JOY1_BUTTON3" InputVR4 = "KEY_F,JOY1_BUTTON4" -; Sega Rally 2 and Dirt Devils +; Miscellaneous driving game buttons: Sega Rally 2, Dirt Devils, Emergency Car +; Ambulance InputViewChange = "KEY_A,JOY1_BUTTON1" -InputHandBrake = "KEY_S,JOY1_BUTTON2" ; Sega Rally 2 only +InputHandBrake = "KEY_S,JOY1_BUTTON2" ; Sega Rally 2 only ; Virtual On macros InputTwinJoyTurnLeft = "KEY_Q,JOY1_RXAXIS_NEG" @@ -133,25 +134,25 @@ InputTwinJoyTurbo1 = "KEY_Z,JOY1_BUTTON7" InputTwinJoyTurbo2 = "KEY_X,JOY1_BUTTON8" ; Analog joystick (e.g. Star Wars Trilogy) -InputAnalogJoyLeft = "KEY_LEFT" ; digital, move left -InputAnalogJoyRight = "KEY_RIGHT" ; digital, move right -InputAnalogJoyUp = "KEY_UP" ; digital, move up -InputAnalogJoyDown = "KEY_DOWN" ; digital, move down -InputAnalogJoyX = "JOY_XAXIS,MOUSE_XAXIS" ; analog, full X axis -InputAnalogJoyY = "JOY_YAXIS,MOUSE_YAXIS" ; analog, full Y axis +InputAnalogJoyLeft = "KEY_LEFT" ; digital, move left +InputAnalogJoyRight = "KEY_RIGHT" ; digital, move right +InputAnalogJoyUp = "KEY_UP" ; digital, move up +InputAnalogJoyDown = "KEY_DOWN" ; digital, move down +InputAnalogJoyX = "JOY_XAXIS,MOUSE_XAXIS" ; analog, full X axis +InputAnalogJoyY = "JOY_YAXIS,MOUSE_YAXIS" ; analog, full Y axis InputAnalogJoyTrigger = "KEY_A,JOY_BUTTON1,MOUSE_LEFT_BUTTON" InputAnalogJoyEvent = "KEY_S,JOY_BUTTON2,MOUSE_RIGHT_BUTTON" ; Light guns -InputGunLeft = "KEY_LEFT" ; digital, move gun left -InputGunRight = "KEY_RIGHT" ; digital, move gun right -InputGunUp = "KEY_UP" ; digital, move gun up -InputGunDown = "KEY_DOWN" ; digital, move gun down -InputGunX = "MOUSE_XAXIS,JOY1_XAXIS" ; analog, full X axis -InputGunY = "MOUSE_YAXIS,JOY1_YAXIS" ; analog, full Y axis +InputGunLeft = "KEY_LEFT" ; digital, move gun left +InputGunRight = "KEY_RIGHT" ; digital, move gun right +InputGunUp = "KEY_UP" ; digital, move gun up +InputGunDown = "KEY_DOWN" ; digital, move gun down +InputGunX = "MOUSE_XAXIS,JOY1_XAXIS" ; analog, full X axis +InputGunY = "MOUSE_YAXIS,JOY1_YAXIS" ; analog, full Y axis InputTrigger = "KEY_A,JOY1_BUTTON1,MOUSE_LEFT_BUTTON" -InputOffscreen = "KEY_S,JOY1_BUTTON2,MOUSE_RIGHT_BUTTON" ; point gun off screen -InputAutoTrigger = 0 +InputOffscreen = "KEY_S,JOY1_BUTTON2,MOUSE_RIGHT_BUTTON" ; point off-screen +InputAutoTrigger = 0 ; automatic reload when off-screen InputGunLeft2 = "NONE" InputGunRight2 = "NONE" InputGunUp2 = "NONE" diff --git a/Docs/README.txt b/Docs/README.txt index 891aa7f..524324e 100644 --- a/Docs/README.txt +++ b/Docs/README.txt @@ -1,6 +1,5 @@ +TODO supported games, compatibility matrix TODO: convert all tabs to spaces -TODO: describe Dinputeffectsgain in config index -TODO: XInputConstForceThreshold default? Set in source code. TODO: describe auto trigger in config index TODO: Andy Geezer's region codes @@ -227,33 +226,125 @@ and in both cases should replace the file with extension 24 from 'Scud Race' ('mpr-19671.24'). -=================== - Supported Games -=================== +====================== + Game Compatibility +====================== -The following games and ROM sets are supported by this version of Supermodel. -Not all of them are playable. +Supermodel recognizes all known Model 3 ROM sets but not all of them are +playable. Below is a compatibility matrix. The most obvious problem with each +ROM set is stated. - ROM Set Game Title - ------- ---------- - vf3 Virtua Fighter 3 - lemans24 Le Mans 24 - scud Scud Race - scudp Scud Race Plus - lostwsga The Lost World - von2 Virtual On Oratorio Tangram - vs298 Virtua Striker 2 '98 - srally2 Sega Rally 2 - daytona2 Daytona USA 2 - dayto2pe Daytona USA 2 Power Edition - fvipers2 Fighting Vipers 2 - harley Harley Davidson & L.A. Riders - lamachin L.A. Machineguns - oceanhun The Ocean Hunter - swtrilgy Star Wars Trilogy - eca Emergency Car Ambulance + ROM Set Title Playable? Comments ++-----------+-----------------------------------------+-----+-----------------+ +| bass | Sega Bass Fishing | No | No controls. | ++-----------+-----------------------------------------+-----+-----------------+ +| daytona2 | Daytona USA 2 Battle on the Edge | Yes | Minor graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| dayto2pe | Daytona USA 2 Power Edition | Yes | Minor graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| dirtdvls | Dirt Devils | Yes | Severe graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| dirtdvlsa | Dirt Devils (Alternate) | Yes | Severe graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| eca | Emergency Call Ambulance | No | Severe graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| ecax | Emergency Call Ambulance (Export) | No | Severe graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| fvipers2 | Fighting Vipers 2 | Yes | Slow. | ++-----------+-----------------------------------------+-----+-----------------+ +| getbass | Get Bass | No | Does not boot. | ++-----------+-----------------------------------------+-----+-----------------+ +| harley | Harley Davidson & L.A. Riders | No | Severe graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| harleyb | Harley Davidson & L.A. Riders (Rev. B) | No | Severe graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| lamachin | L.A. Machineguns | No | Severe graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| lemans24 | Le Mans 24 | Yes | Some texture | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| lostwsga | The Lost World | Yes | Some texture | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| magtruck | Magical Truck Adventure | No | Does not boot. | ++-----------+-----------------------------------------+-----+-----------------+ +| oceanhun | The Ocean Hunter | No | Severe graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| scud | Scud Race (Australia) | Yes | Minor shading | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| scuda | Scud Race (Export) | Yes | Minor shading | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| scudj | Scud Race (Japan) | Yes | Mis-colored 2D | +| | | | graphics. | ++-----------+-----------------------------------------+-----+-----------------+ +| scudp | Scud Race Plus | Yes | Minor shading | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| skichamp | Ski Champ | No | Severe graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| spikeofe | Spikeout Final Edition | Yes | Some texture | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| spikeout | Spikeout | Yes | Some texture | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| srally2 | Sega Rally 2 | Yes | Major graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| srally2x | Sega Rally 2 DX | No | Does not boot. | ++-----------+-----------------------------------------+-----+-----------------+ +| swtrilgy | Star Wars Trilogy (Rev. A) | Yes | Some graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| swtrilgya | Star Wars Trilogy | No | Does not boot. | ++-----------+-----------------------------------------+-----+-----------------+ +| vf3 | Virtua Fighter 3 | Yes | Major graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| vf3a | Virtua Fighter 3 (Rev. A) | Yes | Major graphics | +| | | | problems. | ++-----------+-----------------------------------------+-----+-----------------+ +| vf3tb | Virtua Fighter 3 Team Battle | No | Cannot coin up. | ++-----------+-----------------------------------------+-----+-----------------+ +| von2 | Virtual On Oratorio Tangram | Yes | Encrypted 2D | +| | | | graphics. | ++-----------+-----------------------------------------+-----+-----------------+ +| von254g | Virtual On Oratorio Tangram (Ver. 5.4g) | Yes | Encrypted 2D | +| | | | graphics. | ++-----------+-----------------------------------------+-----+-----------------+ +| vs2 | Virtua Striker 2 (Step 2.0) | Yes | Slow. | ++-----------+-----------------------------------------+-----+-----------------+ +| vs215 | Virtua Striker 2 (Step 1.5) | Yes | Slow. | ++-----------+-----------------------------------------+-----+-----------------+ +| vs298 | Virtua Striker 2 '98 (Step 2.0) | Yes | Slow. | ++-----------+-----------------------------------------+-----+-----------------+ +| vs29815 | Virtua Striker 2 '98 (Step 1.5) | Yes | Slow. | ++-----------+-----------------------------------------+-----+-----------------+ +| vs299 | Virtua Striker 2 '99 | No | PowerPC error. | ++-----------+-----------------------------------------+-----+-----------------+ +| vs299a | Virtua Striker 2 '99 (Rev. A) | No | PowerPC error. | ++-----------+-----------------------------------------+-----+-----------------+ +| vs299b | Virtua Striker 2 '99 (Rev. B) | No | PowerPC error. | ++-----------+-----------------------------------------+-----+-----------------+ +| vs2v991 | Virtua Striker 2 '99.1 | No | PowerPC error. | ++-----------+-----------------------------------------+-----+-----------------+ -The '-print-games' option can be used to obtain this list. +Most ROM sets suffering from severe graphics problems are categorized as non- +playable when in fact many are partially playable. Controls may not be fully +functional, however, and none have been tested thoroughly. ================== @@ -274,7 +365,7 @@ To change the resolution, use the '-res' command line option. For full screen mode, use '-fullscreen'. For example, to set a full screen 1920x1080 mode, try: - supermodel game.zip -res=1920,1080 -fullscreen + supermodel game.zip -res=1920,1080 -fullscreen Video settings may also be specified globally or on a per-game basis in the configuration file, described elsewhere in this document. @@ -298,8 +389,8 @@ Trilogy'). The '-sound-volume' and '-music-volume' options can be used to change the volume. As arguments, they take a volume level in percent ranging from 0 (muted) to 200% (maximum, doubled amplitude). For example: - supermodel game.zip -sound-volume=50 -music-volume=170 - + supermodel game.zip -sound-volume=50 -music-volume=170 + This command line cuts the sound volume in half and increases the music volume by 70%. @@ -321,7 +412,8 @@ configuration file, described elsewhere in this document. Please keep in mind that MPEG music emulation is preliminary and the decoder is buggy. Periodic squeaks and pops occur on many music tracks. The Sega Custom Sound Processor (SCSP) emulator, used for sound emulation, is an older version -of ElSemi's code and still quite buggy. +of ElSemi's code and also quite buggy. Sound glitches are known to occur now +and then, and many sounds and tunes do not sound quite correct. ============ @@ -455,17 +547,17 @@ option available. Windows users can select between four different input systems: - - DirectInput. Selected with '-input-system=dinput'. This is the default. - It provides the best support for PC game controllers and, when emulating - force feedback, allows all effects (if the controller supports them). - - XInput. Selected with '-input-system=xinput'. This must be used with - XBox 360 controllers, otherwise some buttons will not be usable and force - feedback will not work. - - Raw Input. Selected with '-input-system=rawinput'. This is intended for - use with multiple mice and keyboards but is not recommended otherwise. - - SDL. Selected with '-input-system=sdl'. The standard, cross-platform - input system intended for non-Windows builds. It is accessible on - Windows but does not provide full support for all devices. + - DirectInput. Selected with '-input-system=dinput'. This is the default. + It provides the best support for PC game controllers and, when emulating + force feedback, allows all effects (if the controller supports them). + - XInput. Selected with '-input-system=xinput'. This must be used with + XBox 360 controllers, otherwise some buttons will not be usable and force + feedback will not work. + - Raw Input. Selected with '-input-system=rawinput'. This is intended for + use with multiple mice and keyboards but is not recommended otherwise. + - SDL. Selected with '-input-system=sdl'. The standard, cross-platform + input system intended for non-Windows builds. It is accessible on + Windows but does not provide full support for all devices. When switching input systems with '-input-system', you must also configure your inputs using the same option. For example, when running Supermodel with @@ -487,11 +579,11 @@ enable it, use the '-force-feedback' option. Drive board ROMs are required. - Game Drive Board ROM File Size Checksum (CRC32) - ---- -------------------- ---- ---------------- - Daytona USA 2 epr-20985.bin 64 KB B139481D - Scud Race epr-19338a.bin 64 KB C9FAC464 - Sega Rally 2 epr-20512.bin 64 KB CF64350D + Game Drive Board ROM File Size Checksum (CRC32) + ---- -------------------- ---- ---------------- + Daytona USA 2 epr-20985.bin 64 KB B139481D + Scud Race epr-19338a.bin 64 KB C9FAC464 + Sega Rally 2 epr-20512.bin 64 KB CF64350D The sizes and checksums must match those listed above. The file names may be different but will almost certainly contain the same identifying numbers. @@ -510,17 +602,16 @@ Tuning Force Feedback Force feedback can be enabled and tuned in the configuration file. Setting 'ForceFeedback' to 1 enables it: - ForceFeedback = 1 - + ForceFeedback = 1 + There are three DirectInput effects: constant force, self centering, and vibration. The strength of each can be tuned with the following settings: - DirectInputEffectsGain = 100 - DirectInputConstForceMax = 100 - DirectInputSelfCenterMax = 100 - DirectInputFrictionMax = 100 - DirectInputVibrateMax = 100 - + DirectInputConstForceMax = 100 + DirectInputSelfCenterMax = 100 + DirectInputFrictionMax = 100 + DirectInputVibrateMax = 100 + They are given as percentages and represent the maximum strength for each effect. A setting of 0 disables them entirely. Values above 100% are accepted but may clip or distort the effect (and possibly damage your @@ -531,9 +622,9 @@ Because the characteristics of the motors are different, the effects will feel somewhat asymmetric. The constant force effect is simulated with vibrations. The relevant settings are: - XInputConstForceThreshold = 30 - XInputConstForceMax = 100 - XInputVibrateMax = 100 + XInputConstForceThreshold = 30 + XInputConstForceMax = 100 + XInputVibrateMax = 100 The constant force threshold specifies how strong a constant force command must be before it is sent to the controller as a vibration effect (whose strength is @@ -630,9 +721,9 @@ Virtua Striker 2 '98 (Step 1.5 and 2.0 versions) The region can be changed by entering the test menu (press the Test button) and, in the 'Game Assignments' menu, performing the following sequence: - 1. Press the Service button once for about 5 seconds. - 2. Press the Service button three times shortly. - 3. Press the Service button again one time for about 5 seconds. + 1. Press the Service button once for about 5 seconds. + 2. Press the Service button three times shortly. + 3. Press the Service button again one time for about 5 seconds. ========================== @@ -644,13 +735,13 @@ Supermodel reads configuration settings from 'Supermodel.ini' located in the should have been created. When starting up, Supermodel parses settings in the following order: - 1. Global settings are read from 'Supermodel.ini'. These include input - mappings and apply to all games. - 2. If the ROM set was loaded correctly, game-specific settings are read - from 'Supermodel.ini', overriding settings from step 1. - 3. Command line options are applied, overriding settings from the previous - steps. - + 1. Global settings are read from 'Supermodel.ini'. These include input + mappings and apply to all games. + 2. If the ROM set was loaded correctly, game-specific settings are read + from 'Supermodel.ini', overriding settings from step 1. + 3. Command line options are applied, overriding settings from the previous + steps. + In other words, command line options have the highest precedence, followed by game-specific settings, and lastly, global settings. @@ -668,19 +759,19 @@ File Structure and Syntax The configuration file is a list of settings grouped under sections. All names and settings in the file are case sensitive. Settings take the form: - Name = Argument - + Name = Argument + Names are case sensitive. Only one setting per line is allowed. Only two types of arguments are allowed: integers and strings. The choice of which to use is determined by the setting. Integers are unsigned and begin at 0. Strings can contain any characters and are enclosed by double quotes. Examples: - IntegerSetting1 = 0 - IntegerSetting2 = 65536 - StringSetting1 = "This is a string." - StringSetting2 = "123" - StringSetting3 = "1+1, abc, these are all valid characters!" + IntegerSetting1 = 0 + IntegerSetting2 = 65536 + StringSetting1 = "This is a string." + StringSetting2 = "123" + StringSetting3 = "1+1, abc, these are all valid characters!" Many settings are simply boolean variables expecting an integer value of either 0 (disabled) or 1 (enabled). Some settings require values and others take @@ -688,14 +779,14 @@ strings for file names or input mappings. Section names appear in between square brackets on their own lines. - [ SectionName ] - + [ SectionName ] + Settings that appear at the beginning of the file without a preceeding section are automatically assigned to 'Global'. Comments begin with a semicolon and extend until the end of the line. - ; This is a comment. + ; This is a comment. The Purpose of Sections @@ -714,28 +805,28 @@ Input mappings are special. They are only read from the 'Global' section! In the example below, custom configurations are created for 'Scud Race' and 'The Lost World'. All other games will use the global settings. - [ Global ] - - ; Run full screen at 1024x768 - XResolution = 1024 - YResolution = 768 - FullScreen = 1 + [ Global ] + + ; Run full screen at 1024x768 + XResolution = 1024 + YResolution = 768 + FullScreen = 1 - ; Scud Race - [ scud ] - - ; Run at 1080p - XResolution = 1920 - YResolution = 1080 - - ; Music is too quiet by default - SoundVolume = 50 - MusicVolume = 200 - - ; The Lost World - [ lostwsga ] - - PowerPCFrequency = 25 ; run PowerPC at 25 MHz + ; Scud Race + [ scud ] + + ; Run at 1080p + XResolution = 1920 + YResolution = 1080 + + ; Music is too quiet by default + SoundVolume = 50 + MusicVolume = 200 + + ; The Lost World + [ lostwsga ] + + PowerPCFrequency = 25 ; run PowerPC at 25 MHz In this example, only 'Scud Race' will run at 1920x1080. All other games will use 1024x768. 'Scud Race' will also have altered volume settings. 'The Lost @@ -770,157 +861,157 @@ spaces may appear inside of an option. For example, 'supermodel game.zip not. All options are case sensitive. - Option: -? - -h - - Description: Prints a message with an overview of the command line - options and how to run Supermodel. - - ---------------- - - Option: -print-games - - Description: Lists all supported ROM sets. Not all supported ROM sets - are playable yet. - - ---------------- - - Option: -no-threads - - Description: Disables multi-threading. When enabled (the default), the - PowerPC, graphics rendering, and user interface are run in - one thread, sound emulation in a second thread, and the - drive board in a third. It is enabled by default. On - single-core systems, multi-threading adds overhead and - slows Supermodel down but can make audio sound a bit - smoother. - - ---------------- - - Option: -ppc-frequency= - - Description: Sets the PowerPC frequency in MHz. The default is 50. - Higher frequencies will allow games to do more processing - per frame, making them run faster in 'virtual' time, but - may slow down Supermodel on weaker computers. Supermodel's - performance can frequently be improved by lowering the - PowerPC frequency (25 MHz works in many games). In some - games, this will cause timing problems. The optimum value - for this setting will vary from game to game and system to - system. Valid values are 1 to 1000. - - ---------------- - - Option: -fullscreen - - Description: Runs in full screen mode. The default is to run in a - window. - - ---------------- - - Option: -no-throttle - - Description: Disables 60 FPS throttling. The Model 3 runs at a 60 Hz - refresh rate, which Supermodel enforces if this option is - omitted. Unthrottled operation may not work on some - systems because graphics drivers may lock the refresh rate. - - ---------------- - - Option: -print-gl-info - - Description: Prints OpenGL driver information and quits. - - ---------------- - - Option: -res=, - - Description: Resolution of the display in pixels. The default is - 496x384, the Model 3's native resolution. - - ---------------- - - Option: -show-fps - - Description: Shows the frame rate in the window title bar. - - ---------------- - - Option: -frag-shader= - -vert-shader= - - Description: Allows external fragment and vertex shaders to be used for - 3D rendering. Files should be ASCII text files containing - GLSL source code. The file extension is not important. By - default, Supermodel's internal shader programs are used. - - ---------------- - - Option: -flip-stereo - - Description: Swaps the left and right audio channels. - - ---------------- - - Option: -no-music - - Description: Disables Digital Sound Board (MPEG music) emulation. See - the section on audio settings for more information. - - ---------------- - - Option: -no-sound - - Description: Disables sound board (sound effects) emulation. See the - section on audio settings for more information. - - ---------------- - - Option: -music-volume= - -sound-volume= - - Description: Specifies the volume of MPEG music produced by the Digital - Sound Board and the audio produced by the sound board in - percent. The default is 100, which is full volume, and the - valid range is 0 (muted) to 200%. See the section on audio - settings for more information. - - ---------------- - - Option: -config-inputs - - Description: Launches the interacive input configuration utility in the - command prompt window. Allows controls to be remapped. - See the section on controls for more information. - - ---------------- - - Option: -force-feedback - - Description: Enables force feedback. Force feedback is only supported - in a few games (see the section on force feedback for more - details). - - ---------------- - - Option: -input-system= - - Description: Sets the input system. This is only available on Windows, - where the default is 'dinput' (DirectInput). SDL is used - for all other platforms. Valid input systems are: - - dinput DirectInput. - xinput XInput - rawinput Raw Input. - sdl SDL. - - See the section on input systems for more details. - - ---------------- - - Option: -print-inputs - - Description: Prints the current input configuration. + Option: -? + -h + + Description: Prints a message with an overview of the command line + options and how to run Supermodel. + + ---------------- + + Option: -print-games + + Description: Lists all supported ROM sets. Not all supported ROM sets + are playable yet. + + ---------------- + + Option: -no-threads + + Description: Disables multi-threading. When enabled (the default), the + PowerPC, graphics rendering, and user interface are run in + one thread, sound emulation in a second thread, and the + drive board in a third. It is enabled by default. On + single-core systems, multi-threading adds overhead and + slows Supermodel down but can make audio sound a bit + smoother. + + ---------------- + + Option: -ppc-frequency= + + Description: Sets the PowerPC frequency in MHz. The default is 50. + Higher frequencies will allow games to do more processing + per frame, making them run faster in 'virtual' time, but + may slow down Supermodel on weaker computers. Supermodel's + performance can frequently be improved by lowering the + PowerPC frequency (25 MHz works in many games). In some + games, this will cause timing problems. The optimum value + for this setting will vary from game to game and system to + system. Valid values are 1 to 1000. + + ---------------- + + Option: -fullscreen + + Description: Runs in full screen mode. The default is to run in a + window. + + ---------------- + + Option: -no-throttle + + Description: Disables 60 FPS throttling. The Model 3 runs at a 60 Hz + refresh rate, which Supermodel enforces if this option is + omitted. Unthrottled operation may not work on some + systems because graphics drivers may lock the refresh rate. + + ---------------- + + Option: -print-gl-info + + Description: Prints OpenGL driver information and quits. + + ---------------- + + Option: -res=, + + Description: Resolution of the display in pixels. The default is + 496x384, the Model 3's native resolution. + + ---------------- + + Option: -show-fps + + Description: Shows the frame rate in the window title bar. + + ---------------- + + Option: -frag-shader= + -vert-shader= + + Description: Allows external fragment and vertex shaders to be used for + 3D rendering. Files should be ASCII text files containing + GLSL source code. The file extension is not important. By + default, Supermodel's internal shader programs are used. + + ---------------- + + Option: -flip-stereo + + Description: Swaps the left and right audio channels. + + ---------------- + + Option: -no-music + + Description: Disables Digital Sound Board (MPEG music) emulation. See + the section on audio settings for more information. + + ---------------- + + Option: -no-sound + + Description: Disables sound board (sound effects) emulation. See the + section on audio settings for more information. + + ---------------- + + Option: -music-volume= + -sound-volume= + + Description: Specifies the volume of MPEG music produced by the Digital + Sound Board and the audio produced by the sound board in + percent. The default is 100, which is full volume, and the + valid range is 0 (muted) to 200%. See the section on audio + settings for more information. + + ---------------- + + Option: -config-inputs + + Description: Launches the interacive input configuration utility in the + command prompt window. Allows controls to be remapped. + See the section on controls for more information. + + ---------------- + + Option: -force-feedback + + Description: Enables force feedback. Force feedback is only supported + in a few games (see the section on force feedback for more + details). + + ---------------- + + Option: -input-system= + + Description: Sets the input system. This is only available on Windows, + where the default is 'dinput' (DirectInput). SDL is used + for all other platforms. Valid input systems are: + + dinput DirectInput. + xinput XInput + rawinput Raw Input. + sdl SDL. + + See the section on input systems for more details. + + ---------------- + + Option: -print-inputs + + Description: Prints the current input configuration. ======================================== @@ -932,487 +1023,481 @@ Please read the section describing the configuration file for more information. All settings are case sensitive. - - Name: MultiThreaded - - Argument: Integer. - - Description: If set to 1, enables multi-threading; if set to 0, runs all - emulation in a single thread. Read the description of the - '-no-threads' command line option for more information. - - ---------------- - - Name: PowerPCFrequency - - Argument: Integer. - - Description: The PowerPC frequency in MHz. The default is 50. - Equivalent to the '-ppc-frequency' command line option. - - ---------------- - - Name: FullScreen - - Argument: Integer. - - Description: If set to 1, runs in full screen mode; if set to 0, runs in - a window. Disabled by default. Equivalent to the - '-fullscreen' command line option. + + Name: MultiThreaded + + Argument: Integer. + + Description: If set to 1, enables multi-threading; if set to 0, runs all + emulation in a single thread. Read the description of the + '-no-threads' command line option for more information. + + ---------------- + + Name: PowerPCFrequency + + Argument: Integer. + + Description: The PowerPC frequency in MHz. The default is 50. + Equivalent to the '-ppc-frequency' command line option. + + ---------------- + + Name: FullScreen + + Argument: Integer. + + Description: If set to 1, runs in full screen mode; if set to 0, runs in + a window. Disabled by default. Equivalent to the + '-fullscreen' command line option. - ---------------- - - Name: ShowFrameRate - - Argument: Integer. - - Description: Shows the frame rate in the window title bar when set to 1. - If set to 0, the frame rate is not computed. Disabled by - default. Equivalent to the '-show-fps' command line - option. + ---------------- + + Name: ShowFrameRate + + Argument: Integer. + + Description: Shows the frame rate in the window title bar when set to 1. + If set to 0, the frame rate is not computed. Disabled by + default. Equivalent to the '-show-fps' command line + option. - ---------------- - - Name: Throttle - - Argument: Integer. - - Description: Controls 60 FPS throttling. It is enabled by setting to 1 - and disabled by setting to 0. For more information, read - the description of the '-no-throttle' command line option. + ---------------- + + Name: Throttle + + Argument: Integer. + + Description: Controls 60 FPS throttling. It is enabled by setting to 1 + and disabled by setting to 0. For more information, read + the description of the '-no-throttle' command line option. - ---------------- - - Name: XResolution - YResolution - - Argument: Integer. - - Description: Resolution of the display in pixels. The default is - 496x384, the Model 3's native resolution. Equivalent to - the '-res' command line option. + ---------------- + + Name: XResolution + YResolution + + Argument: Integer. + + Description: Resolution of the display in pixels. The default is + 496x384, the Model 3's native resolution. Equivalent to + the '-res' command line option. - ---------------- - - Name: FragmentShader - VertexShader - - Argument: String. - - Description: Path to the external fragment or vertex shader file to use - for 3D rendering. By default, these are not set and the - internal default shaders are used. These are equivalent to - the '-frag-shader' and '-vert-shader' command line options. + ---------------- + + Name: FragmentShader + VertexShader + + Argument: String. + + Description: Path to the external fragment or vertex shader file to use + for 3D rendering. By default, these are not set and the + internal default shaders are used. These are equivalent to + the '-frag-shader' and '-vert-shader' command line options. - ---------------- - - Name: EmulateMusic - - Argument: Integer. - - Description: Emulates the Digital Sound Board if set to 1, disables it - if set to 0. See the section on audio settings for more - information. A setting of 0 is equivalent to the - '-no-music' command line option. + ---------------- + + Name: EmulateMusic + + Argument: Integer. + + Description: Emulates the Digital Sound Board if set to 1, disables it + if set to 0. See the section on audio settings for more + information. A setting of 0 is equivalent to the + '-no-music' command line option. - ---------------- - - Name: EmulateSound - - Argument: Integer. - - Description: Emulates the sound board and its two Sega Custom Sound - Processors if set to 1, disables it if set to 0. See the - section on audio settings for more information. A setting - of 0 is equivalent to the '-no-sound' command line option. - - ---------------- - - Name: FlipStereo - - Argument: Integer. - - Description: Swaps the left and right stereo channels if set to 1. If - set to 0, outputs the channels normally. Disabled by - default. A setting of 1 is equivalent to using the - '-flip-stereo' command line option. - - ---------------- - - Name: MusicVolume - SoundVolume - - Argument: Integer. - - Description: Specifies the volume of MPEG music produced by the Digital - Sound Board and the audio produced by the sound board in - percent. The default is 100, which is full volume, and the - valid range is 0 (muted) to 200%. See the section on audio - settings for more information. The equivalent command line - options are '-music-volume' and '-sound-volume'. + ---------------- + + Name: EmulateSound + + Argument: Integer. + + Description: Emulates the sound board and its two Sega Custom Sound + Processors if set to 1, disables it if set to 0. See the + section on audio settings for more information. A setting + of 0 is equivalent to the '-no-sound' command line option. + + ---------------- + + Name: FlipStereo + + Argument: Integer. + + Description: Swaps the left and right stereo channels if set to 1. If + set to 0, outputs the channels normally. Disabled by + default. A setting of 1 is equivalent to using the + '-flip-stereo' command line option. + + ---------------- + + Name: MusicVolume + SoundVolume + + Argument: Integer. + + Description: Specifies the volume of MPEG music produced by the Digital + Sound Board and the audio produced by the sound board in + percent. The default is 100, which is full volume, and the + valid range is 0 (muted) to 200%. See the section on audio + settings for more information. The equivalent command line + options are '-music-volume' and '-sound-volume'. - ---------------- - - Name: ForceFeedback - - Argument: Integer. - - Description: If set to 1, enables force feedback emulation; if set to 0, - disables it (the default behavior). Equivalent to the - '-force-feedback' command line option. - - ---------------- - - Name: DirectInputConstForceMax - DirectInputFrictionMax - DirectInputSelfCenterMax - DirectInputVibrateMax - - Argument: Integer value. - - Description: Sets strength of the four DirectInput force feedback - effects in percent. Default is 100, indicating full - strength. Values exceeding 100% will distort the effects - and may damage your controller. - - ---------------- - - Name: DirectInputEffectsGain - - Argument: Integer value. - - Description: + ---------------- + + Name: ForceFeedback + + Argument: Integer. + + Description: If set to 1, enables force feedback emulation; if set to 0, + disables it (the default behavior). Equivalent to the + '-force-feedback' command line option. + + ---------------- + + Name: DirectInputConstForceMax + DirectInputFrictionMax + DirectInputSelfCenterMax + DirectInputVibrateMax + + Argument: Integer value. + + Description: Sets strength of the four DirectInput force feedback + effects in percent. Default is 100, indicating full + strength. Values exceeding 100% will distort the effects + and may damage your controller. + + ---------------- + + Name: XInputConstForceMax + XInputVibrateMax + + Argument: Integer value. + + Description: Sets strength of XInput force feedback effects in percent. + Default is 100, indicating full strength. Values exceeding + 100% will distort the effects and may damage your + controller. The constant force effect is simulated using + vibration. + + ---------------- + + Name: XInputConstForceThreshold + + Argument: Integer value. + + Description: Minimum strength above which a Model 3 constant force + command will be simulated on an XInput device. + XInputConstForceMax determines the vibration strength for + this effect. The default value is 30. + + ---------------- + + Names: InputStart1 + InputStart2 + InputCoin1 + InputCoin2 + InputServiceA + InputServiceB + InputTestA + InputTestB + + Argument: String. + + Description: Mappings for common inputs: player 1 and 2 Start buttons, + both coin slots, and both Service and Test buttons. Can + only be set in the 'Global' section. + + ---------------- + + Names: InputJoyDown + InputJoyDown2 + InputJoyLeft + InputJoyLeft2 + InputJoyRight + InputJoyRight2 + InputJoyUp + InputJoyUp2 + + Argument: String. + + Description: Mappings for 4-way digital joysticks (players 1 and 2). + These controls appear in 'Virtua Fighter 3', 'Fighting + Vipers 2', 'Spikeout', etc. Can only be set in the + 'Global' section. + + ---------------- + + Names: InputEscape + InputEscape2 + InputGuard + InputGuard2 + InputKick + InputKick2 + InputPunch + InputPunch2 + + Argument: String. + + Description: Mappings for fighting game buttons (players 1 and 2). Can + only be set in the 'Global' section. - ---------------- - - Name: XInputConstForceMax - XInputVibrateMax - - Argument: Integer value. - - Description: Sets strength of XInput force feedback effects in percent. - Default is 100, indicating full strength. Values exceeding - 100% will distort the effects and may damage your - controller. The constant force effect is simulated using - vibration. - - ---------------- - - Name: XInputConstForceThreshold - - Argument: Integer value. - - Description: Minimum strength above which a Model 3 constant force - command will be simulated on an XInput device. - XInputConstForceMax determines the vibration strength for - this effect. The default value is 30. - - ---------------- - - Names: InputStart1 - InputStart2 - InputCoin1 - InputCoin2 - InputServiceA - InputServiceB - InputTestA - InputTestB - - Argument: String. - - Description: Mappings for common inputs: player 1 and 2 Start buttons, - both coin slots, and both Service and Test buttons. Can - only be set in the 'Global' section. - - ---------------- - - Names: InputJoyDown - InputJoyDown2 - InputJoyLeft - InputJoyLeft2 - InputJoyRight - InputJoyRight2 - InputJoyUp - InputJoyUp2 - - Argument: String. - - Description: Mappings for 4-way digital joysticks (players 1 and 2). - These controls appear in 'Virtua Fighter 3', 'Fighting - Vipers 2', 'Spikeout', etc. Can only be set in the - 'Global' section. - - ---------------- - - Names: InputEscape - InputEscape2 - InputGuard - InputGuard2 - InputKick - InputKick2 - InputPunch - InputPunch2 - - Argument: String. - - Description: Mappings for fighting game buttons (players 1 and 2). Can - only be set in the 'Global' section. + ---------------- + + Names: InputBeat + InputCharge + InputJump + InputShift + + Argument: String. + + Description: Mappings for 'Spikeout' and 'Spikeout Final Edition' + buttons. Can only be set in the 'Global' section. + + ---------------- + + Name: InputLongPass + InputLongPass2 + InputShortPass + InputShortPass2 + InputShoot + InputShoot2 + + Argument: String. + + Description: Mappings for the 'Virtua Striker 2' series of games + (players 1 and 2). Can only be set in the 'Global' + section. + + ---------------- + + Name: InputSteering + + Argument: String. + + Description: Mapping for the analog steering wheel axis, used in all + driving games. Can only be set in the 'Global' section. + + ---------------- + + Name: InputSteeringLeft + InputSteeringRight + + Argument: String. + + Description: Mappings for digital control of the steering wheel, + intended for users who do not have an analog controller. + Can only be set in the 'Global' section. + + ---------------- + + Name: InputBrake + InputAccelerator + + Argument: String. + + Description: Mappings for brake and accelerator pedals used in driving + games. These are analog axes but can also be mapped to + digital inputs if needed. Can only be set in the 'Global' + section. + + ---------------- + + Name: InputGearShift1 + InputGearShift2 + InputGearShift3 + InputGearShift4 + InputGearShiftN + + Argument: String. + + Description: Mappings for the gear box used in driving games. In games + with only two gears (e.g. 'Le Mans 24'), InputGearShift1 + maps to 'Up' and InputGearShift2 to 'Down'. A neutral + position can also be selected. Can only be set in the + 'Global' section. + + ---------------- + + Name: InputGearShiftDown + InputGearShiftUp + + Argument: String. + + Description: Mappings for sequential shifting. These allow gears to be + selected sequentially: N, 1, 2, 3, 4. Can only be set in + the 'Global' section. - ---------------- - - Names: InputBeat - InputCharge - InputJump - InputShift - - Argument: String. - - Description: Mappings for 'Spikeout' and 'Spikeout Final Edition' - buttons. Can only be set in the 'Global' section. - - ---------------- - - Name: InputLongPass - InputLongPass2 - InputShortPass - InputShortPass2 - InputShoot - InputShoot2 - - Argument: String. - - Description: Mappings for the 'Virtua Striker 2' series of games - (players 1 and 2). Can only be set in the 'Global' - section. - - ---------------- - - Name: InputSteering - - Argument: String. - - Description: Mapping for the analog steering wheel axis, used in all - driving games. Can only be set in the 'Global' section. - - ---------------- - - Name: InputSteeringLeft - InputSteeringRight - - Argument: String. - - Description: Mappings for digital control of the steering wheel, - intended for users who do not have an analog controller. - Can only be set in the 'Global' section. - - ---------------- - - Name: InputBrake - InputAccelerator - - Argument: String. - - Description: Mappings for brake and accelerator pedals used in driving - games. These are analog axes but can also be mapped to - digital inputs if needed. Can only be set in the 'Global' - section. - - ---------------- - - Name: InputGearShift1 - InputGearShift2 - InputGearShift3 - InputGearShift4 - InputGearShiftN - - Argument: String. - - Description: Mappings for the gear box used in driving games. In games - with only two gears (e.g. 'Le Mans 24'), InputGearShift1 - maps to 'Up' and InputGearShift2 to 'Down'. A neutral - position can also be selected. Can only be set in the - 'Global' section. - - ---------------- - - Name: InputGearShiftDown - InputGearShiftUp - - Argument: String. - - Description: Mappings for sequential shifting. These allow gears to be - selected sequentially: N, 1, 2, 3, 4. Can only be set in - the 'Global' section. + ---------------- + + Name: InputVR1 + InputVR2 + InputVR3 + InputVR4 + + Argument: String. + + Description: Mappings for the 'VR' (color-coded view select) buttons in + racing games (e.g. 'Scud Race', 'Daytona USA 2', etc.) Can + only be set in the 'Global' section. + + ---------------- + + Name: InputViewChange + + Argument: String. + + Description: Mapping for the view change button used in 'Sega Rally 2', + 'Dirt Devils', and 'Emergency Car Ambulance'. Can only be + set in the 'Global' section. + + ---------------- + + Name: InputHandBrake + + Argument: String. + + Description: Mapping for the hand brake button used in 'Sega Rally 2'. + Can only be set in the 'Global' section. - ---------------- - - Name: InputVR1 - InputVR2 - InputVR3 - InputVR4 - - Argument: String. - - Description: Mappings for the 'VR' (color-coded view select) buttons in - racing games (e.g. 'Scud Race', 'Daytona USA 2', etc.) Can - only be set in the 'Global' section. - - ---------------- - - Name: InputViewChange - - Argument: String. - - Description: Mapping for the view change button used in 'Sega Rally 2' - and 'Dirt Devils'. Can only be set in the 'Global' - section. - - ---------------- - - Name: InputHandBrake - - Argument: String. - - Description: Mapping for the hand brake button used in 'Sega Rally 2'. - Can only be set in the 'Global' section. + ---------------- + + Name: InputTwinJoyCrouch + InputTwinJoyForward + InputTwinJoyJump + InputTwinJoyReverse + InputTwinJoyStrafeLeft + InputTwinJoyStrafeRight + InputTwinJoyTurnLeft + InputTwinJoyTurnRight + + Argument: String. + + Description: Mappings for 'macro' commands for 'Virtual On Oratorio + Tangram'. These allow movements to be mapped to single + digital inputs and do not require the use of two joysticks. + Can only be set in the 'Global' section. + + ---------------- + + Name: InputTwinJoyDown1 + InputTwinJoyDown2 + InputTwinJoyLeft1 + InputTwinJoyLeft2 + InputTwinJoyRight1 + InputTwinJoyRight2 + InputTwinJoyUp1 + InputTwinJoyUp2 + + Argument: String. + + Description: Mappings for the individual joysticks used by 'Virtual On + Oratorio Tangram'. The left stick is stick #1 and the + right stick is #2. Can only be set in the 'Global' + section. + + ---------------- + + Name: InputTwinJoyShot1 + InputTwinJoyShot2 + InputTwinJoyTurbo1 + InputTwinJoyTurbo2 + + Argument: String. + + Description: Mappings for the shot (trigger) and turbo buttons located + on the left (1) and right (2) joysticks in 'Virtual On + Oratorio Tangram'. Can only be set in the 'Global' + section. + + ---------------- + + Name: InputAnalogJoyDown + InputAnalogJoyLeft + InputAnalogJoyRight + InputAnalogJoyUp + + Argument: String. + + Description: Mappings for digital control of the analog joystick used in + 'Star Wars Trilogy'. Two inputs are provided for the two + directions available on each axis. Can only be set in the + 'Global' section. + + ---------------- + + Name: InputAnalogJoyX + InputAnalogJoyY + + Argument: String. + + Description: Mappings for X and Y axes of the analog joystick in 'Star + Wars Trilogy'. Can only be set in the 'Global' section. + + ---------------- + + Name: InputAnalogJoyTrigger + InputAnalogJoyEvent + + Argument: String. + + Description: Mappings for the trigger and Event button in 'Star Wars + Trilogy'. Can only be set in the 'Global' section. + + ---------------- + + Name: InputGunDown + InputGunDown2 + InputGunLeft + InputGunLeft2 + InputGunRight + InputGunRight2 + InputGunUp + InputGunUp2 + + Argument: String. + + Description: Mappings for digital control of the light guns in 'The Lost + World'. Inputs for motion in each direction are provided. + Can only be set in the 'Global' section. + + ---------------- + + Name: InputGunX + InputGunX2 + InputGunY + InputGunY2 + + Argument: String. + + Description: Mappings for both analog axes of the light guns in 'The + Lost World'. Can only be set in the 'Global' section. - ---------------- - - Name: InputTwinJoyCrouch - InputTwinJoyForward - InputTwinJoyJump - InputTwinJoyReverse - InputTwinJoyStrafeLeft - InputTwinJoyStrafeRight - InputTwinJoyTurnLeft - InputTwinJoyTurnRight - - Argument: String. - - Description: Mappings for 'macro' commands for 'Virtual On Oratorio - Tangram'. These allow movements to be mapped to single - digital inputs and do not require the use of two joysticks. - Can only be set in the 'Global' section. - - ---------------- - - Name: InputTwinJoyDown1 - InputTwinJoyDown2 - InputTwinJoyLeft1 - InputTwinJoyLeft2 - InputTwinJoyRight1 - InputTwinJoyRight2 - InputTwinJoyUp1 - InputTwinJoyUp2 - - Argument: String. - - Description: Mappings for the individual joysticks used by 'Virtual On - Oratorio Tangram'. The left stick is stick #1 and the - right stick is #2. Can only be set in the 'Global' - section. - - ---------------- - - Name: InputTwinJoyShot1 - InputTwinJoyShot2 - InputTwinJoyTurbo1 - InputTwinJoyTurbo2 - - Argument: String. - - Description: Mappings for the shot (trigger) and turbo buttons located - on the left (1) and right (2) joysticks in 'Virtual On - Oratorio Tangram'. Can only be set in the 'Global' - section. - - ---------------- - - Name: InputAnalogJoyDown - InputAnalogJoyLeft - InputAnalogJoyRight - InputAnalogJoyUp - - Argument: String. - - Description: Mappings for digital control of the analog joystick used in - 'Star Wars Trilogy'. Two inputs are provided for the two - directions available on each axis. Can only be set in the - 'Global' section. - - ---------------- - - Name: InputAnalogJoyX - InputAnalogJoyY - - Argument: String. - - Description: Mappings for X and Y axes of the analog joystick in 'Star - Wars Trilogy'. Can only be set in the 'Global' section. - - ---------------- - - Name: InputAnalogJoyTrigger - InputAnalogJoyEvent - - Argument: String. - - Description: Mappings for the trigger and Event button in 'Star Wars - Trilogy'. Can only be set in the 'Global' section. - - ---------------- - - Name: InputGunDown - InputGunDown2 - InputGunLeft - InputGunLeft2 - InputGunRight - InputGunRight2 - InputGunUp - InputGunUp2 - - Argument: String. - - Description: Mappings for digital control of the light guns in 'The Lost - World'. Inputs for motion in each direction are provided. - Can only be set in the 'Global' section. - - ---------------- - - Name: InputGunX - InputGunX2 - InputGunY - InputGunY2 - - Argument: String. - - Description: Mappings for both analog axes of the light guns in 'The - Lost World'. Can only be set in the 'Global' section. + ---------------- + + Name: InputOffscreen + InputOffscreen2 + InputTrigger + InputTrigger2 + + Argument: String. + + Description: Mappings for the light gun triggers and off-screen + controls in 'The Lost World'. The off-screen button aims + the light gun off-screen while it is pressed, which makes + re-loading possible. Can only be set in the 'Global' + section. - ---------------- - - Name: InputOffscreen - InputOffscreen2 - InputTrigger - InputTrigger2 - - Argument: String. - - Description: Mappings for the light gun triggers and off-screen - controls in 'The Lost World'. The off-screen button aims - the light gun off-screen while it is pressed, which makes - re-loading possible. Can only be set in the 'Global' - section. - - ---------------- - - Name: InputAutoTrigger - InputAutoTrigger2 - - Argument: Integer. - - Description: ? Can only be set in the 'Global' section. - + ---------------- + + Name: InputAutoTrigger + InputAutoTrigger2 + + Argument: Integer. + + Description: When set to 1, the off-screen button will also + automatically reload (no need to pull the trigger). Can + only be set in the 'Global' section. + ======================= Contact Information diff --git a/Makefiles/Makefile.SDL.UNIX.GCC b/Makefiles/Makefile.SDL.UNIX.GCC index 694a5ed..3b313fd 100644 --- a/Makefiles/Makefile.SDL.UNIX.GCC +++ b/Makefiles/Makefile.SDL.UNIX.GCC @@ -20,7 +20,7 @@ ## # -# Makefile.SDL.UNIX-MODERN.GCC +# Makefile.SDL.UNIX.GCC # # GNU Makefile for SDL port using GCC on modern Linux (e.g. Fedora 14). # Copy this Makefile to the base directory of the source distribution (one up @@ -56,7 +56,7 @@ SDL_LIBPATH = `sdl-config --libs` OUTFILE = Supermodel OBJ_DIR = obj -BIN_DIR = bin +BIN_DIR = bin OUTFILE = $(BIN_DIR)/Supermodel @@ -89,17 +89,17 @@ endif # Objects and Dependencies # HEADERS = Src/Supermodel.h Src/Games.h Src/OSD/SDL/Types.h -OBJ = $(OBJ_DIR)/PPCDisasm.o $(OBJ_DIR)/Games.o $(OBJ_DIR)/Config.o $(OBJ_DIR)/INIFile.o $(OBJ_DIR)/BlockFile.o $(OBJ_DIR)/93C46.o \ - $(OBJ_DIR)/ROMLoad.o $(OBJ_DIR)/unzip.o $(OBJ_DIR)/ioapi.o $(OBJ_DIR)/Error.o $(OBJ_DIR)/glew.o $(OBJ_DIR)/Shader.o \ - $(OBJ_DIR)/Real3D.o $(OBJ_DIR)/Render3D.o $(OBJ_DIR)/Models.o $(OBJ_DIR)/Render2D.o $(OBJ_DIR)/TileGen.o \ - $(OBJ_DIR)/Model3.o $(OBJ_DIR)/ppc.o $(OBJ_DIR)/Main.o $(OBJ_DIR)/Audio.o $(OBJ_DIR)/Thread.o $(OBJ_DIR)/SoundBoard.o \ - $(OBJ_DIR)/SCSP.o $(OBJ_DIR)/SCSPDSP.o $(OBJ_DIR)/68K.o $(OBJ_DIR)/m68kcpu.o $(OBJ_DIR)/m68kopnz.o $(OBJ_DIR)/m68kopdm.o \ - $(OBJ_DIR)/m68kopac.o $(OBJ_DIR)/m68kops.o $(OBJ_DIR)/DSB.o $(OBJ_DIR)/Z80.o \ - $(OBJ_DIR)/IRQ.o $(OBJ_DIR)/53C810.o $(OBJ_DIR)/PCI.o $(OBJ_DIR)/RTC72421.o $(OBJ_DIR)/DriveBoard.o \ - $(OBJ_DIR)/MPC10x.o $(OBJ_DIR)/Input.o $(OBJ_DIR)/Inputs.o $(OBJ_DIR)/InputSource.o $(OBJ_DIR)/InputSystem.o \ - $(OBJ_DIR)/InputTypes.o $(OBJ_DIR)/MultiInputSource.o $(OBJ_DIR)/SDLInputSystem.o \ - $(OBJ_DIR)/amp_audio.o $(OBJ_DIR)/amp_dump.o $(OBJ_DIR)/amp_getbits.o $(OBJ_DIR)/amp_getdata.o $(OBJ_DIR)/amp_huffman.o \ - $(OBJ_DIR)/amp_layer2.o $(OBJ_DIR)/amp_layer3.o $(OBJ_DIR)/amp_misc2.o $(OBJ_DIR)/amp_position.o $(OBJ_DIR)/amp_transform.o \ +OBJ = $(OBJ_DIR)/PPCDisasm.o $(OBJ_DIR)/Games.o $(OBJ_DIR)/Config.o $(OBJ_DIR)/INIFile.o $(OBJ_DIR)/BlockFile.o $(OBJ_DIR)/93C46.o \ + $(OBJ_DIR)/ROMLoad.o $(OBJ_DIR)/unzip.o $(OBJ_DIR)/ioapi.o $(OBJ_DIR)/Error.o $(OBJ_DIR)/glew.o $(OBJ_DIR)/Shader.o \ + $(OBJ_DIR)/Real3D.o $(OBJ_DIR)/Render3D.o $(OBJ_DIR)/Models.o $(OBJ_DIR)/Render2D.o $(OBJ_DIR)/TileGen.o \ + $(OBJ_DIR)/Model3.o $(OBJ_DIR)/ppc.o $(OBJ_DIR)/Main.o $(OBJ_DIR)/Audio.o $(OBJ_DIR)/Thread.o $(OBJ_DIR)/SoundBoard.o \ + $(OBJ_DIR)/SCSP.o $(OBJ_DIR)/SCSPDSP.o $(OBJ_DIR)/68K.o $(OBJ_DIR)/m68kcpu.o $(OBJ_DIR)/m68kopnz.o $(OBJ_DIR)/m68kopdm.o \ + $(OBJ_DIR)/m68kopac.o $(OBJ_DIR)/m68kops.o $(OBJ_DIR)/DSB.o $(OBJ_DIR)/Z80.o \ + $(OBJ_DIR)/IRQ.o $(OBJ_DIR)/53C810.o $(OBJ_DIR)/PCI.o $(OBJ_DIR)/RTC72421.o $(OBJ_DIR)/DriveBoard.o \ + $(OBJ_DIR)/MPC10x.o $(OBJ_DIR)/Input.o $(OBJ_DIR)/Inputs.o $(OBJ_DIR)/InputSource.o $(OBJ_DIR)/InputSystem.o \ + $(OBJ_DIR)/InputTypes.o $(OBJ_DIR)/MultiInputSource.o $(OBJ_DIR)/SDLInputSystem.o \ + $(OBJ_DIR)/amp_audio.o $(OBJ_DIR)/amp_dump.o $(OBJ_DIR)/amp_getbits.o $(OBJ_DIR)/amp_getdata.o $(OBJ_DIR)/amp_huffman.o \ + $(OBJ_DIR)/amp_layer2.o $(OBJ_DIR)/amp_layer3.o $(OBJ_DIR)/amp_misc2.o $(OBJ_DIR)/amp_position.o $(OBJ_DIR)/amp_transform.o \ $(OBJ_DIR)/amp_util.o # If built-in debugger enabled, include all debugging classes @@ -117,7 +117,7 @@ endif all: $(BIN_DIR) $(OBJ_DIR) $(OBJ) $(LD) $(LFLAGS) $(OBJ_LIBS) $(OBJ) -$(BIN_DIR): +$(BIN_DIR): mkdir $(BIN_DIR) $(OBJ_DIR): @@ -127,32 +127,32 @@ clean: rm -f $(OUTFILE) rm -f $(OBJ_DIR)/*.o -# -# Musashi 68K emulator -# -# All generated source files are emitted to the object directory. For MSVC, -# INLINE must be redefined as "static __inline", which is the syntax in C mode. -# -$(OBJ_DIR)/m68kmake: Src/CPU/68K/Musashi/m68kmake.c - $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kmake.o - $(LD) $(OBJ_DIR)/m68kmake.o -o $(OBJ_DIR)/m68kmake - -$(OBJ_DIR)/m68kops.h: $(OBJ_DIR)/m68kmake Src/CPU/68K/Musashi/m68k_in.c - $(OBJ_DIR)/m68kmake $(OBJ_DIR) Src/CPU/68K/Musashi/m68k_in.c - -$(OBJ_DIR)/m68kcpu.o: Src/CPU/68K/Musashi/m68kcpu.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h Src/CPU/68K/Musashi/m68kctx.h - $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kcpu.o -I$(OBJ_DIR) -ISrc/CPU/68K/Musashi -DINLINE="static inline" - -$(OBJ_DIR)/m68kops.o: $(OBJ_DIR)/m68kops.c $(OBJ_DIR)/m68kmake $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h Src/CPU/68K/Musashi/m68kctx.h - $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kops.o -ISrc/CPU/68K/Musashi -DINLINE="static inline" - -$(OBJ_DIR)/m68kopac.o: $(OBJ_DIR)/m68kopac.c $(OBJ_DIR)/m68kmake $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h Src/CPU/68K/Musashi/m68kctx.h - $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kopac.o -ISrc/CPU/68K/Musashi -DINLINE="static inline" - -$(OBJ_DIR)/m68kopdm.o: $(OBJ_DIR)/m68kopdm.c $(OBJ_DIR)/m68kmake $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h Src/CPU/68K/Musashi/m68kctx.h - $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kopdm.o -ISrc/CPU/68K/Musashi -DINLINE="static inline" - -$(OBJ_DIR)/m68kopnz.o: $(OBJ_DIR)/m68kopnz.c $(OBJ_DIR)/m68kmake $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h Src/CPU/68K/Musashi/m68kctx.h +# +# Musashi 68K emulator +# +# All generated source files are emitted to the object directory. For MSVC, +# INLINE must be redefined as "static __inline", which is the syntax in C mode. +# +$(OBJ_DIR)/m68kmake: Src/CPU/68K/Musashi/m68kmake.c + $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kmake.o + $(LD) $(OBJ_DIR)/m68kmake.o -o $(OBJ_DIR)/m68kmake + +$(OBJ_DIR)/m68kops.h: $(OBJ_DIR)/m68kmake Src/CPU/68K/Musashi/m68k_in.c + $(OBJ_DIR)/m68kmake $(OBJ_DIR) Src/CPU/68K/Musashi/m68k_in.c + +$(OBJ_DIR)/m68kcpu.o: Src/CPU/68K/Musashi/m68kcpu.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h Src/CPU/68K/Musashi/m68kctx.h + $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kcpu.o -I$(OBJ_DIR) -ISrc/CPU/68K/Musashi -DINLINE="static inline" + +$(OBJ_DIR)/m68kops.o: $(OBJ_DIR)/m68kops.c $(OBJ_DIR)/m68kmake $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h Src/CPU/68K/Musashi/m68kctx.h + $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kops.o -ISrc/CPU/68K/Musashi -DINLINE="static inline" + +$(OBJ_DIR)/m68kopac.o: $(OBJ_DIR)/m68kopac.c $(OBJ_DIR)/m68kmake $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h Src/CPU/68K/Musashi/m68kctx.h + $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kopac.o -ISrc/CPU/68K/Musashi -DINLINE="static inline" + +$(OBJ_DIR)/m68kopdm.o: $(OBJ_DIR)/m68kopdm.c $(OBJ_DIR)/m68kmake $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h Src/CPU/68K/Musashi/m68kctx.h + $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kopdm.o -ISrc/CPU/68K/Musashi -DINLINE="static inline" + +$(OBJ_DIR)/m68kopnz.o: $(OBJ_DIR)/m68kopnz.c $(OBJ_DIR)/m68kmake $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h Src/CPU/68K/Musashi/m68kctx.h $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kopnz.o -ISrc/CPU/68K/Musashi -DINLINE="static inline" # @@ -209,13 +209,13 @@ $(OBJ_DIR)/%.o: Src/Pkgs/%.c Src/Pkgs/%.h $(OBJ_DIR)/%.o: Src/Pkgs/%.c $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/$(*F).o -# -# AMP MPEG decoder library -# -# To eliminate name conflicts, object files have the prefix "amp_" attached. -# +# +# AMP MPEG decoder library +# +# To eliminate name conflicts, object files have the prefix "amp_" attached. +# $(OBJ_DIR)/amp_%.o: Src/Sound/MPEG/%.cpp Src/Sound/MPEG/%.h - $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/amp_$(*F).o - -$(OBJ_DIR)/amp_%.o: Src/Sound/MPEG/%.cpp + $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/amp_$(*F).o + +$(OBJ_DIR)/amp_%.o: Src/Sound/MPEG/%.cpp $(CC) $< $(CFLAGS) -o $(OBJ_DIR)/amp_$(*F).o diff --git a/Src/CPU/68K/68K.cpp b/Src/CPU/68K/68K.cpp index 806fd92..c6e3f29 100644 --- a/Src/CPU/68K/68K.cpp +++ b/Src/CPU/68K/68K.cpp @@ -169,7 +169,7 @@ void M68KLoadState(CBlockFile *StateFile, const char *name) { if (OKAY != StateFile->FindBlock(name)) { - ErrorLog("Unable to load 68K state. Save state file is corrupted."); + ErrorLog("Unable to load 68K state. Save state file is corrupt."); return; } diff --git a/Src/CPU/68K/68K.h b/Src/CPU/68K/68K.h index ef240a9..d467a6d 100644 --- a/Src/CPU/68K/68K.h +++ b/Src/CPU/68K/68K.h @@ -103,7 +103,7 @@ public: ******************************************************************************/ /* - * M68KGetARegister(int n): + * M68KGetARegister(n): * * Parameters: * n Register number (0-7). @@ -114,7 +114,7 @@ public: extern UINT32 M68KGetARegister(int n); /* - * M68KSetARegister(int n, UINT32 v): + * M68KSetARegister(n, v): * * Parameters: * n Register number (0-7). @@ -123,7 +123,7 @@ extern UINT32 M68KGetARegister(int n); extern void M68KSetARegister(int n, UINT32 v); /* - * M68KGetDRegister(int n): + * M68KGetDRegister(n): * * Parameters: * n Register number (0-7). @@ -134,7 +134,7 @@ extern void M68KSetARegister(int n, UINT32 v); extern UINT32 M68KGetDRegister(int n); /* - * M68KGetDRegister(int n, UINT32 v): + * M68KGetDRegister(n, v): * * Parameters: * n Register number (0-7). @@ -282,8 +282,29 @@ extern void M68KSetContext(M68KCtx *Src); static int lastCycles = 0; +/* + * M68KGetRegister(ctx, reg): + * + * Parameters: + * ctx Musashi 68K context. + * reg Register (use DBG68K_REG_* macros). + * + * Returns: + * Register value. + */ UINT32 M68KGetRegister(SM68KCtx *ctx, unsigned reg); +/* + * M68KSetRegister(ctx, reg, value): + * + * Parameters: + * ctx Musashi 68K context. + * reg Register (use DBG68K_REG_* macros). + * value Vale to write. + * + * Returns: + * True if successful, false if register does not exist. + */ UINT32 M68KSetRegister(SM68KCtx *ctx, unsigned reg, UINT32 val); #endif // SUPERMODEL_DEBUGGER diff --git a/Src/CPU/PowerPC/ppc.cpp b/Src/CPU/PowerPC/ppc.cpp index 90f714a..99274b4 100644 --- a/Src/CPU/PowerPC/ppc.cpp +++ b/Src/CPU/PowerPC/ppc.cpp @@ -950,7 +950,7 @@ void ppc_load_state(CBlockFile *SaveState) { if (OKAY != SaveState->FindBlock("PowerPC")) { - ErrorLog("Unable to load PowerPC state. Save state file is corrupted."); + ErrorLog("Unable to load PowerPC state. Save state file is corrupt."); return; } diff --git a/Src/CPU/Z80/Z80.cpp b/Src/CPU/Z80/Z80.cpp index a204ef9..54d6278 100644 --- a/Src/CPU/Z80/Z80.cpp +++ b/Src/CPU/Z80/Z80.cpp @@ -3943,7 +3943,7 @@ void CZ80::LoadState(CBlockFile *StateFile, const char *name) { if (OKAY != StateFile->FindBlock(name)) { - ErrorLog("Unable to load Z80 state. Save state file is corrupted."); + ErrorLog("Unable to load Z80 state. Save state file is corrupt."); return; } diff --git a/Src/CPU/Z80/Z80.h b/Src/CPU/Z80/Z80.h index 03f16ea..752de69 100644 --- a/Src/CPU/Z80/Z80.h +++ b/Src/CPU/Z80/Z80.h @@ -151,7 +151,7 @@ public: * GetPC(void): * * Returns the current PC value. - + * * Returns: * Current value of PC register. */ @@ -159,23 +159,42 @@ public: #ifdef SUPERMODEL_DEBUGGER /* - * GetReg8(state): + * GetReg8(reg8): * - * Returns value of given 8-bit register. + * Reads an 8-bit register. + * + * Parameters: + * reg8 Register number (use Z80_REG8_* macros). + * + * Returns: + * Value of given 8-bit register. */ UINT8 GetReg8(unsigned reg8); /* - * SetReg8(state): + * SetReg8(reg8, value): * * Sets value of given 8-bit register. + * + * Parameters: + * reg8 Register number. + * value Value to write. + * + * Returns: + * True if succeeded, false if invalid register. */ bool SetReg8(unsigned reg8, UINT8 value); /* - * GetReg16(state): + * GetReg16(reg16, value): * - * Returns value of given 16-bit register. + * Reads a 16-bit register. + * + * Parameters: + * reg16 Register number (use Z80_REG16_* macros). + * + * Returns: + * Value of given 16-bit register. */ UINT16 GetReg16(unsigned reg16); @@ -183,6 +202,13 @@ public: * SetReg16(state): * * Sets value of given 16-bit register. + * + * Parameters: + * reg16 Register. + * value Value to write. + * + * Returns: + * True if succeeded, false if invalid register. */ bool SetReg16(unsigned reg16, UINT16 value); #endif // SUPERMODEL_DEBUGGER diff --git a/Src/Games.cpp b/Src/Games.cpp index 7054d78..c04f94a 100644 --- a/Src/Games.cpp +++ b/Src/Games.cpp @@ -341,7 +341,7 @@ const struct GameInfo g_Model3GameList[] = true, // 32 MB of banked CROM (Mirror) 0x4000000, // 64 MB of VROM 0xC00000, // 12 MB of sample ROMs - GAME_INPUT_COMMON|GAME_INPUT_VEHICLE|GAME_INPUT_SHIFT4, + GAME_INPUT_COMMON|GAME_INPUT_VEHICLE|GAME_INPUT_SHIFT4|GAME_INPUT_RALLY, 0, // no MPEG board false, // no drive board @@ -403,7 +403,7 @@ const struct GameInfo g_Model3GameList[] = true, // 48 MB of banked CROM (Mirror) 0x4000000, // 64 MB of VROM 0x1000000, // 16 MB of sample ROMs - GAME_INPUT_COMMON|GAME_INPUT_VEHICLE, + GAME_INPUT_COMMON|GAME_INPUT_VEHICLE|GAME_INPUT_SHIFT4|GAME_INPUT_RALLY, 0, // no MPEG board false, // no drive board @@ -472,7 +472,7 @@ const struct GameInfo g_Model3GameList[] = true, // 48 MB of banked CROM (Mirror) 0x4000000, // 64 MB of VROM 0x1000000, // 16 MB of sample ROMs - GAME_INPUT_COMMON|GAME_INPUT_VEHICLE, + GAME_INPUT_COMMON|GAME_INPUT_VEHICLE|GAME_INPUT_SHIFT4|GAME_INPUT_RALLY, 0, // no MPEG board false, // no drive board diff --git a/Src/Inputs/Input.cpp b/Src/Inputs/Input.cpp index 64d9899..644bf06 100644 --- a/Src/Inputs/Input.cpp +++ b/Src/Inputs/Input.cpp @@ -93,7 +93,7 @@ const char* CInput::GetInputGroup() case GAME_INPUT_VEHICLE: return "Racing Game Steering Controls"; case GAME_INPUT_SHIFT4: return "Racing Game Gear Shift"; case GAME_INPUT_VR: return "Racing Game VR View Buttons"; - case GAME_INPUT_RALLY: return "Sega Rally/Dirt Devils Buttons"; + case GAME_INPUT_RALLY: return "Miscellaneous Driving Game Buttons"; case GAME_INPUT_TWIN_JOYSTICKS: return "Virtual On Controls"; case GAME_INPUT_ANALOG_JOYSTICK: return "Analog Joystick"; case GAME_INPUT_GUN1: // Fall through to below diff --git a/Src/Model3/53C810.cpp b/Src/Model3/53C810.cpp index 841eaf4..64aaddc 100644 --- a/Src/Model3/53C810.cpp +++ b/Src/Model3/53C810.cpp @@ -75,7 +75,7 @@ void C53C810::LoadState(CBlockFile *SaveState) { if (OKAY != SaveState->FindBlock("53C810")) { - ErrorLog("Unable to load 53C810 state. Save state file is corrupted."); + ErrorLog("Unable to load 53C810 state. Save state file is corrupt."); return; } diff --git a/Src/Model3/93C46.cpp b/Src/Model3/93C46.cpp index d059ad1..dc966ba 100644 --- a/Src/Model3/93C46.cpp +++ b/Src/Model3/93C46.cpp @@ -60,7 +60,7 @@ void C93C46::LoadState(CBlockFile *SaveState) { if (OKAY != SaveState->FindBlock("93C46")) { - ErrorLog("Unable to load EEPROM state. File is corrupted."); + ErrorLog("Unable to load EEPROM state. File is corrupt."); return; } diff --git a/Src/Model3/DSB.cpp b/Src/Model3/DSB.cpp index 9238823..b665799 100644 --- a/Src/Model3/DSB.cpp +++ b/Src/Model3/DSB.cpp @@ -516,7 +516,7 @@ void CDSB1::LoadState(CBlockFile *StateFile) if (OKAY != StateFile->FindBlock("DSB1")) { - ErrorLog("Unable to load Digital Sound Board state. Save state file is corrupted."); + ErrorLog("Unable to load Digital Sound Board state. Save state file is corrupt."); return; } @@ -1081,7 +1081,7 @@ void CDSB2::LoadState(CBlockFile *StateFile) if (OKAY != StateFile->FindBlock("DSB2")) { - ErrorLog("Unable to load Digital Sound Board state. Save state file is corrupted."); + ErrorLog("Unable to load Digital Sound Board state. Save state file is corrupt."); return; } diff --git a/Src/Model3/DriveBoard.cpp b/Src/Model3/DriveBoard.cpp index c87c6ef..0e396bd 100644 --- a/Src/Model3/DriveBoard.cpp +++ b/Src/Model3/DriveBoard.cpp @@ -24,6 +24,8 @@ * * Implementation of the CDriveBoard class: drive board (force feedback) * emulation. + * + * NOTE: Simulation does not yet work. Drive board ROMs are required. */ #include "Supermodel.h" @@ -126,7 +128,7 @@ void CDriveBoard::LoadState(CBlockFile *SaveState) { if (SaveState->FindBlock("DriveBoard") != OKAY) { - ErrorLog("Unable to load DriveBoard state. Save state file is corrupted."); + ErrorLog("Unable to load DriveBoard state. Save state file is corrupt."); return; } diff --git a/Src/Model3/DriveBoard.h b/Src/Model3/DriveBoard.h index 252ae7a..fd34f7a 100644 --- a/Src/Model3/DriveBoard.h +++ b/Src/Model3/DriveBoard.h @@ -55,49 +55,207 @@ public: class CDriveBoard : public CBus { public: + /* + * IsAttached(void): + * + * Returns: + * True if the drive board is "attached" and should be emulated, + * otherwise false. + */ bool IsAttached(void); + /* + * IsSimulated(void): + * + * Returns: + * True if the drive board is being simulated rather than actually + * emulated, otherwise false. + */ bool IsSimulated(void); + /* + * GetDIPSwitches(dip1, dip2): + * + * Reads the two sets of DIP switches on the drive board. + * + * Parameters: + * dip1 Reference of variable to store DIP switch 1 to. + * dip2 DIP switch 2. + */ void GetDIPSwitches(UINT8 &dip1, UINT8 &dip2); + /* + * SetDIPSwitches(dip1, dip2): + * + * Sets the DIP switches. + * + * Parameters: + * dip1 DIP switch 1 value. + * dip2 DIP switch 2 value. + */ void SetDIPSwitches(UINT8 dip1, UINT8 dip2); - unsigned GetSteeringStrength(); + /* + * GetSteeringStrength(void): + * + * Returns: + * Strength of the steering based on drive board DIP switches (1-8). + */ + unsigned GetSteeringStrength(void); + /* + * SetSteeringStrength(steeringStrength): + * + * Sets the steering strength (modifies the DIP switch setting). + * + * Parameters: + * steeringStrength A value ranging from 1 to 8. + */ void SetSteeringStrength(unsigned steeringStrength); + /* + * Get7SegDisplays(seg1Digit1, seg1Digit2, seg2Digit1, seg2Digit2): + * + * Reads the 7-segment displays. + * + * Parameters: + * seg1Digit1 Reference of variable to store digit 1 of the first 7- + * segment display to. + * seg1Digit2 First display, second digit. + * seg2Digit1 Second display, first digit. + * seg2Digit2 Second display, second digit. + */ void Get7SegDisplays(UINT8 &seg1Digit, UINT8 &seg1Digit2, UINT8 &seg2Digit1, UINT8 &seg2Digit2); + /* + * GetZ80(void): + * + * Returns: + * The Z80 object. + */ CZ80 *GetZ80(void); + /* + * SaveState(SaveState): + * + * Saves the drive board state. + * + * Parameters: + * SaveState Block file to save state information to. + */ void SaveState(CBlockFile *SaveState); + /* + * LoadState(SaveState): + * + * Restores the drive board state. + * + * Parameters: + * SaveState Block file to load save state information from. + */ void LoadState(CBlockFile *SaveState); + /* + * Init(romPtr): + * + * Initializes (and "attaches") the drive board. This should be called + * before other members. + * + * Parameters: + * romPtr Pointer to the drive board ROM (Z80 program). If this + * is NULL, then the drive board will not be emulated. + * + * Returns: + * FAIL if the drive board could not be initialized (prints own error + * message), otherwise OKAY. If the drive board is not attached + * because no ROM was passed to it, no error is generated and the + * drive board is silently disabled (detached). + */ bool Init(const UINT8 *romPtr); + /* + * AttachInputs(InputsPtr, gameInputFlags): + * + * Attaches inputs to the drive board (for access to the steering wheel + * position). + * + * Parameters: + * InputsPtr Pointer to the input object. + * gameInputFlags The current game's input flags. + */ void AttachInputs(CInputs *InputsPtr, unsigned gameInputFlags); + /* + * Reset(void): + * + * Resets the drive board. + */ void Reset(void); + /* + * Read(): + * + * Reads data from the drive board. + * + * Returns: + * Data read. + */ UINT8 Read(void); + /* + * Write(data): + * + * Writes data to the drive board. + * + * Parameters: + * data Data to send. + */ void Write(UINT8 data); + /* + * RunFrame(void): + * + * Emulates a single frame's worth of time on the drive board. + */ void RunFrame(void); + /* + * CDriveBoard(): + * ~CDriveBoard(): + * + * Constructor and destructor. Memory is freed by destructor. + */ CDriveBoard(); - ~CDriveBoard(void); - // CBus methods + /* + * Read8(addr): + * IORead8(portNum): + * + * Methods for reading from Z80's memory and IO space. Required by CBus. + * + * Parameters: + * addr Address in memory (0-0xFFFF). + * portNum Port address (0-255). + * + * Returns: + * A byte of data from the address or port. + */ UINT8 Read8(UINT32 addr); - - void Write8(UINT32 addr, UINT8 data); - UINT8 IORead8(UINT32 portNum); + /* + * Write8(addr, data): + * IORead8(portNum, data): + * + * Methods for writing to Z80's memory and IO space. Required by CBus. + * + * Parameters: + * addr Address in memory (0-0xFFFF). + * portNum Port address (0-255). + * data Byte to write. + */ + void Write8(UINT32 addr, UINT8 data); void IOWrite8(UINT32 portNum, UINT8 data); private: diff --git a/Src/Model3/IRQ.cpp b/Src/Model3/IRQ.cpp index 736c63d..cc55218 100644 --- a/Src/Model3/IRQ.cpp +++ b/Src/Model3/IRQ.cpp @@ -49,7 +49,7 @@ void CIRQ::LoadState(CBlockFile *SaveState) { if (OKAY != SaveState->FindBlock("IRQ")) { - ErrorLog("Unable to load IRQ controller state. Save state file is corrupted."); + ErrorLog("Unable to load IRQ controller state. Save state file is corrupt."); return; } diff --git a/Src/Model3/MPC10x.cpp b/Src/Model3/MPC10x.cpp index 88e3631..2a3398d 100644 --- a/Src/Model3/MPC10x.cpp +++ b/Src/Model3/MPC10x.cpp @@ -88,7 +88,7 @@ void CMPC10x::LoadState(CBlockFile *SaveState) { if (OKAY != SaveState->FindBlock("MPC10x")) { - ErrorLog("Unable to load MPC%X state. Save state file is corrupted.", model); + ErrorLog("Unable to load MPC%X state. Save state file is corrupt.", model); return; } diff --git a/Src/Model3/Model3.cpp b/Src/Model3/Model3.cpp index 134e767..8d64b17 100644 --- a/Src/Model3/Model3.cpp +++ b/Src/Model3/Model3.cpp @@ -1849,7 +1849,7 @@ void CModel3::LoadState(CBlockFile *SaveState) // Load Model 3 state if (OKAY != SaveState->FindBlock("Model 3")) { - ErrorLog("Unable to load Model 3 core state. Save state file is corrupted."); + ErrorLog("Unable to load Model 3 core state. Save state file is corrupt."); return; } @@ -1896,7 +1896,7 @@ void CModel3::LoadNVRAM(CBlockFile *NVRAM) // Load backup RAM if (OKAY != NVRAM->FindBlock("Backup RAM")) { - ErrorLog("Unable to load Model 3 backup RAM. NVRAM file is corrupted."); + ErrorLog("Unable to load Model 3 backup RAM. NVRAM file is corrupt."); return; } NVRAM->Read(backupRAM, 0x20000); @@ -2640,8 +2640,6 @@ void CModel3::Patch(void) } else if (!strcmp(Game->id, "spikeofe")) { - //*(UINT32 *) &crom[0x600000+0x1240C] = 0x60000000; // illegal ROM - *(UINT32 *) &crom[0x600000+0x36F2C] = 0x60000000; // decrementer loop (see Spikeout) } else if (!strcmp(Game->id, "skichamp")) diff --git a/Src/Model3/Real3D.cpp b/Src/Model3/Real3D.cpp index fd8c617..b3e56bd 100644 --- a/Src/Model3/Real3D.cpp +++ b/Src/Model3/Real3D.cpp @@ -86,7 +86,7 @@ void CReal3D::LoadState(CBlockFile *SaveState) { if (OKAY != SaveState->FindBlock("Real3D")) { - ErrorLog("Unable to load Real3D GPU state. Save state file is corrupted."); + ErrorLog("Unable to load Real3D GPU state. Save state file is corrupt."); return; } diff --git a/Src/Model3/SoundBoard.cpp b/Src/Model3/SoundBoard.cpp index 4aa4177..864b433 100644 --- a/Src/Model3/SoundBoard.cpp +++ b/Src/Model3/SoundBoard.cpp @@ -432,7 +432,7 @@ void CSoundBoard::LoadState(CBlockFile *SaveState) { if (OKAY != SaveState->FindBlock("Sound Board")) { - ErrorLog("Unable to load sound board state. Save state file is corrupted."); + ErrorLog("Unable to load sound board state. Save state file is corrupt."); return; } diff --git a/Src/Model3/TileGen.cpp b/Src/Model3/TileGen.cpp index 3583d40..d3ef61d 100644 --- a/Src/Model3/TileGen.cpp +++ b/Src/Model3/TileGen.cpp @@ -50,7 +50,7 @@ void CTileGen::LoadState(CBlockFile *SaveState) { if (OKAY != SaveState->FindBlock("Tile Generator")) { - ErrorLog("Unable to load tile generator state. Save state file is corrupted."); + ErrorLog("Unable to load tile generator state. Save state file is corrupt."); return; } diff --git a/Src/OSD/SDL/Main.cpp b/Src/OSD/SDL/Main.cpp index d560c0c..ffbffda 100644 --- a/Src/OSD/SDL/Main.cpp +++ b/Src/OSD/SDL/Main.cpp @@ -1213,7 +1213,7 @@ static void Help(void) puts("Video Options:"); puts(" -res=, Resolution"); puts(" -fullscreen Full screen mode"); - puts(" -no-throttle Disable 60 Hz frame rate limit"); + puts(" -no-throttle Disable 60 Hz frame rate lock"); puts(" -show-fps Display frame rate in window title bar"); puts(" -vert-shader= Load 3D vertex shader from external file"); puts(" -frag-shader= Load 3D fragment shader from external file"); @@ -1227,8 +1227,8 @@ static void Help(void) puts(" -no-dsb Disable Digital Sound Board (MPEG music)"); puts(""); puts("Input Options:"); - puts(" -force-feedback Enable force feedback (DirectInput, XInput) [EXPERIMENTAL]"); - puts(" -config-inputs Configure inputs for keyboards, mice, and joysticks"); + puts(" -force-feedback Enable force feedback (DirectInput, XInput)"); + puts(" -config-inputs Configure keyboards, mice, and game controllers"); #ifdef SUPERMODEL_WIN32 printf(" -input-system= Input system [Default: %s]\n", g_Config.GetInputSystem()); #endif diff --git a/Src/Sound/SCSP.cpp b/Src/Sound/SCSP.cpp index 94b9200..61ea54b 100644 --- a/Src/Sound/SCSP.cpp +++ b/Src/Sound/SCSP.cpp @@ -2219,7 +2219,7 @@ void SCSP_LoadState(CBlockFile *StateFile) { if (OKAY != StateFile->FindBlock("SCSP x 2")) { - ErrorLog("Unable to load SCSP state. Save state file is corrupted."); + ErrorLog("Unable to load SCSP state. Save state file is corrupt."); return; } diff --git a/Src/Supermodel.h b/Src/Supermodel.h index 1bdb904..a1a2de6 100644 --- a/Src/Supermodel.h +++ b/Src/Supermodel.h @@ -38,7 +38,7 @@ Program-Wide Definitions ******************************************************************************/ -#define SUPERMODEL_VERSION "0.2a-WIP" // version string +#define SUPERMODEL_VERSION "0.2a-RC2" // version string /******************************************************************************