A Sega Model 3 Arcade Emulator
Topics for advanced users are covered here. For more information, please consult the README.txt bundled with Supermodel. This information applies only to the most recent version.
In order to improve performance, the PowerPC is underclocked, which avoids wasting time emulating cycles that on the real hardware would be spent idle due to rendering and DMA transfers. For most games, the default 50 MHz frequency works fine, but a few games may exhibit slow down even when running at the full frame rate (60 FPS). Experimenting with different clock speeds (the -ppc-frequency option) might help. Reportedly, running the PowerPC at 50 MHz fixes slow-down and stutter in a few games, most notably Scud Race. Some games may be run at frequencies as low as 25 MHz, which will improve Supermodel's frame rate.
Increasing the clock frequency means the emulator must do more work per frame, decreasing real performance. However, it increases the amount of work games can do per frame. If your CPU is fast enough to absorb the performance penalty associated with increasing the PowerPC clock (i.e. the frame rate stays at 60 FPS), then you will notice smoother performance in some games. Otherwise, each frame will take longer to emulate and overall performance will degrade, even though things are running faster in the game's "virtual" world.
Supermodel's default SDL input system, which is available on all ports, allows keyboards, mice, and game controllers to be used. On Windows, three additional input systems are available, all of them based on the DirectInput API, to provide additional support for a few extra features. The complete set of input systems (and the command line arguments associated with them) are:
For most users, the default input system will suffice. If you wish to use an alternative input system, remember to select it on the command line both when starting a game and when configuring inputs with the -config-inputs option. There is no way to specify an input system in the configuration file.
Force feedback emulation is available for some racing games and can be enabled with the -force-feedback option. In order to use it, however, recently-dumped drive board ROMs must be present in the ZIP file for each game. Below is a table of the required files.
Drive Board ROM File | Size | Checksum (CRC32) | Game |
epr-20985.bin | 64 KB | B139481D | Daytona USA 2 Battle on the Edge Daytona USA 2 Power Edition |
epr-19338a.bin | 64 KB | C9FAC464 | Scud Race Scud Race Plus |
epr-20512.bin | 64 KB | CF64350D | Sega Rally 2 |
Force feedback only works in the Windows version of Supermodel, and only when using DirectInput or XInput. See README.txt for a discussion of how to tune force feedback effects.
The configuration file, Supermodel.ini, located in the Config folder, stores input settings as well as most of what can be set on the command line. It does not exist in a fresh installation of Supermodel but can be created manually or generated by setting up inputs with -config-inputs. If the file already exists, only the input settings will be changed and the others will be preserved. The primary options that can be set (excluding input-related settings) are listed in the table below.
Setting | Argument | Description | Default |
MultiThreaded | 0 or 1 | Multi-threading. Audio and drive board are off-loaded to separate threads, enhancing performance. On single core systems, multi-threading can make audio sound smoother but adds performance-degrading overhead. | 1 |
PowerPCFrequency | 1 to 1000 | The PowerPC frequency in MHz. The lower the frequency, the less work Supermodel has to do, but games may experience jerky performance and slowdown even when running at 60 FPS. Many games can be run at as low as 25 MHz but others require higher clock frequencies. Optimal values will differ from game to game. | 50 |
FullScreen | 0 or 1 | Full screen mode. | 0 |
ShowFrameRate | 0 or 1 | Displays the frame rate in the window title bar. Will not be visible in full screen mode. | 0 |
Throttle | 0 or 1 | Locks the frame rate at 60 FPS, the Model 3's native refresh rate. Some video drivers will automatically lock to the display refresh rate, even if throttling is disabled. | 1 |
XResolution | Width (integer) | Width of desired display resolution in pixels. | 496 |
YResolution | Height (integer) | Height of desired display resolution in pixels. | 384 |
FragmentShader | File path (string) | Allows alternative fragment shaders to be used. This is intended for developers and future extensibility. | None |
VertexShader | File path (string) | Allows alternative vertex shaders to be used. This is intended for developers and future extensibility. | None |
EmulateDSB | 0 or 1 | Emulation of the Digital Sound Board (MPEG music). If disabled, the DSB's CPU will not be emulated, possibly improving performance on single-core systems. | 1 |
EmulateSound | 0 or 1 | Emulation of the sound board. If disabled, the sound board CPU and SCSP will be disabled and no sound effects will be heard. May improve performance on single-core systems. | 1 |
FlipStereo | 0 or 1 | Swap left and right audio channels. | 0 |
MusicVolume | 0 to 200 | Music (MPEG board) volume. | 100 |
SoundVolume | 0 to 200 | Sound (SCSP) volume. | 100 |
ForceFeedback | 0 or 1 | Enables force feedback if drive board ROMs are present. Windows only. | 0 |
DirectInputConstForceMax | Scale (integer) | Sets the strength of the constant force effect when using DirectInput. | 100 |
DirectInputFrictionMax | Scale (integer) | Sets the strength of the friction effect when using DirectInput. | 100 |
DirectInputSelfCenterMax | Scale (integer) | Sets the strength of the self-center effect when using DirectInput. | 100 |
DirectInputVibrateMax | Scale (integer) | Sets the strength of the vibration effect when using DirectInput. | 100 |
XInputConstForceMax | Scale (integer) | Sets the strength of the constant force (simulated with vibration) when using XInput. | 100 |
XInputVibrateMax | Scale (integer) | Sets the strength of the vibration effect when using XInput. | 100 |
XInputConstForceThreshold | Level (integer) | Sets the force threshold above which constant forces will cause XInput devices to vibrate. | 30 |
In addition to the above, there are numerous input settings for mappings, key sensitivity (for keyboard keys mapped to analog controls), and mouse and joystick axis settings. These are described in great detail in README.txt.
All settings in the file are either global or game-specific. Global settings apply to all games and appear either under the [Global] heading or at the beginning of the file (no heading). Game-specific settings add an extra degree of customizability. To use them, place them under a heading with the MAME ID of the ROM set they will apply to (e.g. [scud], [dayto2pe], etc.) Supermodel loads settings in the following order:
The latter options will override previous ones. Input settings are read only from the global section. An example configuration file is shown below.
;
; Sample Supermodel.ini
;
; Global settings
[ Global ]
XResolution = 640
YResolution = 480
FullScreen = 0
; Scud Race
[ scud ]
XResolution = 1024
YResolution = 768
FullScreen = 1
SoundVolume = 50
MusicVolume = 200
; The Lost World
[ lostwsga ]
XResolution = 800
YResolution = 600
In this example, a window resolution of 640x480 is used for all games except for Scud Race, which will run at a higher resolution as well as in full screen mode, and The Lost World. Different volume settings are provided for Scud Race as well. All of these options can be overriden on the command line.
A word of caution: settings and section names are case-sensitive. Supermodel will not warn about unrecognized options, so be careful with spelling! If you suspect you made a mistake, check the error.log file that Supermodel produces during each run. It contains a listing of the settings actually used.
Supermodel relies heavily on OpenGL shaders to emulate the Model 3's 3D graphics. Some older graphics chipsets have strict limitations on the number of shader instructions that can be compiled. These will not be able to run Supermodel properly, resulting either in very obvious 3D graphics problems (no textures, no shading, uniform colors) or a confusing error message. Older ATI Radeon GPUs generate the following error, for example:
Error: Failed to link shader objects. Linker says:
Fragment shader(s) failed to link, vertex shader(s) linked.
The solution is to use a "lighter" fragment shader that reduces rendering accuracy by eliminating some less commonly used effects, namely the spotlight. Additional shaders can be obtained from the source code section of the Download page. To use them, place them in the same location as the Supermodel executable and add -frag-shader=<file> to the command line arguments. For example:
supermodel scud.zip -frag-shader=Fragment_NoSpotlight.glsl