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
185 lines
4.4 KiB
Plaintext
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
|