1

C'est pour discuter du format des Pedrom Applications.

Ce sera un format quasi compatible kernel :
signature 68kA.
Flag 'Donot unarchive
Pas de variables globales initialisees.
Utilisation de la section BSS pour les vars globales.
a5 pointera vers la section BSS.
Les appels de librairies se feront grace a jsr totolib__0000(a5), qui pointera donc dans la section bss, ou il y aura un code du genre 'jmp xxxxxx.l'. Ceci assure la possibilite d'utiliser les libraries kernels dans les applications. On pourrait aussi utuliser une table de callbacks mais ca prend + de place.
Aucune variable globale ne peut etre partagee entre les libraries (Utiliser des fonctions).

Probleme technique:
+ Faire dire a gcc de fonctionner en relatif dans la section BSS mais pas avec les autres sections (comme le fait le flag -freg-relative).
+ Faire des appels de fonctions avec gcc selon jsr machin(a5).
+ Classer les libraries et les fonctions, et modifier les codes jsr totolib__0000(a5) avec le bon offset.
+ Modifier obj2ti pour qu'il accepte ce nouveau format.
+ Modifier le linkage pour generer les sauts absolus dans la table des BSS.

Des idees ?

2

je comprends presque rien, mais en tout cas, c bien de definir une norme strict pour pedrom, comme ça, plus de prob de kernel, d'os , etc a choisir, prob de compatibilité etc...
c bien
=Phantom=
Toujours, tout le temps...
Il ne dit rien, mais il est là...
Parlez, il vous écoute.

3

erf moi comprend rien du tout tongue
ALASKA premiere album "watertight"

premiere sortie du label furne-records
dispo ici

4

au niveau de la reconnaissance des apps (nom, version, signature,...)???
avatar
Membre fondateur de la Ligue Anti-MacIntoc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Un expert est quelqu'un qui en sait de plus en plus sur de moins en moins
de choses, jusqu'à ce qu'il connaisse absolument tout à propos de rien.

5

PpHd
a écrit : + Faire dire a gcc de fonctionner en relatif dans la section BSS mais pas avec les autres sections (comme le fait le flag -freg-relative).

Euh... Je ne sais pas si c'est faisable. Lors de l'émission des fonctions, GCC n'a pas les informations nécessaires pour distinguer entre une variable initialisée (ou une fonction) et une variable non initialisée.

Je ne vois pas pourquoi tu ne fais pas tout simplement comme les kernels. Toutes les plateformes qui admettent plusieurs sections par programme font gérer ça au linker ou au système d'exploitation.
+ Faire des appels de fonctions avec gcc selon jsr machin(a5).

Quelle idée que de mettre du code dans la section BSS!
+ Classer les libraries et les fonctions, et modifier les codes jsr totolib__0000(a5) avec le bon offset.

Raaah, c'est une horreur. Fais comme TI: ils relogent les FlashApps lors de la réception. C'est beaucoup plus simple.
+ Modifier obj2ti pour qu'il accepte ce nouveau format.

Pourquoi Obj2Ti??? Ce logiciel est voué à l'obsolescence complète. Il n'y aura peut-être même plus une seule version de TIGCC à l'inclure. C'est avec ld-tigcc qu'il faudra travailler.
+ Modifier le linkage pour generer les sauts absolus dans la table des BSS.

Ce n'est pas faisable.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

Off-Topic, mais:
Kevin Kofler
a écrit: pour distinguer entre une variable initialisée (ou une fonction) et une variable non initialisée.


j'aurais plutôt dit: 'pour distinguer une variable initialisée (ou une fonction) d'une variable non initialisée.' ou alors 'pour faire la distinction entre une variable initialisée (ou une fonction) et une variable non initialisée.'

Impardonnable embarrassed
grin

7

PS :

Jamais et impossible ne sont pas francais, et encore moins PpHd grin

wink
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

8

