π
<-
Chat plein-écran
[^]

NumBoots - Bootloader pour NumWorks N0110

NumBoots - Bootloader pour NumWorks N0110

Unread postby jean-baptiste boric » 25 Aug 2019, 13:35

J'ai expérimenté un peu ce week-end afin de résoudre le problème des apps tierce-parties perpétuellement cassées sur les calculatrices NumWorks.

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:
Attachments
epsilon.external.bin
(837.88 KiB) Downloaded 3 times
epsilon.internal.bin
(8.63 KiB) Downloaded 3 times
User avatar
jean-baptiste boricPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 41.2%
 
Posts: 273
Joined: 21 Dec 2015, 22:22
Gender: Not specified
GitHub: boricj

Re: NumBoots - Bootloader pour NumWorks N0110

Unread postby critor » 25 Aug 2019, 13:42

Bien, quelle rapidité ! :bj:

Bon maintenant, histoire que ce soit accessible au plus grand nombre, il faudrait mettre à jour https://ti-planet.github.io/webdfu_numworks/ pour permettre l'écriture de la partie externe du firmware.
Image
User avatar
critorAdmin.
Niveau 18: DC (Deus ex Calculatorum)
Niveau 18: DC (Deus ex Calculatorum)
Level up: 96.8%
 
Posts: 33369
Images: 8672
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti

Re: NumBoots - Bootloader pour NumWorks N0110

Unread postby Adriweb » 25 Aug 2019, 13:45

J'accepte les PR :P
User avatar
AdriwebAdmin.
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 51.5%
 
Posts: 12622
Images: 1081
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Class: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Re: NumBoots - Bootloader pour NumWorks N0110

Unread postby zardam » 25 Aug 2019, 14:22

Très bonne idée, cela ouvre beaucoup de possibilités !
User avatar
zardamPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 19.7%
 
Posts: 196
Images: 13
Joined: 11 Oct 2017, 23:39
Gender: Not specified
Calculator(s):

Re: NumBoots - Bootloader pour NumWorks N0110

Unread postby parisse » 25 Aug 2019, 16:08

En effet!
Une des possibilites est de compiler epsilon avec pour seul app settings, il devient ainsi un OS (et on peut recuperer sur la RAM commune utilisee par les applis). Il me semble qu'on pourrait alors ajouter une application GPL (sans utiliser de code des applications d'epsilon, mais uniquement des appels au code partage entre les applications, code qui joue le role d'OS) et le diffuser sans avoir de conflit de licence. Maintenant que le prototypage de giac est fonctionnel, je vais sans doute attaquer un shell comme sur la Casio qui est un candidat a fournir un firmware diffusable, avec le multiboot pour pouvoir preserver l'utilisation originelle de la calc. Ca sera sans doute assez long, surtout avec la rentree qui se profile...
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 76.3%
 
Posts: 1767
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: NumBoots - Bootloader pour NumWorks N0110

Unread postby critor » 25 Aug 2019, 20:08

Adriweb wrote:J'accepte les PR :P


Quel est le problème ?

Ce n'est pas juste intégrer les paramètres DFU spécifiques à la Flash externe que j'ai déjà vu passer ?
Image
User avatar
critorAdmin.
Niveau 18: DC (Deus ex Calculatorum)
Niveau 18: DC (Deus ex Calculatorum)
Level up: 96.8%
 
Posts: 33369
Images: 8672
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti

Re: NumBoots - Bootloader pour NumWorks N0110

Unread postby jean-baptiste boric » 02 Sep 2019, 18:51

Je continue à travailler sur le sujet. Je m’attelle à créer un SDK digne de ce nom (compilateur+libc+bibliothèques) afin d'avoir quelque chose qui tienne la route.

J'ai décidé d'abandonner pour l'instant l'idée d'exécuter du code in-place dans la Flash. C'est une complication inutile pour le moment et newlib ne semble pas supporter du tout ce mode de fonctionnement. Je me replie sur une exécution en RAM avec un loader d'ELF et un système de fichiers de type TAR pour la flash externe (oui, le format d'archive Unix, c'est pour limiter les modifications du côté d'epsilon au maximum avec quelques tours de passe-passe). Ça me permet également de pouvoir réutiliser ma N0100 qui est déjà mutilée pour le debug hardware dans le cadre du développement avec un écart très faible par rapport à la véritable cible.

