VICE, C64: Error loading keymap 'sdl_pos.vkm'

Hi there.

I’m running Libretro under Batocera v39 on a RPi 3b+, and think the above error is related to a bad directory on my part, but I cannot confirm where I should put my custom postitional keyboard mapping file.

libretro version is version 1.16.0 (Mar 1 2024) build Vice x64 is version 3.7

Libretro says I should place under: ‘system/vice/C64’ which is relative (underneath) Batocera’s location for retroarch being /userdata/system/configs/retroarch

I run this to ask retroarch to launch the vice_x64 core:

/usr/bin/retroarch -L /usr/lib/libretro/vice_x64_libretro.so --config 
/userdata/system/configs/retroarch/retroarchcustom.cfg --set-shader /usr/share/batocera/shaders/interpolation/sharp-bilinear-simple.glslp --verbose /userdata/roms/c64/Ultima4.m3u --log-file=/tmp/vice2.log

I get this error in the log

[INFO] === Build =======================================
[INFO] Capabilities: ASIMD 
[INFO] Version: 1.16.0
[INFO] Built: Mar  1 2024
[INFO] =================================================
[INFO] [Input]: Found input driver: "udev".
[INFO] [Core]: Loading dynamic libretro core from: "/usr/lib/libretro/vice_x64_libretro.so"
[INFO] [Environ]: SET_CONTROLLER_INFO.
[INFO] [Environ]: SET_SUPPORT_NO_GAME: yes.
[INFO] [Environ]: GET_LED_INTERFACE.
[INFO] [Environ]: GET_VFS_INTERFACE. Core requested version >= V2, providing V3.
[INFO] [Environ]: GET_CORE_OPTIONS_VERSION.
[INFO] [Environ]: RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2.
[INFO] [Remaps]: Core-specific remap found at "/userdata/system/configs/retroarch/config/remaps/VICE x64/VICE x64.rmp".
[INFO] [Overrides]: Redirecting save file to "/userdata/saves/c64/Ultima4.srm".
[INFO] [Overrides]: Redirecting save state to "/userdata/saves/c64/Ultima4.state".
[INFO] [Environ]: GET_LOG_INTERFACE.
[INFO] [Environ]: GET_PERF_INTERFACE.
[INFO] [Environ]: SYSTEM_DIRECTORY: "/userdata/bios".
[INFO] [Environ]: CORE_ASSETS_DIRECTORY: "/userdata/system/configs/retroarch/downloads".
[INFO] [Environ]: GET_SAVE_DIRECTORY.
[INFO] [Environ]: GET_CORE_OPTIONS_VERSION.
[INFO] [Environ]: RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2.
[INFO] [Core]: Saved core options file to "/userdata/system/configs/retroarch/cores/retroarch-core-options.cfg".
[INFO] [Environ]: GET_DISK_CONTROL_INTERFACE_VERSION.
[INFO] [Environ]: SET_DISK_CONTROL_EXT_INTERFACE.
[INFO] [Environ]: SET_SERIALIZATION_QUIRKS.
[INFO] [Environ]: SET_INPUT_DESCRIPTORS:
[INFO] [Environ]: SET_KEYBOARD_CALLBACK.
[INFO] [Environ]: SET_SUPPORT_ACHIEVEMENTS: yes.
[INFO] [Content]: Content loading skipped. Implementation will load it on its own.
[INFO] [Environ]: SET_PIXEL_FORMAT: RGB565.
[libretro INFO] M3U/VFL parsed, 4 file(s) found
[libretro INFO] Arg0: x64
[libretro INFO] Arg1: /userdata/roms/c64/ULTIMA4A.D64
[libretro INFO] Reading configuration file '/userdata/bios/vice/'.
[libretro INFO] --------------------------------------------------------------------------------
[libretro INFO] VICE x64 (C64) 3.7, Mar  1 2024 07:58:41
[libretro INFO] --------------------------------------------------------------------------------
[libretro INFO] DriveROM: 'dos2000-cs-33cc6f.bin' ROM image not found. Hardware-level 2000 emulation is not available.
[libretro INFO] DriveROM: 'dos4000-fd-350022.bin' ROM image not found. Hardware-level 4000 emulation is not available.
[libretro INFO] DriveROM: 'bootromCMDHD-v2-80.bin' ROM image not found. Hardware-level CMDHD emulation is not available.
[libretro INFO] Drive: Finished loading ROM images.
[libretro INFO] Sound: Available sound devices: retro
[libretro INFO] Error loading keymap 'sdl_pos.vkm'->'<empty/null>'.
[libretro ERROR] Cannot load keymap 'sdl_pos.vkm'.

my retroarch-core-options.cfg contains:

vice_keyboard_keymap = "positional-user"

Which is correctly telling libretro to try and load a custom user keymap.

If I change keymap to “positional” - then the keys work, but I can delete / remove all “default” sdl_pos.vkm files and libretro is fine (the code must be creating a default mapping on the fly?)

Any advice is appreciated please on where I should be trying to locate the sdl_pos.vkm

PS: I just copied over the default one that came in the installation to the custom location above being:

/userdata/system/configs/retroarch/system/vice/C64/sdl_pos.vkm

Before any edits, to make sure the file was good / not corrupted.

This is what “system” is.

[INFO] [Environ]: SYSTEM_DIRECTORY: "/userdata/bios".

Ok - I solved my own problem.

The retroarch system directory is set as per the setting in retroarchcustom.cfg, ie:

system_directory = "/userdata/bios"

Therefore, you need to place the custom sdl_pos.vkm mapping file in

/userdata/bios/vice/c64