Add support for multiple controllers and device types. Make Genode to Libretro input mapping configurable, which relieves the need to externally remap Genode keycodes to conform to static Libretro mapping. Send keyboard input to a optional keyboard callback set by the core to complete keyboard support. Ref #89
202 lines
5.0 KiB
Plaintext
202 lines
5.0 KiB
Plaintext
# setting environment variable FORCE_QEMU permits running netperf in qemu
|
|
set force_qemu [info exists ::env(FORCE_QEMU)]
|
|
|
|
if {[expr [have_include "power_on/qemu"] && !$force_qemu]} {
|
|
puts "\Game emulation on Qemu is not recommended.\n"
|
|
exit
|
|
}
|
|
|
|
#
|
|
# Check used commands
|
|
#
|
|
set wget [check_installed wget]
|
|
set unzip [check_installed unzip]
|
|
|
|
set build_components {
|
|
core init
|
|
app/retro_frontend
|
|
drivers/audio
|
|
drivers/framebuffer
|
|
drivers/input
|
|
drivers/timer
|
|
libretro/snes9x
|
|
server/fb_upscale
|
|
server/report_rom
|
|
}
|
|
|
|
source ${genode_dir}/repos/base/run/platform_drv.inc
|
|
# override default platform driver policy
|
|
proc platform_drv_policy {} {
|
|
return {
|
|
<policy label_prefix="ps2_drv"> <device name="PS2"/> </policy>
|
|
<policy label_prefix="usb_drv"> <pci class="USB"/> </policy>
|
|
<policy label_prefix="fb_drv"> <pci class="VGA"/> </policy>
|
|
<policy label_prefix="audio_drv"> <pci class="AUDIO"/> <pci class="HDAUDIO"/> </policy>}
|
|
|
|
}
|
|
|
|
append_platform_drv_build_components
|
|
|
|
build $build_components
|
|
|
|
create_boot_directory
|
|
|
|
#
|
|
# Generate config
|
|
#
|
|
|
|
append config {
|
|
<config verbose="yes">
|
|
<default caps="128"/>
|
|
<parent-provides>
|
|
<service name="CPU"/>
|
|
<service name="IO_MEM"/>
|
|
<service name="IO_PORT"/>
|
|
<service name="IRQ"/>
|
|
<service name="LOG"/>
|
|
<service name="PD"/>
|
|
<service name="RM"/>
|
|
<service name="ROM"/>
|
|
</parent-provides>
|
|
<default-route>
|
|
<any-service> <parent/> <any-child/> </any-service>
|
|
</default-route>}
|
|
|
|
append_if [have_spec sdl] config {
|
|
<start name="fb_sdl">
|
|
<resource name="RAM" quantum="4M"/>
|
|
<provides>
|
|
<service name="Input"/>
|
|
<service name="Framebuffer"/>
|
|
</provides>
|
|
<config width="640" height="480"/>
|
|
</start>
|
|
<alias name="input_drv" child="fb_sdl"/>
|
|
<alias name="fb_drv" child="fb_sdl"/>}
|
|
|
|
append_platform_drv_config
|
|
|
|
append_if [have_spec vesa] config {
|
|
<start name="fb_drv">
|
|
<resource name="RAM" quantum="4M"/>
|
|
<provides><service name="Framebuffer"/></provides>
|
|
<config buffered="yes"> </config>
|
|
<config width="300" height="200"/>
|
|
</start>}
|
|
|
|
append_if [have_spec pl11x] config {
|
|
<start name="fb_drv">
|
|
<resource name="RAM" quantum="2M"/>
|
|
<provides><service name="Framebuffer"/></provides>
|
|
</start>}
|
|
|
|
append_if [have_spec ps2] config {
|
|
<start name="ps2_drv">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides><service name="Input"/></provides>
|
|
</start>
|
|
<alias name="input_drv" child="ps2_drv"/>}
|
|
|
|
append config {
|
|
<start name="audio_drv">
|
|
<binary name="} [audio_drv_binary] {"/>
|
|
<resource name="RAM" quantum="8M"/>
|
|
<provides><service name="Audio_out"/></provides>
|
|
</start>
|
|
<start name="timer">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides><service name="Timer"/></provides>
|
|
</start>
|
|
<start name="fb_upscale">
|
|
<resource name="RAM" quantum="4M"/>
|
|
<provides> <service name="Framebuffer"/> </provides>
|
|
<route>
|
|
<service name="Framebuffer">
|
|
<child name="fb_drv"/> </service>
|
|
<any-service> <parent/> <any-child/> </any-service>
|
|
</route>
|
|
</start>
|
|
<start name="report_rom">
|
|
<resource name="RAM" quantum="4M"/>
|
|
<provides> <service name="Report"/> </provides>
|
|
<config verbose="yes"/>
|
|
</start>
|
|
<start name="retro_frontend">
|
|
<resource name="RAM" quantum="64M"/>
|
|
<config core="snes9x_libretro.lib.so">
|
|
<game rom="superbossgaiden.sfc"/>
|
|
<libc stdout="/log" stderr="/log"/>
|
|
<vfs> <log/> </vfs>
|
|
<controller port="0" device="1">
|
|
<map from="KEY_LEFT" to="LEFT"/>
|
|
<map from="KEY_RIGHT" to="RIGHT"/>
|
|
<map from="KEY_UP" to="UP"/>
|
|
<map from="KEY_DOWN" to="DOWN"/>
|
|
|
|
<map from="KEY_A" to="L"/>
|
|
<map from="KEY_S" to="R"/>
|
|
<map from="KEY_Z" to="B"/>
|
|
<map from="KEY_X" to="A"/>
|
|
|
|
<map from="KEY_ENTER" to="START"/>
|
|
<map from="KEY_RIGHTSHIFT" to="SELECT"/>
|
|
</controller>
|
|
</config>
|
|
<route>
|
|
<service name="Framebuffer">
|
|
<child name="fb_upscale"/> </service>
|
|
<any-service> <parent/> <any-child/> </any-service>
|
|
</route>
|
|
</start>
|
|
</config>}
|
|
|
|
install_config $config
|
|
|
|
#
|
|
# Download and extract a test ROM
|
|
#
|
|
if {![file exist "bin/superbossgaiden.sfc"]} {
|
|
if {![file exist bin/superbossgaiden.zip]} {
|
|
puts "Downloading Super Boss Gaiden (J).zip..."
|
|
set zip_url "https://superbossgaiden.superfamicom.org/Super%20Boss%20Gaiden%20(J).zip"
|
|
catch { exec $wget $zip_url -O bin/superbossgaiden.zip }
|
|
}
|
|
|
|
puts "Extracting superbossgaiden.sfc..."
|
|
exec mkdir bin/tmp
|
|
exec $unzip -o bin/superbossgaiden.zip -d bin/tmp
|
|
exec mv "bin/tmp/ROM-Version/Super Boss Gaiden (J) (V1.0).sfc" "bin/superbossgaiden.sfc"
|
|
exec rm -rf bin/tmp
|
|
}
|
|
|
|
# generic modules
|
|
append boot_modules {
|
|
core init ld.lib.so
|
|
} [audio_drv_binary] {
|
|
core init ld.lib.so
|
|
audio_drv
|
|
fb_upscale
|
|
libc.lib.so
|
|
libm.lib.so
|
|
report_rom
|
|
retro_frontend
|
|
stdcxx.lib.so
|
|
snes9x_libretro.lib.so
|
|
superbossgaiden.sfc
|
|
timer
|
|
}
|
|
|
|
# platform-specific modules
|
|
lappend_if [have_spec linux] boot_modules fb_sdl
|
|
lappend_if [have_spec vesa] boot_modules fb_drv
|
|
lappend_if [have_spec ps2] boot_modules ps2_drv
|
|
lappend_if [have_spec pl11x] boot_modules fb_drv
|
|
|
|
append_platform_drv_boot_modules
|
|
|
|
build_boot_image $boot_modules
|
|
|
|
append qemu_args " -soundhw es1370 "
|
|
|
|
run_genode_until forever
|