Je bute pour le moment sur la libc, newlib nécessitant une liste d'options longue comme le bras pour le convaincre de générer du code pleinement compatible avec la NumWorks...
User avatar
jean-baptiste boricPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 41.2%
 
Posts: 273
Joined: 21 Dec 2015, 22:22
Gender: Not specified
GitHub: boricj

Re: NumBoots - Bootloader pour NumWorks N0110

Unread postby parisse » 02 Sep 2019, 19:52

Mais ca risque de diminuer enormement la taille des executables non? Ou bien le code est copie par segments, mais alors on va buter sur la taille de la RAM de la Numworks. Sur la hp39gii, le code est copie de la flash vers la RAM, avec de gros ralentissements pour du code ou on n'a pas pris de precaution pour assurer la localite. Et la RAM etait de 512K dont la moitie reservee a copier du code de la flash vers la ram...
User avatar
parisseVIP++
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 76.3%
 
Posts: 1767
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: NumBoots - Bootloader pour NumWorks N0110

Unread postby zardam » 02 Sep 2019, 19:59

jean-baptiste boric wrote:Je bute pour le moment sur la libc, newlib nécessitant une liste d'options longue comme le bras pour le convaincre de générer du code pleinement compatible avec la NumWorks...


Étrange, je n'ai pas eu particulièrement de problème avec ça (pour du code basé sur libopencm3), mais je rate peut être quelque chose.
User avatar
zardamPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 19.7%
 
Posts: 196
Images: 13
Joined: 11 Oct 2017, 23:39
Gender: Not specified
Calculator(s):

Re: NumBoots - Bootloader pour NumWorks N0110

Unread postby jean-baptiste boric » 02 Sep 2019, 22:20

parisse wrote:Mais ca risque de diminuer enormement la taille des executables non? Ou bien le code est copie par segments, mais alors on va buter sur la taille de la RAM de la Numworks.


Comme je l'ai dit, je renonce à l'usage de la flash pour le moment afin de réduire le nombre de problèmes à résoudre dans un premier temps : le code assembleur de newlib n'est pas compatible avec du position-independent code et j'ai déjà assez fort à faire pour faire fonctionner cette lib au forceps. C'est également pour des raisons pratiques, je peux utiliser ma N0100 customisé pour le SWD pour prototyper sans devoir massacrer ma N0110 sur l'autel de la science.

Je m'attaquerai à l'exécution de code depuis la Flash quand j'aurai un SDK fonctionnel (ou alors je contournerai le problème avec du WebAssembly).

zardam wrote:Étrange, je n'ai pas eu particulièrement de problème avec ça (pour du code basé sur libopencm3), mais je rate peut être quelque chose.


Je fais une toolchain bare-metal intégrale (binutils+gcc+newlib) depuis les sources, ça me permet d'avoir quelque chose de propre et de réduire drastiquement les options de compilation/linker à mettre explicitement dans les Makefiles, mais c'est inversement proportionnel à la quantité d'incantations magiques pour construire la-dite toolchain afin que ça marche pour de vrai... Ce n'est pas parce que y'a un ELF produit à la fin que la calculatrice est contente pour autant >_<
User avatar
jean-baptiste boricPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 41.2%
 
Posts: 273
Joined: 21 Dec 2015, 22:22
Gender: Not specified
GitHub: boricj

Next

Return to Programmation native (C/C++/...)

Who is online

Users browsing this forum: No registered users and 1 guest

-
Search
-
Featured topics
Concours TI-Planet-Casio de rentrée 2019. 3 défis pour plus d'une 15aine de calculatrices graphiques et nombre de goodies sortant de l'ordinaire ! :D
Comparaisons des meilleurs prix pour acheter sa calculatrice !
12
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety 
-
Stats.
573 utilisateurs:
>517 invités
>50 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)