Tue, Feb 23, 2021
Et voici la suite du précédent article pour redonner un coup de jeune à mon Acer Iconia A500.
Retroarch était le 2ème programme de ma liste à destination de la tablette, voyons ce que nous pouvons faire.
Retroarch
Retroarch est un multi-émulateur (si vous me permettez le néologisme) qui permet de télécharger de nombreux “coeurs” permettant d’émuler un grand nombre de consoles ou d’ordinateurs.
Il y a donc 2 composants principaux :
- l’interface
- les coeurs des différents émulateurs
L’interface fut une bonne surprise elle fonctionne directement sur la tablette. Il suffit de télécharger l’apk 32 bits sur le site de retroarch.
Cependant mauvaise surprise : les coeurs plantent lorsqu’on les lance après téléchargement depuis l’interface.
Compiler un coeur retroarch
Les instructions pour recompiler un coeur android indiquent comment démarrer en téléchargeant les sources :
git clone https://github.com/libretro/libretro-super.git
cd libretro-super
./libretro-fetch.sh
Ces commandes effectuent le téléchargement des sources principales puis de celles des différents coeurs d’émulation.
Les sources ont globalement la même structure : un sous-répertoire libretro-<nomDuCoeur>
qui contient lui-même (parfois dans une sous-arborescence) un répertoire jni
.
Le script libretro-build-android-mk.sh
permet de lancer la compilation d’un des coeurs, par exemple, pour recompiler le coeur gameboy gambatte
(Attention a bien avoir défini les chemins des SDK et NDK android, les chemins sont ici ceux de mon environnement) :
export ANDROID_NDK_ROOT=/Users/gerben/Library/Android/sdk/ndk/21.3.6528147
export ANDROID_SDK_ROOT=/Users/gerben/Library/Android/sdk
export PATH=$ANDROID_NDK_ROOT:$PATH
./libretro-build-android-mk.sh gambatte
Mais si vous essayez d’utiliser le coeur compilé par ce script (trouvable dans le chemin libretro-gambatte/libgambatte/libretro/libs/armeabi-v7a/libretro.so
) sur votre tablette, même résultat : un crash immédiat.
Désactiver les instructions NEON
Comme dans l’article précédent, le problème se situe dans les spécificités du coeur Cortex A9 du Tegra 2 et l’utilisation des instructions NEON.
Ces instructions étant activées par défaut pour les builds NDK, il faut ajouter des instructions de configuration pour les désactiver.
Dans le cas du coeur gambatte (mais c’est pareil pour les autres coeurs), il faut modifier le fichier Android.mk
situé dans le sous-répertoire jni
(libretro-gambatte/libgambatte/libretro/jni
) et ajouter parmi les variables LOCAL_ARM_NEON := false
, ce qui donne :
CAL_PATH := $(call my-dir)
ROOT_DIR := $(LOCAL_PATH)/../../..
CORE_DIR := $(ROOT_DIR)/libgambatte/src
LIBRETRO_DIR := $(ROOT_DIR)/libgambatte/libretro
HAVE_NETWORK := 1
include $(ROOT_DIR)/Makefile.common
COREFLAGS := -DINLINE=inline -DHAVE_STDINT_H -DHAVE_INTTYPES_H -D__LIBRETRO__ -DVIDEO_RGB565 -Wno-c++11-narrowing
ifeq ($(HAVE_NETWORK),1)
COREFLAGS += -DHAVE_NETWORK
endif
include $(CLEAR_VARS)
LOCAL_MODULE := retro
LOCAL_SRC_FILES := $(SOURCES_CXX) $(SOURCES_C)
LOCAL_CXXFLAGS := $(COREFLAGS) $(INCFLAGS)
LOCAL_CFLAGS := $(INCFLAGS)
LOCAL_LDFLAGS := -Wl,-version-script=$(LIBRETRO_DIR)/link.T
LOCAL_ARM_NEON := false
include $(BUILD_SHARED_LIBRARY)
(notez l’avant dernière ligne qui contient la modification)
Et si tout s’est bien passé, vous avez désormais un nouveau coeur à installer dans votre retroarch (dans l’interface : Load Core -> Install or Restore a Core
, enjoy !! :)

Fri, Feb 19, 2021
Je n’aime pas me débarasser de mon ancien matériel s’il fonctionne encore. Cependant, après quelques années, les mises à jour se font de plus en plus rare et parfois, même l’offre logicielle devient inaccessible.
J’ai un cas concret à l’esprit : ma tablette Android Acer Iconia A500.

