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/bashcd /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.gzEdit 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.xznano 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.xzcd /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
makeoutput: /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-customin host shell:
cd recalbox-rg353x
cp recalbox-emulationstation.7z /mnt/f/project
# extract recalbox-emulationstation.7zcd recalbox-rg353x
CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ cmake .
make -j8es stop
mount -o remount,rw /
mv emulationstation /usr/bin/emulationstation
chmod a+x /usr/bin/emulationstation
es startfor 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