Page 1 of 1

[résolu] Taille d'un programme assembleur/C limité à 64ko ?

Unread postPosted: 13 Sep 2024, 15:02
by bigprogram
Bonjour.

Je m'intéresse à la programmation en C (avec les outils libres) pour la TI 83 CE / TI 84. Mais avant d'éventuellement me tourner vers cette plateforme, je me questionne.

La documentation peut laisser à penser qu'un programme peut au maximum être de 64ko, du moins c'est ce que je suis incliné à penser avec "What is the C/C++ Runtime Memory Layout?".

Image

Et j'ai le même à priori avec une réponse sur StackOverflow : (mais ça a peut-être évolué entre le Z80 et le eZ80)

The Z80 has a 16bit address bus, therefore it can only address at most 64KB of memory. It also has a separate I/O control line, which means that bank switching circuitry can be implemented so that the maximum usable memory is increased beyond this limit.


  1. Est-ce que 64ko est seulement le maximum qui peut être en RAM ou aussi le maximum pour la taille d'un programme ? (Je me pose la question, car j'aimerais faire un jeu vidéo, mais 64ko c'est vite peu si je voulais en faire un avec pas mal de grosses images. Et je vois que le binaire de GravityDuck pour Casio Prizm fait environ 260ko ou que Zelda Tears Of The NES pour Casio Graph 90+E fait 1,4Mo, donc ça me semblerait bizarre qu'une calculatrice TI de même gamme ne permette pas des gros programmes.)
  2. Si la taille maximale pour un programme n'est pas de 64ko ou d'à peu près 64ko, c'est quoi le maximum ? (Mais j'imagine à priori que c'est si plus, la limite vient plus de la mémoire flash de 3Mo que du couple processeur/RAM.)
  3. Si la taille maximale est petite, disons moins d'1Mo, y a t'il un ou des moyens assez simples de contourner la limitation ?

Merci.

Re: Taille d'un programme assembleur/C limité à 64ko ?

Unread postPosted: 13 Sep 2024, 16:57
by critor
Bonjour.


64K est le maximum permis par les spécifications du format programme (taille codée sur 2 octets).

Plusieurs possibilités existent pour contourner la chose :
  • sortir les données du programme pour les mettre dans des variables de type AppVar
  • ou opter à la place pour le format application, mais ça implique nombre de contraintes sur CE (dont l'impossibilité de les signer, et donc le besoin de contourner la méthode d'installation officielle)

Re: Taille d'un programme assembleur/C limité à 64ko ?

Unread postPosted: 13 Sep 2024, 17:31
by bigprogram
Merci pour l'évocation de ces 2 contournements. Par simplicité technique, je m'orienterais à priori vers du C standard, en tout cas au moins dans un premier temps, et donc vers le format application.

  • Le format application autorise (en théorie, hors taille de la mémoire flash) au maximum des applications de quelle taille ? de 512ko (3 octects) ? de 4Mo (4 octects) ? ou autre ?
  • En quoi ça peut poser problème de ne pas pouvoir signer ? Le seul problème n'est-il pas de ne pas pouvoir proposer l'application par un canal officiel TI ? Mais puisque la gestion officielle de l'assembleur (et donc par extension du C) a été officiellement supprimée pour les applications tierces et n'est plus accessible qu'avec un vieux OS et par jailbreak pour les versions récentes de l'OS (via arTIfiCE), n'est-ce pas devenu un non-problème ? Si c'est autre chose, ça rend significativement plus compliqué l'installation pour quelqu'un de lambda ayant déjà réussi à jailbreaker ? et si oui, pourquoi ? (évidemment ne pas hésiter à ne pas ré-expliquer et à juste renvoyer à une documentation déjà existante de la procédure, si toutefois ça existe déjà)
  • Quelles sont les autres contraintes du format application pour TI-83 Premium CE et TI-84 Plus CE ? Y a t'il quelque part une documentation à ce sujet ?
  • Si les contraintes du format application me vont, la documentation web de "CE C/C++ Toolchain" ne semblant couvrir que le cas programme, comment faire pour compiler en mode application et non programme ? Suffit t'il de rajouter une simple option au compilateur ou au linker ou à un finalisateur de l'exécutable (et en ce cas laquelle ?), ou c'est plus compliqué ? Y a t'il un endroit où ce serait déjà expliqué (de préférence pour GNU/Linux) et à jour ?

Note : Pour celleux qui ne le sauraient pas et passeraient par là, OS = Operation System, c'est-à-dire système d'exploitation (dans le monde "standard" : Debian GNU/Linux, Android, etc.).

Re: Taille d'un programme assembleur/C limité à 64ko ?

Unread postPosted: 13 Sep 2024, 18:20
by Adriweb
Passer par une application est pour le moment découragé et réservé a ceux qui veulent bien bidouiller (avec une surcouche de la toolchain) et rencontrer des bugs sans support technique disponible :P
En effet la toolchain ne prend pas ca en compte, et il y a des limitations au niveau de chargement de libs si c'est en tant qu'app (c'etait un sujet de discussion encore hier sur le Discord), ca requiert des hacks divers etc., et il n'existe pas de documentation par rapport a tout ce qui concerne les apps). Par ailleurs, les très grosses apps ne sont pour l'instant pas gérées tout court, meme par app_tools.
On rappelle aussi que les applications se font virer définitivement en mode examen, alors que les programmes reviendront lors de sa désactivation.

Je conseille pour l'instant de simplement builder un programme normal car ce qu'il se passe en fait quand c'est trop gros, c'est que la toolchain (via Convbin) va automatiquement partager le programme trop gros en launcher+appvars. De telle sorte que pour l'utilisateur, ca fonctionne quand meme, il suffit de lancer le programme qui va automatiquement charger les différentes parties.

Mais il arrive quand meme assez rarement que les jeux etc. (il y en a quand meme plusieurs centaines...) prennent plus de 64 KB - par contre, ils peuvent très bien charger dynamiquement leurs données depuis des appvars, comme mentionnait critor.
La toolchain a plusieurs exemples la dessus. Cf. par ici: https://github.com/CE-Programming/toolc ... r/examples

Re: Taille d'un programme assembleur/C limité à 64ko ?

Unread postPosted: 13 Sep 2024, 19:22
by bigprogram
Ok, merci pour la fin des précisions. Pour ne pas risquer sur cette limite, j'avoue que je vais probablement commencer par tenter avec la concurrence (Casio Prizm/90+E, la Math+ ne supportant à priori pas les add-ins si quelqu'un d'autre venait à passer par là, ou NumWorks jailbreakable apparemment avec Upsilon), puis éventuellement après essayer de porter sur TI. Et si effectivement je finis par programmer pour TI et que mon programme est lourd, vos précieuses informations me seront bien utiles (à moins qu'une grosse avancée ait eu lieu d'ici là). Merci encore.