Recalbox - leonkasovan/RG353P GitHub Wiki
Source:
https://gitlab.com/recalbox/recalbox
wget https://raw.githubusercontent.com/leonkasovan/RG353P/main/recalbox/update_bios.sh -O - | /bin/bash
wget https://raw.githubusercontent.com/leonkasovan/RG353P/main/recalbox/install_package_ikemen.sh -O - | /bin/bash
wget https://raw.githubusercontent.com/leonkasovan/RG353P/main/recalbox/install_package_ikemen_batch.sh -O - | /bin/bash
wget https://raw.githubusercontent.com/leonkasovan/RG353P/main/recalbox/install_package_luaxx.sh -O - | /bin/bash
wget https://raw.githubusercontent.com/leonkasovan/RG353P/main/recalbox/install_package_love.sh -O - | /bin/bash
wget https://raw.githubusercontent.com/leonkasovan/RG353P/main/recalbox/install_package_addon.sh -O - | /bin/bash
cd /opt
wget https://github.com/rg35xx-cfw/Koriki/releases/download/koriki_batocera_rg35xx_sdk_20240208/arm-buildroot-linux-gnueabihf_sdk-buildroot.tar.gz
wget https://github.com/leonkasovan/RG353P/releases/download/recalbox-9.1/rg353p-recalbox-toolchain.tar.gz
sudo tar -xvzf rg353p-recalbox-toolchain.tar.gz
sudo tar -xvzf arm-buildroot-linux-gnueabihf_sdk-buildroot.tar.gz
Edit nano .profile
and add these lines:
# set PATH for aarch64 cross compiler
PATH="/opt/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin:/opt/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/bin:/opt/host/bin:/opt/host/aarch64-buildroot-linux-gnu/sysroot/usr/bin:$PATH"
# custom library needed by compiler
export LD_LIBRARY_PATH="/opt/host/lib:/opt/arm-buildroot-linux-gnueabihf_sdk-buildroot/lib"
# for running GUI in WSL2
export DISPLAY=:0
export XDG_RUNTIME_DIR=/home/pi
export RUNLEVEL=3
export LIBGL_ALWAYS_INDIRECT=1
- Create file test_sdl2.c
#include <SDL2/SDL.h>
#include <stdio.h>
// Function to handle events
void handleEvents(SDL_Event *event, int *quit) {
while (SDL_PollEvent(event) != 0) {
if (event->type == SDL_QUIT) {
*quit = 1;
} else if (event->type == SDL_KEYDOWN) {
if (event->key.keysym.sym == SDLK_ESCAPE) {
*quit = 1;
}
}
}
}
// Function to print available video drivers
void printAvailableVideoDrivers() {
int numDrivers = SDL_GetNumVideoDrivers();
printf("Available Video Drivers:\n");
for (int i = 0; i < numDrivers; ++i) {
const char *driverName = SDL_GetVideoDriver(i);
printf("%d. %s\n", i + 1, driverName);
}
}
int main(int argc, char* argv[]) {
// Print available video drivers
printAvailableVideoDrivers();
// Set the desired video driver (x11 in this case)
// if (setenv("SDL_VIDEODRIVER", "KMSDRM", 1) != 0) {
// printf("Failed to set SDL_VIDEODRIVER environment variable!\n");
// return 1;
// }
// Initialize SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
return 1;
}
// Get and print the current video driver
const char *currentDriver = SDL_GetCurrentVideoDriver();
printf("Current Video Driver: %s\n", currentDriver);
// Create a window
SDL_Window* window = SDL_CreateWindow("Green Rectangle", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
if (window == NULL) {
printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
return 1;
}
// Create a renderer
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == NULL) {
printf("Renderer could not be created! SDL_Error: %s\n", SDL_GetError());
return 1;
}
// Set the draw color to green
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
// Create a green rectangle
SDL_Rect rect = {100, 100, 200, 200};
// Main loop
int quit = 0;
SDL_Event event;
while (!quit) {
// Handle events
handleEvents(&event, &quit);
// Clear the screen
SDL_RenderClear(renderer);
// Draw the green rectangle
SDL_RenderFillRect(renderer, &rect);
// Update the screen
SDL_RenderPresent(renderer);
// Add a small delay to avoid high CPU usage
SDL_Delay(10);
}
// Clean up
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
- Compile:
aarch64-buildroot-linux-gnu-gcc -o test_sdl2 test_sdl2.c -lSDL2
CC = x86_64-linux-gnu-gcc-12
EXE = test_sdl2
# CC = aarch64-buildroot-linux-gnu-gcc
# EXE = test_sdl2_arm64
# CC = arm-buildroot-linux-gnueabihf-gcc
# EXE = test_sdl2_arm
SYSROOT = $(shell $(CC) -print-sysroot)
SDLCONFIG = $(SYSROOT)/usr/bin/sdl2-config
PKGCONFIG = $(SYSROOT)/usr/bin/pkg-config
CFLAGS = -Wall -Wformat `$(SDLCONFIG) --cflags`
LIBS = -s `$(SDLCONFIG) --libs`
all:
$(CC) -o $(EXE) test_sdl2.c $(CFLAGS) $(LIBS)
nano /recalbox/share/system/.emulationstation/systemlist.xml
<?xml version="1.0" ?>
<systemList>
<system uuid="novancd6-ebaa-4925-864a-46c84b0dc001" name="ikemen" fullname="Ikemen Go">
<descriptor command="/usr/bin/Ikemen_GO_Linux_RG353P -game %ROM%" path="%ROOT%/ikemen" theme="dos" extensions=".game" icon="$F2d7" downloader="0"/>
<scraper screenscraper="223"/>
<properties type="engine" pad="mandatory" keyboard="optional" mouse="no" lightgun="no" releasedate="2011-12" manufacturer="Ikemen" retroachievements="0" crt.multiresolution="0" crt.multiregion="0" ignoredfiles=""/>
<emulatorList>
<emulator name="ikemen">
<core name="ikemen" priority="1" extensions=".game" netplay="0" softpatching="0" compatibility="high" speed="high" crt.available="1"/>
</emulator>
</emulatorList>
</system>
<system uuid="novancd6-ebaa-4925-864a-46c84b0dc003" name="love" fullname="Love 2D Engine">
<descriptor command="/usr/bin/love %ROM%" path="%ROOT%/love" theme="dos" extensions=".zip .love" icon="$F2d7" downloader="0"/>
<scraper screenscraper="223"/>
<properties type="engine" pad="mandatory" keyboard="optional" mouse="no" lightgun="no" releasedate="2011-12" manufacturer="Ikemen" retroachievements="0" crt.multiresolution="0" crt.multiregion="0" ignoredfiles=""/>
<emulatorList>
<emulator name="love">
<core name="love" priority="1" extensions=".zip .love" netplay="0" softpatching="0" compatibility="high" speed="high" crt.available="1"/>
</emulator>
</emulatorList>
</system>
<system uuid="novancd6-ebaa-4925-864a-46c84b0dc002" name="addon" fullname="Add-On">
<descriptor command="/bin/bash %ROM%" path="%ROOT%/addon" theme="dos" extensions=".sh" icon="$F2d7" downloader="0"/>
<scraper screenscraper="223"/>
<properties type="engine" pad="mandatory" keyboard="optional" mouse="no" lightgun="no" releasedate="2011-12" manufacturer="Linux" retroachievements="0" crt.multiresolution="0" crt.multiregion="0" ignoredfiles=""/>
<emulatorList>
<emulator name="bash">
<core name="bash" priority="1" extensions=".sh" netplay="0" softpatching="0" compatibility="high" speed="high" crt.available="1"/>
</emulator>
</emulatorList>
</system>
</systemList>
In Recalbox OS, using Custom Front-End: Emulation Station. It only launchs SDL2 application. SDL1.2 application can not be launched in this front-end. So to be enable run SDL1.2 application, it needs specific for library sdl1.2 https://github.com/libsdl-org/sdl12-compat. Binary for aarch64 is not provided in official SDL repository. So we need to build it manually and replace sdl1.2 binary in RG353P.
Build docker image (once): docker build -t "recalbox-dev" .
Edit launcher without building docker image again and again:
nano /home/ark/recalbox-rpi4_64/scripts/linux/recaldocker.sh
Remove this line: docker build -t "recalbox-dev" .
export ARCH="rpi4_64"
export ARCH="rg353x"
export RECALBOX_VERSION="9.1-Pulstar"
export PACKAGE="recalbox-emulationstation2"
git clone https://gitlab.com/recalbox/recalbox.git recalbox-${ARCH}
cd recalbox-${ARCH}
./scripts/linux/recaldocker.sh bash
make recalbox-rg353x_defconfig
make menuconfig
choose:
System configuration: Enable root login with password (linux) **(fail)**
Change local time: Asia/Jakarta **(fail)**
Target packages > Shell and utilitie > file
Target packages > System tools > psmisc
Target packages > Development tools > binutils (binaries) **(fail)**
Target packages > Text editors and viewers > mc
Target packages > Interpreter languages and scripting > Lua libraries/modules : luafilesystem, lua-cjson
make BR2_DL_DIR="/share/dl"
exit
OR ./scripts/linux/recaldocker.sh
cp output/images/recalbox/recalbox-rg353x.img.xz /mnt/e/Anbernic/RG353P/recalbox-rg353x-dev.img.xz
cp output/images/recalbox/recalbox-rpi4_64.img.xz /mnt/e/Raspberry/recalbox/recalbox-rpi4_64.novan.img.xz
nano projects/frontend/es-app/src/MainRunner.cpp
rm -r output/build/recalbox-emulationstation2-custom
./scripts/linux/recaldocker.sh bash
make BR2_DL_DIR="/share/dl"
exit
OR ./scripts/linux/recaldocker.sh
cp output/images/recalbox/recalbox-rg353x.img.xz /mnt/e/Anbernic/RG353P/recalbox-rg353x-dev.img.xz
cp output/images/recalbox/recalbox-rpi4_64.img.xz /mnt/e/Raspberry/recalbox-rpi4_64.novan.img.xz
cd /home/ark/recalbox-rpi4_64/output/build/recalbox-emulationstation2-custom/
rm -f CMakeCache.txt
PATH="/home/ark/recalbox-rpi4_64/output/host/bin:/home/ark/recalbox-rpi4_64/output/host/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" /home/ark/recalbox-rpi4_64/output/host/bin/cmake /home/ark/recalbox-rpi4_64/output/build/recalbox-emulationstation2-custom/ -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE="/home/ark/recalbox-rpi4_64/output/host/share/buildroot/toolchainfile.cmake" -DCMAKE_INSTALL_PREFIX="/usr" -DCMAKE_INSTALL_RUNSTATEDIR="/run" -DCMAKE_COLOR_MAKEFILE=OFF -DBUILD_DOC=OFF -DBUILD_DOCS=OFF -DBUILD_EXAMPLE=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TEST=OFF -DBUILD_TESTS=OFF -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_C_ARCHIVE_CREATE="<CMAKE_AR> qcs <TARGET> <LINK_FLAGS> <OBJECTS>" -DCMAKE_C_ARCHIVE_FINISH=true -DCMAKE_CXX_ARCHIVE_CREATE="<CMAKE_AR> qcs <TARGET> <LINK_FLAGS> <OBJECTS>" -DCMAKE_CXX_ARCHIVE_FINISH=true -DCMAKE_AR="/home/ark/recalbox-rpi4_64/output/host/bin/aarch64-buildroot-linux-gnu-gcc-ar" -DCMAKE_C_COMPILER="/home/ark/recalbox-rpi4_64/output/host/bin/aarch64-buildroot-linux-gnu-gcc" -DCMAKE_CXX_COMPILER="/home/ark/recalbox-rpi4_64/output/host/bin/aarch64-buildroot-linux-gnu-g++" -DCMAKE_LINKER="/home/ark/recalbox-rpi4_64/output/host/bin/aarch64-buildroot-linux-gnu-ld" -DCMAKE_C_FLAGS=" -mabi="lp64" -mabi="lp64" -mcpu="cortex-a72" -mcpu="cortex-a72" -mabi="lp64" -mabi="lp64" -mcpu="cortex-a72" -mcpu="cortex-a72" -O3 -O3 -fdata-sections -ffunction-sections -Wl,--gc-sections -fdata-sections -ffunction-sections -Wl,--gc-sections -fdata-sections -ffunction-sections -Wl,--gc-sections -fdata-sections -ffunction-sections -Wl,--gc-sections " -DCMAKE_CXX_FLAGS=" -mabi="lp64" -mabi="lp64" -mcpu="cortex-a72" -mcpu="cortex-a72" -mabi="lp64" -mabi="lp64" -mcpu="cortex-a72" -mcpu="cortex-a72" -O3 -O3 -fdata-sections -ffunction-sections -Wl,--gc-sections -fdata-sections -ffunction-sections -Wl,--gc-sections -fdata-sections -ffunction-sections -Wl,--gc-sections -fdata-sections -ffunction-sections -Wl,--gc-sections " -DCMAKE_LINKER_EXE_FLAGS=" -mabi="lp64" -mabi="lp64" -mcpu="cortex-a72" -mcpu="cortex-a72" -mabi="lp64" -mabi="lp64" -mcpu="cortex-a72" -mcpu="cortex-a72" -O3 -O3 -fdata-sections -ffunction-sections -Wl,--gc-sections -fdata-sections -ffunction-sections -Wl,--gc-sections -fdata-sections -ffunction-sections -Wl,--gc-sections -fdata-sections -ffunction-sections -Wl,--gc-sections " -DOPTION_RECALBOX_PRODUCTION_BUILD=true -DUSE_KMSDRM=ON
make -j8
./scripts/linux/recaldocker.sh bash #enter docker
TZ='Asia/Jakarta'; export TZ
touch projects/frontend/es-app/src/guis/menus/GuiMenuBase.cpp
cd /home/ark/recalbox-rpi4_64/output/build/recalbox-emulationstation2-custom
rsync -vau --chmod=u=rwX,go=rX --exclude .svn --exclude .git --exclude .hg --exclude .bzr --exclude CVS /home/ark/recalbox-rpi4_64/buildroot/../projects/frontend/ /home/ark/recalbox-rpi4_64/output/build/recalbox-emulationstation2-custom
make
output: /home/ark/recalbox-rpi4_64/output/build/recalbox-emulationstation2-custom/emulationstation
./scripts/linux/recaldocker.sh bash #enter docker
in docker shell:
cd /home/ark/recalbox-rg353x/output/build/recalbox-emulationstation2-custom
7z a recalbox-emulationstation.7z recalbox-emulationstation2-custom
in host shell:
cd recalbox-rg353x
cp recalbox-emulationstation.7z /mnt/f/project
# extract recalbox-emulationstation.7z
cd recalbox-rg353x
CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ cmake .
make -j8
es stop
mount -o remount,rw /
mv emulationstation /usr/bin/emulationstation
chmod a+x /usr/bin/emulationstation
es start
for monitoring log
tail -f -s 1 /recalbox/share/system/logs/frontend.log
check
cat /recalbox/share/system/logs/es_event_script.log
ls -l /recalbox/share/roms/fbneo/media/images/
cat /recalbox/share/roms/fbneo/gamelist.xml | grep image
nano /recalbox/share/roms/fbneo/gamelist.xml
Edit file recalbox/copy-recalbox-archives.sh and comment these lines.
nano /home/ark/recalbox-rpi4_64/board/recalbox/copy-recalbox-archives.sh
# generate recalbox.tar.xz (formerly boot.tar.xz)
# echo "Generating tar"
# generate_recalbox_tar_xz "${BINARIES_DIR}/boot-data/" "${RECALBOX_BINARIES_DIR}/recalbox-${RECALBOX_TARGET_LOWER}.tar
# { echo "ERROR : unable to create recalbox.tar.xz" && exit 1 ; }
- Disable automatic OS update
- Turn off music in ES
- Disable splash
- Change Storage Device to 2nd-Slot sdcard
- Setting WIFI
- Speed up boot: disable few process at boot
- Add scrape local (screenshot)
- Fix event for custom script
- Add lua support for scripting in ES Event
- Fix icon no_image
- Enable / Disable splash screen
- Add log viewer
- Simplify menu
Install for a directory:
cd /recalbox/share/roms/love/
nano nano .p2k.cfg
# dpad to arrow keys
0:up = up
0:down = down
0:right = right
0:left = left
# button A to SPACE
0:a = space
# B to Y key (for Y/N prompts)
0:b = y
# And finally, map START button to ENTER
0:start = enter
Source information: es-app/src/padtokeyboard/pad/MappingConfiguration.cpp
PAD:
{ __STRL("up" ), PadItems::Up }, //!< DPad Up direction
{ __STRL("right" ), PadItems::Right }, //!< DPad Right direction
{ __STRL("down" ), PadItems::Down }, //!< DPad Down direction
{ __STRL("left" ), PadItems::Left }, //!< DPad Left direction
{ __STRL("a" ), PadItems::A }, //!< A Button
{ __STRL("b" ), PadItems::B }, //!< B Button
{ __STRL("x" ), PadItems::X }, //!< X Button
{ __STRL("y" ), PadItems::Y }, //!< Y Button
{ __STRL("l1" ), PadItems::L1 }, //!< L1 Button/Trigger
{ __STRL("r1" ), PadItems::R1 }, //!< R1 Button/Trigger
{ __STRL("l2" ), PadItems::L2 }, //!< L2 Button/Trigger
{ __STRL("r2" ), PadItems::R2 }, //!< R2 Button/Trigger
{ __STRL("l3" ), PadItems::L3 }, //!< L3 Button/Trigger
{ __STRL("r3" ), PadItems::R3 }, //!< R3 Button/Trigger
{ __STRL("start" ), PadItems::Start }, //!< Start button
{ __STRL("select" ), PadItems::Select }, //!< Select button
{ __STRL("hotkey" ), PadItems::Hotkey }, //!< Hotkey (or Home) button
{ __STRL("j1up" ), PadItems::J1Up }, //!< Joystick 1 (left) Up position
{ __STRL("j1right" ), PadItems::J1Right }, //!< Joystick 1 (left) Right position
{ __STRL("j1down" ), PadItems::J1Down }, //!< Joystick 1 (left) Down position
{ __STRL("j1left" ), PadItems::J1Left }, //!< Joystick 1 (left) Left position
{ __STRL("j2up" ), PadItems::J2Up }, //!< Joystick 2 (right) Uo positio
{ __STRL("j2right" ), PadItems::J2Right }, //!< Joystick 2 (right) Right position
{ __STRL("j2down" ), PadItems::J2Down }, //!< Joystick 2 (right) Down position
{ __STRL("j2left" ), PadItems::J2Left }, //!< Joystick 2 (right) Left position
{ __STRL("+up" ), PadItems::HotKeyUp }, //!< DPad Up direction
{ __STRL("+right" ), PadItems::HotKeyRight }, //!< DPad Right direction
{ __STRL("+down" ), PadItems::HotKeyDown }, //!< DPad Down direction
{ __STRL("+left" ), PadItems::HotKeyLeft }, //!< DPad Left direction
{ __STRL("+a" ), PadItems::HotKeyA }, //!< A Button
{ __STRL("+b" ), PadItems::HotKeyB }, //!< B Button
{ __STRL("+x" ), PadItems::HotKeyX }, //!< X Button
{ __STRL("+y" ), PadItems::HotKeyY }, //!< Y Button
{ __STRL("+l1" ), PadItems::HotKeyL1 }, //!< L1 Button/Trigger
{ __STRL("+r1" ), PadItems::HotKeyR1 }, //!< R1 Button/Trigger
{ __STRL("+l2" ), PadItems::HotKeyL2 }, //!< L2 Button/Trigger
{ __STRL("+r2" ), PadItems::HotKeyR2 }, //!< R2 Button/Trigger
{ __STRL("+l3" ), PadItems::HotKeyL3 }, //!< L3 Button/Trigger
{ __STRL("+r3" ), PadItems::HotKeyR3 }, //!< R3 Button/Trigger
{ __STRL("+start" ), PadItems::HotKeyStart }, //!< R3 Button/Trigger
{ __STRL("+j1up" ), PadItems::HotKeyJ1Up }, //!< Joystick 1 (left) Up position
{ __STRL("+j1right"), PadItems::HotKeyJ1Right }, //!< Joystick 1 (left) Right position
{ __STRL("+j1down" ), PadItems::HotKeyJ1Down }, //!< Joystick 1 (left) Down position
{ __STRL("+j1left" ), PadItems::HotKeyJ1Left }, //!< Joystick 1 (left) Left position
{ __STRL("+j2up" ), PadItems::HotKeyJ2Up }, //!< Joystick 2 (right) Uo positio
{ __STRL("+j2right"), PadItems::HotKeyJ2Right }, //!< Joystick 2 (right) Right position
{ __STRL("+j2down" ), PadItems::HotKeyJ2Down }, //!< Joystick 2 (right) Down position
{ __STRL("+j2left" ), PadItems::HotKeyJ2Left }, //!< Joystick 2 (right) Left position
KEYBOARD:
esc: KEY_ESC
1: KEY_1
2: KEY_2
3: KEY_3
4: KEY_4
5: KEY_5
6: KEY_6
7: KEY_7
8: KEY_8
9: KEY_9
0: KEY_0
backspace: KEY_BACKSPACE
tab: KEY_TAB
q: KEY_Q
w: KEY_W
e: KEY_E
r: KEY_R
t: KEY_T
y: KEY_Y
u: KEY_U
i: KEY_I
o: KEY_O
p: KEY_P
enter: KEY_ENTER
leftctrl:KEY_LEFTCTRL
a: KEY_A
s: KEY_S
d: KEY_D
f: KEY_F
g: KEY_G
h: KEY_H
j: KEY_J
k: KEY_K
l: KEY_L
leftshift: KEY_LEFTSHIFT
z: KEY_Z
x: KEY_X
c: KEY_C
v: KEY_V
b: KEY_B
n: KEY_N
m: KEY_M
rightshift: KEY_RIGHTSHIFT
kpasterisk: KEY_KPASTERISK
leftalt:KEY_LEFTALT
space: KEY_SPACE
f1: KEY_F1
f2: KEY_F2
f3: KEY_F3
f4: KEY_F4
f5: KEY_F5
f6: KEY_F6
f7: KEY_F7
f8: KEY_F8
f9: KEY_F9
f10: KEY_F10
kp7: KEY_KP7
kp8: KEY_KP8
kp9: KEY_KP9
kpminus:KEY_KPMINUS
kp4: KEY_KP4
kp5: KEY_KP5
kp6: KEY_KP6
kpplus: KEY_KPPLUS
kp1: KEY_KP1
kp2: KEY_KP2
kp3: KEY_KP3
kp0: KEY_KP0
kpdot: KEY_KPDOT
f11: KEY_F11
f12: KEY_F12
kpenter:KEY_KPENTER
rightctrl: KEY_RIGHTCTRL
kpslash:KEY_KPSLASH
rightalt:KEY_RIGHTALT
home:KEY_HOME
up: KEY_UP
pageup: KEY_PAGEUP
left:KEY_LEFT
right: KEY_RIGHT
end: KEY_END
down:KEY_DOWN
pagedown:KEY_PAGEDOWN
break: KEY_BREAK
insert: KEY_INSERT
delete: KEY_DELETE
s01: KEY_GRAVE
s02: KEY_MINUS
s03: KEY_EQUAL
s04: KEY_LEFTBRACE
s05: KEY_RIGHTBRACE
s06: KEY_SEMICOLON
s07: KEY_APOSTROPHE
s08: KEY_BACKSLASH
s09: KEY_COMMA
s10: KEY_DOT
s11: KEY_SLASH
// Mouse button
mouse.button.left: BTN_LEFT
mouse.button.middle: BTN_MIDDLE
mouse.button.right: BTN_RIGHT
// Mouse move
mouse.move.up: (int)MouseMove::Up
mouse.move.down: (int)MouseMove::Down
mouse.move.left: (int)MouseMove::Left
mouse.move.right:(int)MouseMove::Right
# enter docker shell
./scripts/linux/recaldocker.sh bash
# generate global systemlist.xml
python3 package/recalbox-romfs2/scripts/romfs.py -systems package/recalbox-romfs2/systems -buildsystems output/target/recalbox/share_init/system/.emulationstation/systemlist.xml
# install default roms and its folder
python3 package/recalbox-romfs2/scripts/romfs.py -systems package/recalbox-romfs2/systems -installroms output/target/recalbox/
Executing post-image script /home/ark/recalbox-rg353x/board/recalbox/copy-recalbox-archives.sh
Preparing genimage.cfg
Command: prepare_genimage_cfg /home/ark/recalbox-rg353x/board/recalbox/anbernic/rg353x/genimage.cfg
Generating image /home/ark/recalbox-rg353x/output/images/recalbox/recalbox.img
Command: generate_recalbox_img /home/ark/recalbox-rg353x/output/target /home/ark/recalbox-rg353x/output/images /home/ark/recalbox-rg353x/output/images/recalbox /home/ark/recalbox-rg353x/output/build/genimage.tmp