Files
genode-world/run/meteor.run
Emery Hemingway a2f2c74fcf Refactor retro_frontend
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
2017-11-27 14:54:24 +01:00

185 lines
4.4 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 {
app/retro_frontend
drivers/audio
libretro/meteor
server/fb_upscale
server/input_remap
}
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>}
}
build $build_components
create_boot_directory
import_from_depot \
genodelabs/src/[base_src] \
genodelabs/pkg/[drivers_interactive_pkg] \
genodelabs/src/init \
genodelabs/src/report_rom \
#
# 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="meteor_libretro.lib.so">
<game rom="game.gba"/>
<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>
<libc stdout="/log" stderr="/log"/>
<vfs>
<log/>
</vfs>
</config>
<route>
<service name="Framebuffer">
<child name="fb_upscale"/> </service>
<service name="Input">
<child name="input_drv"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
</config>}
install_config $config
if {![file exists bin/game.gba]} {
puts ""
puts "A Game Boy Advance cartridge image must be provided at 'bin/game.gba'"
puts ""
exit 1
}
# generic modules
append boot_modules {
fb_upscale
input_remap
libc.lib.so
libm.lib.so
meteor_libretro.lib.so
retro_frontend
stdcxx.lib.so
} [audio_drv_binary] {
game.gba
}
append_platform_drv_boot_modules
build_boot_image $boot_modules
append qemu_args " -soundhw es1370 "
run_genode_until forever