bindings {
	keys {
		up gamepads.1.up
		down gamepads.1.down
		left gamepads.1.left
		right gamepads.1.right
		a gamepads.1.a
		s gamepads.1.b
		d gamepads.1.c
		q gamepads.1.x
		w gamepads.1.y
		e gamepads.1.z
		f gamepads.1.mode
		enter gamepads.1.start

		r ui.release_mouse
		[ ui.vdp_debug_mode
		u ui.enter_debugger
		p ui.screenshot
		i ui.record_video
		b ui.plane_debug
		v ui.vram_debug
		c ui.cram_debug
		n ui.compositing_debug
		o ui.oscilloscope
		m ui.vgm_log
		esc ui.menu
		` ui.save_state
		l ui.load_state
		0 ui.set_speed.0
		1 ui.set_speed.1
		2 ui.set_speed.2
		3 ui.set_speed.3
		4 ui.set_speed.4
		5 ui.set_speed.5
		6 ui.set_speed.6
		7 ui.set_speed.7
		= ui.next_speed
		- ui.prev_speed
		f11 ui.toggle_fullscreen
		tab ui.soft_reset
		f5 ui.reload
		z ui.sms_pause
		rctrl ui.toggle_keyboard_captured
		f2 cassette.play
		f3 cassette.stop
		f4 cassette.rewind
		f7 ui.pause
		f8 ui.advance
	}
	pads {
		default {
			dpads {
				0 {
					up gamepads.n.up
					down gamepads.n.down
					left gamepads.n.left
					right gamepads.n.right
				}
			}
			buttons {
				a gamepads.n.a
				b gamepads.n.b
				rightshoulder gamepads.n.c
				x gamepads.n.x
				y gamepads.n.y
				leftshoulder gamepads.n.z
				back gamepads.n.mode
				start gamepads.n.start
				guide ui.menu
				leftstick ui.save_state
			}
			axes {
				lefty.positive gamepads.n.down
				lefty.negative gamepads.n.up
				leftx.positive gamepads.n.right
				leftx.negative gamepads.n.left
				lefttrigger ui.prev_speed
				righttrigger ui.next_speed
			}
		}
		ps4_6b_right {
			axes {
				lefttrigger ui.next_speed
				leftx.negative gamepads.n.up
				leftx.positive gamepads.n.down
				lefty.negative gamepads.n.left
				lefty.positive gamepads.n.right
				righttrigger gamepads.n.c
			}
			buttons {
				a gamepads.n.a
				b gamepads.n.b
				back ui.sms_pause
				guide ui.menu
				leftshoulder gamepads.n.mode
				leftstick ui.save_state
				rightshoulder gamepads.n.z
				rightstick ui.prev_speed
				start gamepads.n.start
				x gamepads.n.x
				y gamepads.n.y
			}
			dpads {
				0 {
					down gamepads.n.down
					left gamepads.n.left
					right gamepads.n.right
					up gamepads.n.up
				}
			}
		}
		ps3_6b_right {
			axes {
				lefttrigger ui.next_speed
				leftx.negative gamepads.n.up
				leftx.positive gamepads.n.down
				lefty.negative gamepads.n.left
				lefty.positive gamepads.n.right
				righttrigger gamepads.n.c
			}
			buttons {
				a gamepads.n.a
				b gamepads.n.b
				back ui.sms_pause
				guide ui.menu
				leftshoulder gamepads.n.mode
				leftstick ui.save_state
				rightshoulder gamepads.n.z
				rightstick ui.prev_speed
				start gamepads.n.start
				x gamepads.n.x
				y gamepads.n.y
			}
			dpads {
				0 {
					down gamepads.n.down
					left gamepads.n.left
					right gamepads.n.right
					up gamepads.n.up
				}
			}
		}
		xbox_360_6b_right {
			axes {
				lefttrigger ui.next_speed
				leftx.negative gamepads.n.up
				leftx.positive gamepads.n.down
				lefty.negative gamepads.n.left
				lefty.positive gamepads.n.right
				righttrigger gamepads.n.c
			}
			buttons {
				a gamepads.n.a
				b gamepads.n.b
				back ui.sms_pause
				guide ui.menu
				leftshoulder gamepads.n.mode
				leftstick ui.save_state
				rightshoulder gamepads.n.z
				rightstick ui.prev_speed
				start gamepads.n.start
				x gamepads.n.x
				y gamepads.n.y
			}
			dpads {
				0 {
					down gamepads.n.down
					left gamepads.n.left
					right gamepads.n.right
					up gamepads.n.up
				}
			}
		}
		xbone_6b_right {
			axes {
				lefttrigger ui.next_speed
				leftx.negative gamepads.n.up
				leftx.positive gamepads.n.down
				lefty.negative gamepads.n.left
				lefty.positive gamepads.n.right
				righttrigger gamepads.n.c
			}
			buttons {
				a gamepads.n.a
				b gamepads.n.b
				back ui.sms_pause
				guide ui.menu
				leftshoulder gamepads.n.mode
				leftstick ui.save_state
				rightshoulder gamepads.n.z
				rightstick ui.prev_speed
				start gamepads.n.start
				x gamepads.n.x
				y gamepads.n.y
			}
			dpads {
				0 {
					down gamepads.n.down
					left gamepads.n.left
					right gamepads.n.right
					up gamepads.n.up
				}
			}
		}
		genesis_6b_bumpers {
			axes {
				lefttrigger ui.menu
				righttrigger gamepads.n.mode
			}
			buttons {
				a gamepads.n.a
				b gamepads.n.b
				back ui.sms_pause
				guide ui.menu
				leftshoulder gamepads.n.z
				rightshoulder gamepads.n.c
				start gamepads.n.start
				x gamepads.n.x
				y gamepads.n.y
			}
			dpads {
				0 {
					down gamepads.n.down
					left gamepads.n.left
					right gamepads.n.right
					up gamepads.n.up
				}
			}
		}
		saturn_6b_bumpers {
			axes {
				lefttrigger ui.menu
				righttrigger gamepads.n.mode
			}
			buttons {
				a gamepads.n.a
				b gamepads.n.b
				back ui.sms_pause
				guide ui.menu
				leftshoulder gamepads.n.z
				rightshoulder gamepads.n.c
				start gamepads.n.start
				x gamepads.n.x
				y gamepads.n.y
			}
			dpads {
				0 {
					down gamepads.n.down
					left gamepads.n.left
					right gamepads.n.right
					up gamepads.n.up
				}
			}
		}
	}
	mice {
		0 {
			motion mouse.1.motion
			buttons {
				1 mouse.1.left
				2 mouse.1.middle
				3 mouse.1.right
				4 mouse.1.start
			}
		}
		#having the second host mouse also mapped to the first emulated
		#mouse is useful for laptop users with an external mouse
		1 {
			motion mouse.1.motion
			buttons {
				1 mouse.1.left
				2 mouse.1.middle
				3 mouse.1.right
				4 mouse.1.start
			}
		}
	}
}

io {
	devices {
		1 gamepad6.1
		2 gamepad6.2
	}
	sega_multitap.1 {
		1 gamepad6.2
		2 gamepad6.3
		3 gamepad6.4
		4 gamepad6.5
	}
	ea_multitap {
		1 gamepad6.1
		2 gamepad6.2
		3 gamepad6.3
		4 gamepad6.4
	}
}

video {
	#special value "stretch" will cause aspect to match window aspect ratio
	aspect 4:3
	width 640
	#height is normally calculated automatically from width using the aspect setting
	#if you would like to set it explicitly, uncomment the line below
	#height 480
	vertex_shader default.v.glsl
	fragment_shader default.f.glsl
	scanlines off
	vsync off
	fullscreen off
	#forces an integer ratio between the emulated height and the height on screen
	integer_scaling off
	#setting gl to off, will force use of the SDL2 fallback renderer
	#this is useful for those running on machines with Open GL 2.0 unavailable
	#so the warning doesn't display on startup
	gl on
	#scaling can be linear (for linear interpolation) or nearest (for nearest neighbor)
	scaling linear
	#When off, a 512x512 texture is used for each field, when turned on a smaller texture is used
	#turning this on seems to help performance on certain mobile GPUs like Mali
	npot_textures off
	ntsc {
		overscan {
			#these values will result in square pixels in H40 mode
			top 2
			bottom 1
			#if you want to completely hide the border instead
			#comment out those two lines and uncomment these
			#top 11
			#bottom 8

			#these values will completely hide the horizontal border
			left 13
			right 14
		}
	}
	pal {
		overscan {
			#these values will produce the same size border in V30 mode
			#as the default NTSC settings will produce in V24 mode
			#this results in a slightly vertically squished picture
			#which is probably approximately correct on a properly calibrated TV
			top 21
			bottom 17
			#for square pixels and zero border in V30 mode
			#coment out those two lines and uncomment these
			#top 30
			#bottom 24

			#these values will completely hide the horizontal border
			left 13
			right 14
		}
	}
	gamegear {
		overscan {
			#generally shouldn't change these
			top 51
			bot 48
			left 61
			right 62
		}
	}
}

audio {
	rate 48000
	buffer 512
	lowpass_cutoff 3390
	#Use f32 for 32-bit floating point, s16 for signed 16-bit integer
	format f32
}

clocks {
	m68k_divider 7
	max_cycles 3420
	speeds {
		0 100
		1 150
		2 200
		3 300
		4 400
		5 25
		6 50
		7 75
	}
}

ui {
	#specifies the ROM that implements the Menu UI
	rom menu.bin
	#starting path for ROM browsing, accepts special variables $HOME, $EXEDIR
	#and variables defined in the OS environment
	initial_path $HOME
	#if this is set to on, then the menu will remember the last path when visited
	#if it's set to off, initial_path will always be used on startup
	remember_path on
	#path for storing internal screenshots, accepts the same variables as initial_path
	screenshot_path $HOME
	#see strftime for the format specifiers valid in screenshot_template
	screenshot_template blastem_%Y%m%d_%H%M%S.png
	#path for storing VGM recordings, accepts the same variables as initial_path
	vgm_path $HOME
	#see strftime for the format specifiers valid in vgm_template
	vgm_template blastem_%Y%m%d_%H%M%S.vgm
	#path template for saving SRAM, EEPROM and savestates
	#accepts special variables $HOME, $EXEDIR, $USERDATA, $ROMNAME
	save_path $USERDATA/blastem/$ROMNAME
	#space delimited list of file extensions to filter against in menu
	extensions bin gen md smd sms gg sg sc sf7 zip gz cue iso vgm vgz flac wav col
	#specifies the preferred save-state format, set to gst for Genecyst compatible states
	state_format native
	#set to on to use the native file picker on your OS instead of the builtin one
	use_native_filechooser off
}

system {
	#controls how the emulated system is synced to the host
	#video provides the smoothest experience when the host and emulated system have similar refresh rates
	#audio provides lower audio latency, especially when there is a refresh rate mismatch
	sync_source audio
	#set this to random to debug initialization bugs
	ram_init zero
	#Default region to use when the ROM has no region info or there are multiple options
	#U = USA/North America, E = Europe, J = Japan
	default_region U
	#Whether to always force the region selected in default_region
	force_region off
	#controls whether MegaWiFi support is enabled or not
	#MegaWiFi allows ROMs to make connections to the internet
	#so it should only be enabled for ROMs you trust
	megawifi off
	#Model of the emulated Gen/MD system, see systems.cfg for a list of options
	model md1va3
}

sms {
	system {
		model md1va3
	}
	io {
		devices {
			1 gamepad2.1
			2 gamepad2.2
		}
	}
}

#Don't manually edit `version`, it's used for automatic config migration
version 12