a5 pointera vers la section BSS.
Je suis pas un as de la prog ASM mais pourquoi ne pas utiliser A6? Il est utilisé par autre chose?
+ Faire dire a gcc de fonctionner en relatif dans la section BSS mais pas avec les autres sections (comme le fait le flag -freg-relative).
+ Faire des appels de fonctions avec gcc selon jsr machin(a5).
+ Classer les libraries et les fonctions, et modifier les codes jsr totolib__0000(a5) avec le bon offset.
+ Modifier obj2ti pour qu'il accepte ce nouveau format. + Modifier le linkage pour generer les sauts absolus dans la table des BSS.
Ca serait bien aussi de voir avec Pollux pour qu'il puisse adapter GTC

avatar

9

Surtout pas, ça va lui donner une excuse pour retarder la sortis de 2 moiscouic
avatar
Membre fondateur de la Ligue Anti-MacIntoc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Un expert est quelqu'un qui en sait de plus en plus sur de moins en moins
de choses, jusqu'à ce qu'il connaisse absolument tout à propos de rien.

10

Bah pour la prochaine version bien sur
avatar

11

Erf... y a pas de prochaines versiongrin
avatar
Membre fondateur de la Ligue Anti-MacIntoc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Un expert est quelqu'un qui en sait de plus en plus sur de moins en moins
de choses, jusqu'à ce qu'il connaisse absolument tout à propos de rien.

12

mais si en 2056
avatar

13

2056 pour la version 2 ?

Ha j'aurais dit 2096 !
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

14

2096, j'aurais 112 ans, donc autant dire qu'il y auras pas de nouvelle versionsad
avatar
Membre fondateur de la Ligue Anti-MacIntoc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Un expert est quelqu'un qui en sait de plus en plus sur de moins en moins
de choses, jusqu'à ce qu'il connaisse absolument tout à propos de rien.

15

Mai si !

Pollux a le secre de la longévité grin

Quand tu utiliserat GToolz et GTC tu viellira plus grin
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

16

c normalegrin
je risque pas de paraitre plus vieux que je ne le serait déjasgrin
avatar
Membre fondateur de la Ligue Anti-MacIntoc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Un expert est quelqu'un qui en sait de plus en plus sur de moins en moins
de choses, jusqu'à ce qu'il connaisse absolument tout à propos de rien.

17

Bref y'a que Kevin pour me repondre.

>Euh... Je ne sais pas si c'est faisable. Lors de l'émission des fonctions, GCC n'a pas les informations nécessaires pour distinguer entre une variable initialisée (ou une fonction) et une variable non initialisée.
On pourra toujours y acceder indirectement par une variriable globale... mais ca obblige a concevoir de facon correcte.

struct __globals__ {
// les donnes globales.
};
register __globals__ g asm("a5");

Puis y acceder par un g->x, etc.

>Je ne vois pas pourquoi tu ne fais pas tout simplement comme les kernels. Toutes les plateformes qui admettent plusieurs sections par programme font gérer ça au linker ou au système d'exploitation.
Le probleme est que je ne peux pas imposer d'adresse fixe pour la section BSS : je reloges le programme puis le copie en Flash. A ce moment l'adresse de la section BSS est inconnu.

>Quelle idée que de mettre du code dans la section BSS!
>Raaah, c'est une horreur. Fais comme TI: ils relogent les FlashApps lors de la réception. C'est beaucoup plus simple.
Une autre solution est utiliser une table de pointeur. En utilisant le preprocesseur ca devrait etre possible :
asm(".set LibCounter,LibCounter+1");
Etc.

>Pourquoi Obj2Ti??? Ce logiciel est voué à l'obsolescence complète. Il n'y aura peut-être même plus une seule version de TIGCC à l'inclure. C'est avec ld-tigcc qu'il faudra travailler.
Mais ld-tigcc ne permet pas de modifier la signature du fichier.

>Je suis pas un as de la prog ASM mais pourquoi ne pas utiliser A6? Il est utilisé par autre chose?
Parce que les programmes C utilisent a6 comme frame pointer.

18

