Skip to content

Instantly share code, notes, and snippets.

@udance4ever
Last active November 16, 2025 23:22
Show Gist options
  • Select an option

  • Save udance4ever/613b5deb899bca22e0b989308aab32ec to your computer and use it in GitHub Desktop.

Select an option

Save udance4ever/613b5deb899bca22e0b989308aab32ec to your computer and use it in GitHub Desktop.
Supermodel (Version 0.3a-WIP) macOS working config
;;
;; Supermodel Configuration File
;; Default settings.
;;
;; 3/26/2025 (udance4ever): update to default setting so DualSense works in macOS
;; tested with 2020 M1 MacBookPro 16GB 1TB running macOS Sequoia 15.3.2
;;
;; believe RetroBat in-line comments refer to these bindings that work for DualSense in Windows:
;; https://wiki.retrobat.org/systems-and-emulators/supported-game-systems/arcade/sega/sega-model-3
;;
;; see discussion in https://github.com/trzy/Supermodel/issues/238
;
; Quick Overview
; --------------
;
; All settings are case sensitive. Numbers must be integers. Check your
; spelling carefully because invalid settings are silently ignored. To verify
; that your settings are being parsed correctly, check the contents of
; Supermodel.log.
;
; Global options apply to all games. To create configuration profiles for
; individual games, place settings under sections with the same name as the
; corresponding MAME ROM set, like so:
;
; ; Scud Race
; [ scud ]
;
; SoundVolume = 50
; MusicVolume = 200
; ; ... etc. ...
;
; For a list of all valid settings, please consult README.txt. Only default
; inputs are assigned here.
;
;
; per game tweaks RetroBat has done (aside from rawinput which doesn't appear to be available in macOS)
;
[ daytona2 ]
MusicVolume = 120
SoundVolume = 100
Balance = -10
InputJoy1XSaturation = 165
[ dayto2pe ]
MusicVolume = 120
SoundVolume = 100
Balance = -10
InputJoy1XSaturation = 165
[ dirtdvls ]
MusicVolume = 100
SoundVolume = 130
Balance = -20
InputJoy1XSaturation = 118
[ getbassur ]
WideScreen =0
WideBackground = 0
MusicVolume = 100
SoundVolume = 110
Balance = 10
[ eca ]
MusicVolume = 100
SoundVolume = 100
Balance = -35
[ fvipers2 ]
LegacySoundDSP = 1
MusicVolume = 100
SoundVolume = 170
Balance = 10
[ harley ]
MusicVolume = 100
SoundVolume = 100
Balance = 10
[ lamachin ]
MusicVolume = 100
SoundVolume = 115
Balance = 0
; $known$ macOS: Error: Unknown input system: rawinput
;InputSystem=rawinput
[ lemans24 ]
MusicVolume = 100
SoundVolume = 110
Balance = 0
InputJoy1XSaturation = 120
[ lostwsga ]
MusicVolume = 100
SoundVolume = 105
Balance = 20
; macOS: Error: Unknown input system: rawinput
;InputSystem=rawinput
[ magtruck ]
MusicVolume = 100
SoundVolume = 100
Balance = 15
[ mgtrkbad ]
MusicVolume = 100
SoundVolume = 100
Balance = 15
[ oceanhun ]
; $$ why are music & sound volumes are low...
MusicVolume = 100
SoundVolume = 100
Balance = 0
; $known$ macOS: Error: Unknown input system: rawinput
;InputSystem=rawinput
[ oceanhuna ]
MusicVolume = 100
SoundVolume = 100
Balance = 0
; $known$ macOS: Error: Unknown input system: rawinput
;InputSystem=rawinput
[ scud ]
MusicVolume = 200
SoundVolume = 60
Balance = 0
InputJoy1XSaturation = 170
[ scudplus ]
MusicVolume = 200
SoundVolume = 60
Balance = 0
InputJoy1XSaturation = 170
[ skichamp ]
MusicVolume = 100
SoundVolume = 200
Balance = 10
ForceFeedback=1
[ spikeofe ]
MusicVolume = 120
SoundVolume = 120
Balance = 0
[ spikeout ]
MusicVolume = 90
SoundVolume = 90
Balance = 0
[ srally2 ]
LegacySoundDSP = 1
SoundVolume = 155
MusicVolume = 140
Balance = 15
PowerPCFrequency = 70
InputJoy1XSaturation = 155
[ srally2dx ]
LegacySoundDSP = 1
SoundVolume = 155
MusicVolume = 140
Balance = 15
PowerPCFrequency = 70
InputJoy1XSaturation = 155
[ swtrilgy ]
MusicVolume = 100
SoundVolume = 100
Balance = 0
; macOS: Error: Unknown input system: rawinput
;InputSystem=rawinput
[ vf3 ]
MusicVolume = 100
SoundVolume = 110
Balance = -5
[ vf3tb ]
MusicVolume = 100
SoundVolume = 110
Balance = -5
[ von2 ]
MusicVolume = 100
SoundVolume = 100
Balance = 0
[ vs2 ]
MusicVolume = 100
SoundVolume = 110
Balance = -10
WideScreen = 0
WideBackground = 0
[ vs298 ]
MusicVolume = 100
SoundVolume = 110
Balance = -10
WideScreen = 0
WideBackground = 0
[ vs2v991 ]
MusicVolume = 100
SoundVolume = 110
Balance = -10
WideScreen = 0
WideBackground = 0
[ Global ]
; Graphics
New3DEngine = true
QuadRendering = false
WideScreen = false
Stretch = false
WideBackground = false
Supersampling = 1
; CRT-like color adaption: 0=none, 1=ARI/D93 (recommended for all JP developed games),
; 2=PVM_20M2U/D93, 3=BT601_525/D93, 4=BT601_525/D65 (recommended for all US developed games)
; 5=BT601_625/D65 (recommended for all EUR/AUS developed games)
CRTcolors = 0
; Upscale filter used for the 2D layers: 0=none/sharp pixels, 1=biquintic,
; 2=bilinear, 3=bicubic
UpscaleMode = 2
; Refresh rate (milliHertz accuracy). Actual Model 3 refresh rate is 57.524 Hz
; but this can cause judder so we use 60 Hz by default.
RefreshRate = 60.000
; Legacy SCSP DSP implementation for games that do not play well with the newer
; one (e.g., Fighting Vipers 2)
LegacySoundDSP = false
; Network board
Network = false
SimulateNet = true
PortIn = 1970
PortOut = 1971
AddressOut = "127.0.0.1"
; DualSense (via possibly whacked macOS SDL)
; BUTTON1 - cross (south)
; BUTTON2 - circle (east)
; BUTTON3 - square (west)
; BUTTON4 - triangle (north)
; BUTTON5 - select
; BUTTON6 - ?
; BUTTON7 - start
; BUTTON8 - L3
; BUTTON9 - R3
; BUTTON10 - left shoulder (L1)
; BUTTON11 - right shoulder (R1)
; BUTTON12 - D-pad up
; BUTTON13 - D-pad down
; BUTTON14 - D-pad left
; BUTTON15 - D-pad right
; BUTTON16 - ?
; BUTTON17 - ?
;
; JOY1_XAXIS - L analog joystick left/right
; ZAXIS_POS - R analog joystick X right (should be L analog trigger)
; RXAXIS_POS - R analog joystick Y down (should be R analog joystick X right)
; YAXIS_POS - L analog joystick Y down
; RYAXIS_POS - L analog trigger (should be R analag joystick Y down)
; RZAXIS_POS - R analog trigger
;xinput
;InputStart1 = "KEY_1,JOY1_BUTTON8"
;InputStart2 = "KEY_2,JOY2_BUTTON8"
;dinput
;InputStart1 = "KEY_1,JOY1_BUTTON10"
;InputStart2 = "KEY_2,JOY2_BUTTON10"
;(SDL@macOS)
;InputStart1 = "KEY_1,JOY1_BUTTON7"
;InputStart2 = "KEY_2,JOY2_BUTTON7"
; Common
InputStart1 = "KEY_1,JOY1_BUTTON7"
InputStart2 = "KEY_2,JOY2_BUTTON7"
InputCoin1 = "KEY_3,JOY1_BUTTON5"
InputCoin2 = "KEY_4,JOY2_BUTTON5"
InputServiceA = "KEY_5,JOY1_BUTTON9"
InputServiceB = "KEY_7,JOY2_BUTTON9"
InputTestA = "KEY_6,JOY1_BUTTON8" ; BUTTON10 (Retrobat)
InputTestB = "KEY_8,JOY2_BUTTON8" ; BUTTON10
; 4-way digital joysticks
InputJoyUp = "KEY_UP,JOY1_BUTTON12"
InputJoyDown = "KEY_DOWN,JOY1_BUTTON13"
InputJoyLeft = "KEY_LEFT,JOY1_BUTTON14"
InputJoyRight = "KEY_RIGHT,JOY1_BUTTON15"
InputJoyUp2 = "JOY2_UP"
InputJoyDown2 = "JOY2_DOWN"
InputJoyLeft2 = "JOY2_LEFT"
InputJoyRight2 = "JOY2_RIGHT"
; $ button mappings might be different in RetroBat becuase default is "xinput"
;InputSystem = xinput
; Fighting game buttons
InputPunch = "KEY_A,JOY1_BUTTON1" ; BUTTON3 (RetroBat)
InputKick = "KEY_S,JOY1_BUTTON2" ; BUTTON4
InputGuard = "KEY_D,JOY1_BUTTON3" ; BUTTON1
InputEscape = "KEY_F,JOY1_BUTTON4" ; BUTTON2
InputPunch2 = "JOY2_BUTTON1" ; BUTTON3
InputKick2 = "JOY2_BUTTON2" ; BUTTON4
InputGuard2 = "JOY2_BUTTON3" ; BUTTON1
InputEscape2 = "JOY2_BUTTON4" ; BUTTON2
; Spikeout buttons
InputShift = "KEY_A,JOY1_BUTTON1" ; BUTTON2,BUTTON6
InputBeat = "KEY_S,JOY1_BUTTON2" ; BUTTON1
InputCharge = "KEY_D,JOY1_BUTTON3"
InputJump = "KEY_F,JOY1_BUTTON4"
; Virtua Striker buttons
InputShortPass = "KEY_A,JOY1_BUTTON1" ; BUTTON3 (RetroBat)
InputLongPass = "KEY_S,JOY1_BUTTON2" ; BUTTON1
InputShoot = "KEY_D,JOY1_BUTTON3" ; BUTTON2
InputShortPass2 = "JOY2_BUTTON1" ; BUTTON3
InputLongPass2 = "JOY2_BUTTON2" ; BUTTON1
InputShoot2 = "JOY2_BUTTON3" ; BUTTON2
; Steering wheel
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"
;InputBrake = "KEY_DOWN,JOY1_DOWN"
; from RetroBat
InputAccelerator = "KEY_UP,JOY1_RZAXIS_POS"
; $$ wonky in macOS SDL! (why is this happening?)
; ZAXIS_POS - right analog joystick X axis (stick right brakes) (should be L analog trigger)
; RXAXIS_POS - right analog joystick Y axis (stick down brakes) (should be *X* axis)
; YAXIS_POS - left analog joystick Y axis (stick down brakes) (this is actually correct, backup)
; RYAXIS_POS - left analog trigger (should be R analog stick Y axis)
;InputBrake = "KEY_DOWN,JOY1_ZAXIS_POS" ; what should work
InputBrake = "KEY_DOWN,JOY1_RYAXIS_POS"
; Up/down shifter manual transmission (all racers)
InputGearShiftUp = "KEY_Y,JOY1_BUTTON11" ; sequential shift up ; BUTTON6 (RetroBat)
InputGearShiftDown = "KEY_H,JOY1_BUTTON10" ; sequential shift down ; BUTTON5
; 4-Speed manual transmission (Daytona 2, Sega Rally 2, Scud Race)
;InputGearShift1 = "KEY_Q,JOY1_BUTTON5"
;InputGearShift2 = "KEY_W,JOY1_BUTTON6"
;InputGearShift3 = "KEY_E,JOY1_BUTTON7"
;InputGearShift4 = "KEY_R,JOY1_BUTTON8"
;InputGearShiftN = "KEY_T"
; $$ Retrobat maps to right analog stick
;InputGearShift1 = "KEY_Q,JOY1_RYAXIS_NEG"
;InputGearShift2 = "KEY_W,JOY1_RYAXIS_POS"
;InputGearShift3 = "KEY_E,JOY1_RXAXIS_NEG"
;InputGearShift4 = "KEY_R,JOY1_RXAXIS_POS"
;InputGearShiftN = "KEY_T"
; $$ whacked macOS SDL mappings have analogs mixed up
InputGearShift1 = "KEY_Q,JOY1_RXAXIS_NEG"
InputGearShift2 = "KEY_W,JOY1_RXAXIS_POS"
InputGearShift3 = "KEY_E,JOY1_ZAXIS_NEG"
InputGearShift4 = "KEY_R,JOY1_ZAXIS_POS"
InputGearShiftN = "KEY_T"
; VR4 view change buttons (Daytona 2, Le Mans 24, Scud Race)
InputVR1 = "KEY_A,JOY1_BUTTON1" ; BUTTON4 (RetroBat)
InputVR2 = "KEY_S,JOY1_BUTTON2" ; BUTTON1
InputVR3 = "KEY_D,JOY1_BUTTON3" ; BUTTON3
InputVR4 = "KEY_F,JOY1_BUTTON4" ; BUTTON2
; Single view change button (Dirt Devils, ECA, Harley-Davidson, Sega Rally 2)
InputViewChange = "KEY_A,JOY1_BUTTON1" ; BUTTON4 (RetroBat)
; Handbrake (Sega Rally 2)
InputHandBrake = "KEY_S,JOY1_BUTTON2" ; BUTTON1
; Harley-Davidson controls
InputRearBrake = "KEY_S,JOY1_BUTTON2" ; BUTTON1
InputMusicSelect = "KEY_D,JOY1_BUTTON3" ; BUTTON2
; Virtual On macros
InputTwinJoyTurnLeft = "KEY_Q,JOY1_RXAXIS_NEG"
InputTwinJoyTurnRight = "KEY_W,JOY1_RXAXIS_POS"
InputTwinJoyForward = "KEY_UP,JOY1_YAXIS_NEG"
InputTwinJoyReverse = "KEY_DOWN,JOY1_YAXIS_POS"
InputTwinJoyStrafeLeft = "KEY_LEFT,JOY1_XAXIS_NEG"
InputTwinJoyStrafeRight = "KEY_RIGHT,JOY1_XAXIS_POS"
InputTwinJoyJump = "KEY_E,JOY1_BUTTON1" ; BUTTON4 (RetroBat)
InputTwinJoyCrouch = "KEY_R,JOY1_BUTTON2" ; BUTTON1
; Virtual On individual joystick mapping
InputTwinJoyLeft1 = "NONE"
InputTwinJoyLeft2 = "NONE"
InputTwinJoyRight1 = "NONE"
InputTwinJoyRight2 = "NONE"
InputTwinJoyUp1 = "NONE"
InputTwinJoyUp2 = "NONE"
InputTwinJoyDown1 = "NONE"
InputTwinJoyDown2 = "NONE"
; Virtual On buttons
InputTwinJoyShot1 = "KEY_A,JOY1_BUTTON5" ; JOY_ZAXIS_POS (RetroBat)
InputTwinJoyShot2 = "KEY_S,JOY1_BUTTON6" ; JOY1_RZAXIS_POS
InputTwinJoyTurbo1 = "KEY_Z,JOY1_BUTTON7" ; BUTTON3,BUTTON5
InputTwinJoyTurbo2 = "KEY_X,JOY1_BUTTON8" ; BUTTON2,BUTTON6
; Analog joystick (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_INV,MOUSE_XAXIS_INV" ; analog, full X axis ; inverted (like RetroBat)
InputAnalogJoyY = "JOY_YAXIS_INV,MOUSE_YAXIS_INV" ; analog, full Y axis ; (RetroBat only inverts JOY)
InputAnalogJoyTrigger = "KEY_A,JOY_BUTTON1,MOUSE_LEFT_BUTTON" ; JOY1_RZAXIS_POS,BUTTON3
InputAnalogJoyEvent = "KEY_S,JOY_BUTTON2,MOUSE_RIGHT_BUTTON" ; BUTTON1
InputAnalogJoyTrigger2 = "KEY_D,JOY_BUTTON2" ; NONE
InputAnalogJoyEvent2 = "NONE"
; Light guns (Lost World)
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 ; mouse (only) (RetroBat)
InputGunY = "MOUSE_YAXIS,JOY1_YAXIS" ; analog, full Y axis ; mouse (only)
InputTrigger = "KEY_A,JOY1_BUTTON1,MOUSE_LEFT_BUTTON" ; mouse (only)
InputOffscreen = "KEY_S,JOY1_BUTTON2,MOUSE_RIGHT_BUTTON" ; point off-screen ; mouse (only)
InputAutoTrigger = 1 ; automatic reload when off-screen ; (RetroBat 1)
InputGunLeft2 = "NONE"
InputGunRight2 = "NONE"
InputGunUp2 = "NONE"
InputGunDown2 = "NONE"
InputGunX2 = "JOY2_XAXIS,MOUSE2_XAXIS" ; mouse2 (only) (RetroBat)
InputGunY2 = "JOY2_YAXIS,MOUSE2_YAXIS" ; mouse2 (only)
InputTrigger2 = "JOY2_BUTTON1" ; MOUSE2_LEFT_BUTTON (only)
InputOffscreen2 = "JOY2_BUTTON2" ; MOUSE2_RIGHT_BUTTON (only)
InputAutoTrigger2 = 1 ; (RetroBat 1)
; Analog guns (Ocean Hunter, LA Machineguns)
InputAnalogGunLeft = "KEY_LEFT" ; digital, move gun left
InputAnalogGunRight = "KEY_RIGHT" ; digital, move gun right
InputAnalogGunUp = "KEY_UP" ; digital, move gun up
InputAnalogGunDown = "KEY_DOWN" ; digital, move gun down
InputAnalogGunX = "MOUSE_XAXIS,JOY1_XAXIS" ; analog, full X axis ; MOUSE1_XAXIS (only) (RetroBat)
InputAnalogGunY = "MOUSE_YAXIS,JOY1_YAXIS" ; analog, full Y axis ; MOUSE1_YAXIS (only)
InputAnalogTriggerLeft = "KEY_A,JOY1_BUTTON1,MOUSE_LEFT_BUTTON" ; MOUSE1_LEFT_BUTTON (only)
InputAnalogTriggerRight = "KEY_S,JOY1_BUTTON2,MOUSE_RIGHT_BUTTON" ; MOUSE1_RIGHT_BUTTON (only)
InputAnalogGunLeft2 = "NONE"
InputAnalogGunRight2 = "NONE"
InputAnalogGunUp2 = "NONE"
InputAnalogGunDown2 = "NONE"
InputAnalogGunX2 = "NONE" ; MOUSE2_LEFT_BUTTON
InputAnalogGunY2 = "NONE" ; MOUSE2_RIGHT_BUTTON
InputAnalogTriggerLeft2 = "NONE"
InputAnalogTriggerRight2 = "NONE"
; Ski Champ controls
InputSkiLeft = "KEY_LEFT"
InputSkiRight = "KEY_RIGHT"
InputSkiUp = "KEY_UP"
InputSkiDown = "KEY_DOWN"
InputSkiX = "JOY1_XAXIS"
;InputSkiY = "JOY1_YAXIS"
InputSkiY = "JOY1_RXAXIS" ; R analog joystick X (from RetroBat, not working in macOS)
;; not sure which is better, using L1/R1 or L2/R2...
;InputSkiPollLeft = "KEY_A,JOY1_BUTTON1" ; cross
InputSkiPollLeft = "KEY_A,JOY1_RYAXIS_POS" ; L2: ZAXIS_POS (RetroBat)
;InputSkiPollLeft = "KEY_A,JOY1_BUTTON10" ; L1
;InputSkiPollRight = "KEY_S,JOY1_BUTTON2" ; circle
InputSkiPollRight = "KEY_S,JOY1_RZAXIS_POS" ; R2
;InputSkiPollRight = "KEY_S,JOY1_BUTTON11" ; R1
InputSkiSelect1 = "KEY_Q,JOY1_BUTTON3"
InputSkiSelect2 = "KEY_W,JOY1_BUTTON4" ; BUTTON1
InputSkiSelect3 = "KEY_E,JOY1_BUTTON5" ; BUTTON2
; Magical Truck Adventure controls
InputMagicalLeverUp1 = "KEY_UP"
InputMagicalLeverDown1 = "KEY_DOWN"
InputMagicalLeverUp2 = "NONE"
InputMagicalLeverDown2 = "NONE"
InputMagicalLever1 = "JOY1_YAXIS"
InputMagicalLever2 = "JOY2_YAXIS"
InputMagicalPedal1 = "KEY_A,JOY1_BUTTON1"
InputMagicalPedal2 = "KEY_S,JOY2_BUTTON1"
; Sega Bass Fishing / Get Bass controls
InputFishingRodLeft = "KEY_LEFT"
InputFishingRodRight = "KEY_RIGHT"
InputFishingRodUp = "KEY_UP"
InputFishingRodDown = "KEY_DOWN"
InputFishingStickLeft = "KEY_A"
InputFishingStickRight = "KEY_D"
InputFishingStickUp = "KEY_W"
InputFishingStickDown = "KEY_S"
InputFishingRodX = "JOY1_XAXIS"
InputFishingRodY = "JOY1_YAXIS"
InputFishingStickX = "JOY1_RXAXIS"
InputFishingStickY = "JOY1_RYAXIS"
InputFishingReel = "KEY_SPACE,JOY1_ZAXIS_POS"
InputFishingCast = "KEY_Z,JOY1_BUTTON1" ; BUTTON3 (RetroBat)
InputFishingSelect = "KEY_X,JOY1_BUTTON2" ; BUTTON1
InputFishingTension = "KEY_T,JOY1_ZAXIS_NEG" ; NONE
Crosshairs=3
PowerPCFrequency=69
GPUMultiThreaded=1
MultiThreaded=1
MultiTexture=0
EmulateSound=1
FullScreen=1
Throttle=1 ; (RetroBat 1)
ShowFrameRate=1 ; 0
FlipStereo=0
VSync=1
XResolution=1920
YResolution=1080
EmulateDSB=1
NbSoundChannels=4
ForceFeedback=1
EmulateNet=0
InputJoy1XDeadZone=7 ; 5
InputJoy1YDeadZone=7 ; 5
InputJoy2XDeadZone=7 ; 5
InputJoy2YDeadZone=7 ; 5
MusicVolume=100
SoundVolume=100
Balance=0
;[Supermodel3 UI]
;Legacy=0
;HideCMD=0
;Dir=ROMs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment