KhiCAS pour Epsilon >= 16, version alpha
Posted: 10 Mar 2024, 14:48
J'ai une première version de KhiCAS pour Numworks verrouillée, testée sur N0120 avec Epsilon 22.2.1 en slot A, qui me semble nettement plus utilisable que la version Nwagyu avec en particulier de la persistance:
https://www-fourier.univ-grenoble-alpes ... khi120.tar (version n0120)
https://www-fourier.univ-grenoble-alpes ... khi110.tar (version n0110/n0115 non testée)
https://www-fourier.univ-grenoble-alpes ... khicas.nwa
C'est encore très alpha comme qualité, et comme je n'ai pas de N0110/N0115 avec Epsilon dessus, je ne garantis pas la compatibilité (et je n'ai pas encore mis de code pour tester que vous avez installé la bonne archive tar et que les adresses pour la ram sont compatibles), et il y a encore pas mal de choses à améliorer. Il y a une description un peu plus technique de comment ça fonctionne plus bas.
Remerciements à Yaya.Cout avec qui j'ai pas mal discuté pour en arriver là, et dont j'ai emprunté un peu de code pour l'accès aux adresses du scriptstore en regardant dans l'userland pour la persistance.
Installation: il est peut-être nécessaire de mettre à jour vers Epsilon 22.2.1 si nécessaire sur le site de Numworks.
Transférer khi120.tar ou khi110.tar dans le slot B de la Numworks, par ex. avec dfu-utils (ça doit être aussi possible avec les outils d'upload de firmware de tiplanet?):
dfu-util -i0 -a0 -s 0x90400000 -D khi120.tar
Transférer khicas.nwa depuis la page des apps externes de Numworks, par exemple avec Chrome
https://my.numworks.com/apps
En cas de reset ou crash, il faudra recharger khicas.nwa, mais pas khislotb.tar qui reste intact dans son slot. Gros avantage, car on flashe seulement 1 secteur de flash de 64K. Plus besoin de manipulation un peu acrobatique pour utiliser nwagra pour "élargir la mémoire".
Documentation : s'utilise comme KhiCAS sur Numworks N0110 non verrouillé, mais avec des bizarreries, par exemple il faut taper shift et EXE en même temps pour ouvrir le menu Fichier, ou shift et 1 en même temps pour le menu algb, etc.
Aspects techniques: l'application se compose de 2 fichiers, khicas.nwa est un lanceur qui se présente comme une application externe standard Numworks et s'installe en slot A derrière le firmware actif en slot A, en principe à l'adresse 0x90190000. khicas.nwa est linké à la volée par la page de Numworks. khi1?0.tar est une archive ayant le même format que celle des apps externes Epsilon<16 mais avec comme adresse de base 0x94000000 au lieu de 0x92000000. Le 1er fichier de l'archive est khicas qui est linké une fois pour toute en adresse fixe : origine de la rom en 0x94000200 pour laisser la place au header de l'archive tar, ram data/bss en 0x24033000 sur les n0120 et 0x20033000. Ce dernier point est le seul point vraiment délicat, en effet les apps externes d'Epsilon<16 et des firmwares tiers utilisent la ram ictm en 0x0 (16K de disponible) pour la data/bss de khicas (13K), mais cette ram ne semble pas utilisable avec Epsilon>=16 alors qu'elle existe toujours, elle est probablement protégée. Donc pour pouvoir utiliser khicas, il faut que la zone démarrant en 0x24033000 et de longueur 13K soit dans la zone réservée aux apps externes. On peut le vérifier dans le header du userland du slotA (avec hexedit par exemple), chez moi à l'adresse 0x9002001c je lis le début de la zone ram des apps externes en 0x240129a8 et juste après la fin en 0x24037000 (on a donc 13K utilisés sur les 16K). Sur les n110, ça devrait être à peu près les mêmes adresses avec 0x20 au lieu de 0x24, mais il semble nécessaire de lire en 0x9001001c au lieu de 0x9002001c.
Ensuite, le lanceur appelle le malloc du firmware en slotA pour réserver 128K de heap et il se branche sur le point d'entrée lu en 0x94000200 (ce point d'entrée est affiché au lancement de KhICAS ainsi que le début du heap à des fins de mise au point).
Code source alpha:
https://www-fourier.univ-grenoble-alpes ... p/khib.tgz, se compile avec make
(ne pas oublier de modifier la position de la sram selon le modèle dans external.ld)
et
https://www-fourier.univ-grenoble-alpes ... launch.tgz
se compile aussi avec make
Simulateur: télécharger le source d'Epsilon puis appliquer les modifs
https://www-fourier.univ-grenoble-alpes ... nwsimu.tgz
et compiler
https://www-fourier.univ-grenoble-alpes ... khi120.tar (version n0120)
https://www-fourier.univ-grenoble-alpes ... khi110.tar (version n0110/n0115 non testée)
https://www-fourier.univ-grenoble-alpes ... khicas.nwa
C'est encore très alpha comme qualité, et comme je n'ai pas de N0110/N0115 avec Epsilon dessus, je ne garantis pas la compatibilité (et je n'ai pas encore mis de code pour tester que vous avez installé la bonne archive tar et que les adresses pour la ram sont compatibles), et il y a encore pas mal de choses à améliorer. Il y a une description un peu plus technique de comment ça fonctionne plus bas.
Remerciements à Yaya.Cout avec qui j'ai pas mal discuté pour en arriver là, et dont j'ai emprunté un peu de code pour l'accès aux adresses du scriptstore en regardant dans l'userland pour la persistance.
Installation: il est peut-être nécessaire de mettre à jour vers Epsilon 22.2.1 si nécessaire sur le site de Numworks.
Transférer khi120.tar ou khi110.tar dans le slot B de la Numworks, par ex. avec dfu-utils (ça doit être aussi possible avec les outils d'upload de firmware de tiplanet?):
dfu-util -i0 -a0 -s 0x90400000 -D khi120.tar
Transférer khicas.nwa depuis la page des apps externes de Numworks, par exemple avec Chrome
https://my.numworks.com/apps
En cas de reset ou crash, il faudra recharger khicas.nwa, mais pas khislotb.tar qui reste intact dans son slot. Gros avantage, car on flashe seulement 1 secteur de flash de 64K. Plus besoin de manipulation un peu acrobatique pour utiliser nwagra pour "élargir la mémoire".
Documentation : s'utilise comme KhiCAS sur Numworks N0110 non verrouillé, mais avec des bizarreries, par exemple il faut taper shift et EXE en même temps pour ouvrir le menu Fichier, ou shift et 1 en même temps pour le menu algb, etc.
Aspects techniques: l'application se compose de 2 fichiers, khicas.nwa est un lanceur qui se présente comme une application externe standard Numworks et s'installe en slot A derrière le firmware actif en slot A, en principe à l'adresse 0x90190000. khicas.nwa est linké à la volée par la page de Numworks. khi1?0.tar est une archive ayant le même format que celle des apps externes Epsilon<16 mais avec comme adresse de base 0x94000000 au lieu de 0x92000000. Le 1er fichier de l'archive est khicas qui est linké une fois pour toute en adresse fixe : origine de la rom en 0x94000200 pour laisser la place au header de l'archive tar, ram data/bss en 0x24033000 sur les n0120 et 0x20033000. Ce dernier point est le seul point vraiment délicat, en effet les apps externes d'Epsilon<16 et des firmwares tiers utilisent la ram ictm en 0x0 (16K de disponible) pour la data/bss de khicas (13K), mais cette ram ne semble pas utilisable avec Epsilon>=16 alors qu'elle existe toujours, elle est probablement protégée. Donc pour pouvoir utiliser khicas, il faut que la zone démarrant en 0x24033000 et de longueur 13K soit dans la zone réservée aux apps externes. On peut le vérifier dans le header du userland du slotA (avec hexedit par exemple), chez moi à l'adresse 0x9002001c je lis le début de la zone ram des apps externes en 0x240129a8 et juste après la fin en 0x24037000 (on a donc 13K utilisés sur les 16K). Sur les n110, ça devrait être à peu près les mêmes adresses avec 0x20 au lieu de 0x24, mais il semble nécessaire de lire en 0x9001001c au lieu de 0x9002001c.
Ensuite, le lanceur appelle le malloc du firmware en slotA pour réserver 128K de heap et il se branche sur le point d'entrée lu en 0x94000200 (ce point d'entrée est affiché au lancement de KhICAS ainsi que le début du heap à des fins de mise au point).
Code source alpha:
https://www-fourier.univ-grenoble-alpes ... p/khib.tgz, se compile avec make
(ne pas oublier de modifier la position de la sram selon le modèle dans external.ld)
et
https://www-fourier.univ-grenoble-alpes ... launch.tgz
se compile aussi avec make
Simulateur: télécharger le source d'Epsilon puis appliquer les modifs
https://www-fourier.univ-grenoble-alpes ... nwsimu.tgz
et compiler