PpHd a écrit :
>Pourquoi Obj2Ti??? Ce logiciel est voué à l'obsolescence complète. Il n'y aura peut-être même plus une seule version de TIGCC à l'inclure. C'est avec ld-tigcc qu'il faudra travailler. Mais ld-tigcc ne permet pas de modifier la signature du fichier.

Si. Tu n'as pas l'air de savoir ce qu'est ld-tigcc. smile C'est le nouveau linker qui sera dans TIGCC 0.95.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

19

Sinon le reste tu en penses quoi ?

20

En tout cas, je suis du meme avis que la majorité de ceux qui sont ici, il faut définir un format d'app spécial pour PedRom, quitte a se que sa soit totalement incompatible avec le TIOS (enfin quoique j'suis sur que PreOS, pourrait ajouter le support de se format), apres dire commetn le faire :/ je pense pas etre totalement du niveau :/ je connait pas encore assé bien le hard des tis
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

21

PpHd
a écrit : Sinon le reste tu en penses quoi ?

Je l'ai déjà dit: tu compliques beaucoup le travail du compilateur et du linkeur, et je ne sais même pas si c'est faisable.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

22

Info:

1. 1 app PedroM == 1 secteur == 64 Ko (Meme si elle ne prend que 2 Ko).
2. Fonction event comme prevu.
3. Les libs sont importes via des pointeurs d'adresse.

23

oula
c encourager a faire des enormes app sa wink

Qu'entent tu par fonctionnement par Event, cad comme le fait le TI-OS ??
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

24

Pas tout à fait. Il n'utilise pas le même système de structure EVENT. (C'est une incompatibilité gratuite.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

25

Disons que cette incompatibilite est la parce que les messages sont strictements differents (On parle pas de la meme chose).

26

Strictement différents?

>Ou event peut prendre:
>+ Idle: Le systeme glande...
CM_IDLE

>+ Init: System Init
CM_INIT

>+ KeyPress
CM_KEYPRESS

>+ Redraw
CM_WPAINT

>+ Install
CM_STARTTASK

>+ Uninstall.
CM_ENDTASK

Il y en a d'autres qui ne correspondent à rien dans AMS, mais ce n'est pas pour autant un système totalement différent.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

27

Si tu veux...

28

Dasn ses cas la les evenement d'AMS devrait porter les nom des evenement qu'on retrouve ss X11...
Le nom des evenement c une chose, se qu'il proposent et envoi en est une autre
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

29

Les applications PedroM seront des fichiers kernels (extension '68kP') dont avec un header kernel avec quelques contraintes. En plus d'avoir le flag ReadOnly mis, la fonction '_exit' est detourne :

_exit:
jmp event
dc.l 'Pedr' ; Signature
dc.w 'oM',$8000
; Library Import Table
dc.b "genlib",0,1 ; name,0,Version
dc.b 0,1,2,3,4,5,6,$FF ; List of imported functions. Finish with $FF
dc.b "filelib",0,1
dc.b 2,$FF
dc.b 0 ; Finish Import Lib Table


Good:
+ Possibilite d'utiliser les romcalls / ramcalls / bss / libraries comme en kernel.
+ Possibilite d'importer des libraries en RAM ou en APPS ! C'est transparent.
+ La section BSS pour les vars globales est autorisé.
+ Le bloc BSS possedera un numero d'handle FIXE. Lorsque l'application ne s'en sert pas, cet handle est de taille 2 octets. Sinon, il est de la taille de la section BSS.