Elle m’a rendu de nombreux services (ainsi qu’aux enfants pour voir des dessins animés en voiture :)), mais n’est désormais plus maintenue et il est devenu difficile de trouver des logiciels qui tournent dessus. L’heure de la reconversion est donc arrivée.
J’avais d’abord pensé à extraire l’écran pour l’utiliser avec un Raspberry Pi, mais au final, elle fonctionne encore, à quoi bon la désosser ?
Cette tablette a plusieurs avantages :
- un grand écran offrant une très bonne lisibilité
- un port USB Host permettant de brancher clavier, souris, clé USB …
- un port micro HDMI permettant une sortie vidéo
- un slot micro SD pour étendre la capacité de stockage
Parmi les choses que j’aimerais faire tourner dessus, j’ai 2 applications dans le viseur :
- ScummVM (abordé dans cet article)
- Retroarch (abordé dans un futur post)
Cependant, plusieurs problèmes se posent du fait de l’obsolescence de la plateforme. En effet :
- La tablette est bloquée à la version Ice Cream Sandwich 4.0.3 du firmware Android
- Les applications utilisant le développement natif (NDK) d’Android ne supportent plus le processeur de la tablette (Tegra 2) sauf si compilé explicitement pour celui-ci.
Pour le premier point j’ai suivi un tuto en ligne pour installer Android 4.4.4 KitKat sur la tablette (Attention, il y a toujours un risque de briquer la tablette durant ce genre d’opération).
Cortex-A9, extensions Neon et VFP
Ce processeur est la 2eme génération du SoC Tegra. Il dispose d’un CPU 32 bits ARM Cortex-A9 double coeur qui ne supporte pas les extensions SIMD NEON. Ce sont justement ces extensions qui posent problème, car tous les processeurs récents supportant celles-ci, les NDKs récents les intègrent dans le binaire compilé.
Il existe heureusement des solutions via la modification de flags de compilation.
ScummVM
J’étais assez frustré en constatant que les dernières versions de ScummVM plantaient au lancement, je me suis donc dit que j’allais le recompiler.
Voici les différentes étapes que j’ai appliquées.
Checkout
S’agissant d’un build android, j’ai effectué un checkout de la branche branch-2-2-1-android des sources :
git clone https://github.com/scummvm/scummvm
cd scummvm
git checkout branch-2-2-1-android
J’ai aussi téléchargé les dépendances précompilées utilisées par le code : http://sourceforge.net/projects/scummvm/files/build/3rd-android-4.tar.bz2/download
Configuration du build
En suivant les instructions du site (https://wiki.scummvm.org/index.php/Compiling_ScummVM/Android), j’ai configuré le build Android avec la commande suivante, pointant notamment vers les dépendances téléchargées :
./configure --host=android-arm-v7a --with-jpeg-prefix=/Users/gerben/src/AndroidLibs/jpeg8d-build --with-png-prefix=/Users/gerben/src/AndroidLibs/3rd-android-4-armeabi-v7a-release --with-tremor-prefix=/Users/gerben/src/AndroidLibs/3rd-android-4-armeabi-v7a-release --with-mad-prefix=/Users/gerben/src/AndroidLibs/3rd-android-4-armeabi-v7a-release
A noter : le host android-arm-v7a qui correspond à un build android ARM 32 bits.
Prise en compte des spécificités du CPU Cortex A9
La subtilité de configuration a lieu maintenant : le fichier de configuration généré permet de produire un build comportant des instructions à virgule flottante incompatibles avec le Cortex A9.
Ces extensions “Vector Floating Point” des CPUs ARM sont décrites ici : https://en.wikipedia.org/wiki/ARM_architecture#Floating-point_(VFP)
En l’occurrence, pour fonctionner avec notre CPU, il faut utiliser les instructions référencées sous le nom VFPv3-D16.
Pour les utiliser, il faut modifier le fichier config.mk généré pour modifier la ligne CXXFLAGS en remplaçant :
-mfpu=vfp
par :
-mfpu=vfpv3-d16
Il ne reste plus qu’à lancer la compilation :
Attendre un peu … installer le fichier .apk obtenu sur la tablette et Enjoy !!!

Ah … Secret of the Monkey Island … tellement de bons souvenirs :).
Wed, Jan 20, 2021
Juste un petit post rapide pour partager mes voeux 2021 à tous ceux qui tomberaient sur cette page.
En espérant que nous pourrons tous sortir de chez nous cette année.
(et une pensée particulière à tous ceux dont j’ai croisé le chemin et avec qui je n’ai pas su garder contact : je ne vous oublie pas dans ces voeux :) )
Tue, Nov 24, 2020

Un petit post rapide pour vous fournir un lien vers le blog d'experts de **Worldline** où j'ai posté un petit article.
Le sujet principal : Trouver un “side project” pour apprendre un nouveau langage / framework / techno…
Les “sous-sujets” :
- Le langage Rust
- Le format de stockage des fichiers du jeu Zork
Si ça peut vous intéresser, ça se passe ici :
Learning motivation: discover Rust with Zork
Wed, Apr 4, 2018
Un nouveau post sur ce blog après une longue absence.
Bon, pas de choses révolutionnaires à annoncer, mais un petit lien vers le blog technique de mon employeur :
blog.worldline.tech
Et qui sait, vous y croiserez peut-être de mes articles :-)