
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
		b ui.plane_debug
		v ui.vram_debug
		c ui.cram_debug
		n ui.compositing_debug
		esc ui.exit
		` ui.save_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
	}
	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.exit
				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.exit
				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.exit
				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.exit
				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.exit
				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.exit
				righttrigger gamepads.n.mode
			}
			buttons {
				a gamepads.n.a
				b gamepads.n.b
				back ui.sms_pause
				guide ui.exit
				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.exit
				righttrigger gamepads.n.mode
			}
			buttons {
				a gamepads.n.a
				b gamepads.n.b
				back ui.sms_pause
				guide ui.exit
				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
	}
}

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
	#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
	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
		}
	}
}

audio {
	rate 48000
	buffer 512
	lowpass_cutoff 3390
}

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 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 zip gz
	#specifies the preferred save-state format, set to gst for Genecyst compatible states
	state_format native
}

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 U
	#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
}