Bad:
+ Limite a 64K comme les programmes kernels !
+ Consomme un secteur entier quelque soit la taille utilisé.
+ Les vars globales avec le code sont interdites (forcement...), donc la librarie statique Tigcc ne marchera pas pour produire des applications (y'a des vars globales partout !).
+ Pas de self modifying code (donc genlib ne marchera pas en APPS...)

FUNCTION EVENT :

long event(short id asm("d0"), long data asm("d1"));
Switch (id) :
+ Idle: Le systeme glande...
+ Boot: Le systeme boote.
+ Clean: Commande 'clean' appellée.
+ CrashExit: L'application a declenche une operation illegale..
+ StartProgram: Un programme va etre lance (data = HANDLE)
+ EndProgram: Fin d'un programme
+ Shell KeyPress
+ Shell ClrScr
+ Get Unkown RomCall Ptr.
+ Get Unkown RamCall Ptr.
+ Get Unkown Library Ptr.
+ Install
+ Uninstall.
TO IMPROVE.

MAIN Function :
int _main(int argc, char *argc[])


Les programmes kernels peuvent bien sur importer les fonctions exportees des applications !
Tout comme le contraire smile

PedroM Library (Built-in) :
_globals_struct *ropen(void);
Ouverture des ressources de l'application.
ie. reallocation de l'handle de la section BSS et importation des libraries.
Doit etre appelle a l'interieur de l'application.
Si les ressources sont deja ouvertes, ne fait juste que redeference le pointeur vers ces ressources.

void rclose(void);
Fermeture des ressources de l'application.


Internal Functions :

AppInit
Recherche des applications installées et reservation des handles.
Appelle apres FlashCheck.

AppInstall(HANDLE h, char *name)
Installe l'application h qui est en RAM.
Appelle automatiquement par la procedure de link si elle reconnait une application.
1. Check taille fichier (< 65536-20).
2. Check signature (_exit.w, et _exit +6.ll).
3. Recherche d'un secteur libre ($FFFF).
4. TailleBss = ReadBssSize(h). WriteBssSize(h) = 2
5. Rellocation du handle h avec comme destination le secteur trouvé. (Modifie legerement PreOS).
6. Remet la vrai taille du segment BSS et fixe le counter de reloc a 3.
7. Write Extra Header (Statut = 0FFFE). Folder : apps.
8. Write handle h.

AppUninstall(void *addr)
Desinstalle l'application.
1. Get sector base.
2. Check Extra Header
3. Verifie que le reloc count de l'application est a 3.
Oui: 3' : Met ce reloc count a 0.
3'': Appel function event(Uninstall).
4. Free BSS Handle.
5. FlashErase(Sector)

AppRun(void *addr)
Execute l'application (appelle la fonction _main).
1. Get sector base.
2. Check Apps
3. Saut a main.

AppOpenRessource(void)
Ouvre le fichier de ressources si necessaire.
Si le fichier est realloue, il est remplis a 0 !
1. Pop PC, get sector base.
2. Get BSS Handle, Check size
3. Size == 2
4. Realloc a sa taille normale.
5. Locke it.
6. Clean it.
7. Realloc des libraries (find_librarie, reloc).
8. Copie les adresses des fonctions dans la section BSS.
9. Retourne Ptr or NULL.

AppCloseRessource(void)
Ferme le fichier de ressource.
1. Pop PC, get sector base.
2. Get BSS Handle, Check size
3. Size != 2
4. UnRealloc des libraries (unreloc).
5. UnLocke it.
6. Realloc a 2.
8. Retourne Ptr or NULL.


Example:

#define RESSOURCE "res.h"
#include <pedrom.h>

long event(short id asm("d0"), long data asm("d1"))
{
return 0;
}

int main(int argc, char *argv[])
{
g = ropen();
printf( "Hello world from Application !\n"
"Counter: %d", g->counter);
g->counter++;
//rclose(); // We don't close the ressource file to keep the globals.
}

IDEE :
Au lieu du point d'entree _exit, utilise _main et ceci :
rts
dc.l 'Pedr'
dc.w 'oM'
etc

Suivi d'un format type 'Commentaire _nostub' ?
Dans ce cas, on reserverait comme truc :
* Point d'entree. (main)
* Evenement (event)
* Flags (Tableau de bit des evenements supportes)
* Dialogue
* Nom dans la Console
* Table d'import de libraries

IDEE:
* Au lieu d'utiliser event, utiliser directement le systeme d'exportation d'offset
et reserver des types. Donc au lieu d'avoir une seule fonction, on aura autant de fonctions
que d'evenements ?

30

impressionant smile
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall