Pour faire court, c'est un bootloader pour NumWorks N0110 qui permet de démarrer des exécutables. Lors d'un reset, un menu présente les fichiers dans la Flash externe pour sélectionner un programme à démarrer. Ce n'est pas un shell à proprement parler étant donné que les programmes sont standalone, mais cela offre une indépendance par rapport aux fluctuations du firmware officiel.
Les avantages de cette approche sont l'indépendance vis-à-vis du firmware officiel et de sa licence, les programmes ont un accès complet aux 256 KiB de RAM sans avoir à partager avec quiconque et la présence d'un simili-système de fichiers permet de stocker des choses (par exemple, avoir plusieurs fichiers ROMs pour un émulateur NES quand/si un sortira).
L'inconvénient majeur est qu'il faut faire un reset pour changer de programme. Le bouton est plus facile d'accès que sur la N0100, mais cela implique la perte des données d'epsilon (scripts Python, fonctions/variables...). Cela se prête donc plutôt aux programmes indépendants du firmware officiel, comme des émulateurs ou des firmwares alternatifs. L'isolement des applications va aussi coûter plus de Flash par rapport à une approche de type shell où les programmes peuvent se reposer sur les fonctionnalités du firmware.
Ce qui manque maintenant c'est une HAL pour faire des programmes. J'ai picoré celle de NumWorks pour faire le sample, mais il faudra en écrire une from scratch si on souhaite s'affranchir de la licence d'epsilon. J'ai réussi à trouver une solution qui ne nécessite pas de ré-architecturer epsilon, la maintenance ne devrait pas être trop chronophage.
Techniquement rien n'empêcherait de faire la même chose sur des N0100, mais la quantité limitée de Flash et la taille du firmware officiel fait que ce serait d'une utilité plus que discutable.
C'est encore très brut de décoffrage, mais c'est utilisable.
- Code: Select all
make EPSILON_DEVICE_BENCH=0 EPSILON_USB_DFU_XIP=0 EPSILON_ONBOARDING_APP=1 EPSILON_BOOT_PROMPT=update build/device/n0110/epsilon_two_binaries -j
python scripts/device/prg.py build/device/n0110/epsilon.external.bin epsilon.external.bin ../lenna/lenna.prg
sudo dfu-util -D build/device/n0110/epsilon.internal.bin -s 0x08000000
sudo dfu-util -D epsilon.external.bin -s 0x90000000
Sources: