1

Je suis en train de me remettre à la programmation kernel après quelques mois d'interruption.
J'ai relu la doc de PreOs hier soir, et j'ai quelques problèmes que je n'ai jamais cherchés à résoudre auparavant:

A quoi sert LibsBegin? Apparemment, ça reloge la lib, donc ça doit permettre entre autres d'éxécuter une fonction avec LibsCall ou LibExec non? Je ne sais pas trop.
De la même manière, même si je vois ce que fait LibEnd, je n'arrive pas à voir son utilité.

D'ailleurs quelle est la différence entre LibCall et LibExec? Juste le BYTE correspondant u numéro de version?

Sinon pour la fonction exit. Je vois: d0.w: exit code. Mais je ne vois pas à quoi doit correspondre le exit code. sad

Sinon j'ai vu un truc dans tios.h qui m'a plutôt étonné:
tios::main_lcd equ LCD_MEM tios::globals equ LCD_MEM

Je comprends pas pourquoi tios::globals equ LCD_MEM alors que ça concerne plutôt le clavier...

Voilà, c'était tout pour le moment. happy
avatarMon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.

2

y a deux façons d'utiliser les libs à la volée
soit tu la charges, tu exécutes 3-4 fonctions puis tu la décharges (libbegin, libcall and libend)
soit tu utilises libexec qui charge, exécute la fonction demandée et qui décharge la lib

1ère méthode > pas besoin de recharger la lib à chaque appel donc plus rapide si tu as beaucoup d'appels
2ème méthode > plus courte quand il n'y a qu'un seul appel

pour globals, je crois que c'est parce que les données sont à une adresse toujours près de l'écran
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

3

tu peux regarder mon shell microshl, il utilise ces fonctions smile
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4

merci bien et ok pour ton shell, j'airai voir ça après la débauche grin

Mais pourquoi ne pas faire juste un jsr vers les fonctions de lib, et laisser le kernel s'occuper de reloger et libérer tout ça quand il faut? Je n'arrive pas à saisir l'utilité. :'(
avatarMon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.

5

et comment il fait pour deviner à la volée ? le kernel s'occupe de reloger avant l'exécution de ton programme, après il ne fait plus rien, donc il faut bien lui dire d'une façon ou d'une autre (tout en étant compatible avec l'API déjà existante) qu'il faut charger une lib
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

6

je dois être définitivement bouché cry

Quand j'utilise genlib par exemple, je fais jsr genlib::blabla, sans m'occuper de LibsBegin toussa, et ça marche très bien...
J'ai pas le déclic qui remettrait un peu d'ordre dans mes idées, là j'avoue que j'ai du mal à capter... :/

edit-> euh attends, qu'appelles-tu "charger une lib"? à mon avis c'est ça qui fait que je coince...
avatarMon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.

7

oué, mais là genlib est chargée au lancement de ton programme et sera déchargée à la fin
donc pendant toute l'exécution de ton programme, la ram consommée sera taille(programme)+taille(genlib)
là, ça permet réduire à taille(programme) quand on n'a pas besoin des libs
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

8

exemple, un shell qui s'apprête à lancer un programme
doors, qui est vieux, occupe en permanence taille(doors)+taille(ziplib)+taille(filelib)+taille(graphlib) même quand il lance un programme
s'il utilisait ces fonctions, il pourrait décharger ziplib, filelib et graphlib et n'utiliser que taille(doors) quand il lance un prog
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

9

ah ok! Merci bien de ta patience happy
Donc c'est très utile pour un shell ou autre launcher de programme, maintenant ça doit être à peu près inutile (et lourd pour le kernel) de faire ça avec genlib dans un jeu ou on fait un appel tous les 3 lignes (si j'ai bien tout compris hein ^^)
avatarMon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.

10

Merci bien de ta patience happy
> de rien, tjs content d'aider ^^

oué, exactement
mais c'est clair que ça sera plus lent et ça prendra plus de place ^^
pour charger des niveaux ça peut-être pas mal (genre le code de décompression est dans une lib, ou qqc du même style)
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

11

Martial Demolins :
Donc c'est très utile pour un shell ou autre launcher de programme, maintenant ça doit être à peu près inutile (et lourd pour le kernel) de faire ça avec genlib dans un jeu ou on fait un appel tous les 3 lignes (si j'ai bien tout compris hein ^^)


En effet pour un jeu qui utilise genlib c'est pas la meilleure méthode : perte de place et de vitesse.

Par contre ca peut avoir pas mal d'interêt autre que réduire la place au chargement:
- Implémenter facilement un système de plugins
- Permette a un appli d'utiliser une lib optionelle (comme ziplib pour un shell) seulement si elle est présente sur la calc
- Permettre de charger facilement des donnée externe(même si ca doit pas être la methode la plus optimisé en place)
- Charger seulement le code utile a un moment donné. Ca pourrait être utile pour un programme ultra gourmant en taille de code ( je crois que c'est le cas de Chrono Fantasy)
avatar

12

pencil
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

13

Ah ok, merci pour ces précisions, en effet le champ d'application est étendu.

Connaitriez-vous également la réponse à cette question?
>>Sinon pour la fonction exit. Je vois: d0.w: exit code. Mais je ne vois pas à quoi doit correspondre le exit code.

Ca serait cool. smile
avatarMon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.

14

En général, sous unix, 0 signifie que tout c'est bien passé, un autre nombre sert a donner le numéro d'erreur.
Sur TI je ne sais pas trop s'il peut être récupéré (sous PedroM peut-être)
avatar

15

C'est comme sur Unix. 0 ok, sinon c'est une erreur (avec le code d'erreur).
Surtout sous pedroM

16

Ok, merci bien! smile
Mais l'erreur n'est pas exploitable par le programme lui-même, mais par le programme appelant je suppose (si on est dans un shell ou un launcher quelconque).
avatarMon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.

17

Si ca marche comme sous unix on peut récupérer la valeur de retour du dernier programme par la variable d'environement $?
Maintenant je ne sais pas si ca marche comme ca sous Pedrom, ni s'il y a un autre moyen de le récupérer sous AMS et PedroM
avatar

18

%1: tios::globals est une antiquite a ne pas utiliser.

%10: "Permettre de charger facilement des donnée externe(même si ca doit pas être la methode la plus optimisé en place) "
Sauf que ca gere la decompression a la volee wink

%15: C'est le code de retour de kernel::exec. (Ok c'est mal foutu).

%16: Ca ne marche pas. Mais bon si c'est necessaire, dites-le.

19

Encore des questions sur les fonctions du kernel:
Que renvoie LibsBegin quand la lib n'est pas trouvée sur la calc? Le descripteur est nul? C'est pas garanti par la doc. sad
Que se passe-t-il si on charge une lib déjà chargée?
Désolé pour ce genre de questions, mais là je suis en vaccances chez mes parents ^^
avatarMon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.

20

>Que renvoie LibsBegin quand la lib n'est pas trouvée sur la calc? Le descripteur est nul? C'est pas garanti par la doc. sad
Oui

>Que se passe-t-il si on charge une lib déjà chargée?
Rien de mal. Ca marche bien smile

21

ok, merci PpHd. En fait j'ai programmé comme si le descripteur d'une lib non trouvée, ou d'une version trop vieille était 0, donc tout va bien. smile

sinon pour la lib déjà chargée, il me semblait avoir compris ça en lisant le source de PreOS il y a deux jours de ça (sld.asm si je me trompe pas).
avatarMon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.

22

Hum... En fait, c'est le "Run-time dynamic linking", la même fonction que LoadLibrary()...

Une précision sur la dernière question: Si on charge une lib N fois, combien de fois faut-il la libérer ? une ou N fois? (chez MS, c'est N)
avatarMaintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

23

Si le kernel était parfait (PreOS 2.00? cheeky), il faudrait le faire N fois (entre autre pour les BSS) tongue
avatarMon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.

24

Il l'est. tongue N fois en theorie.
En pratique, le syteme anti-oublie de liberation de librarie de PreOS lui fait liberer les librairies chargees par un programme a sa terminaison.
Encore mieux que parfait wink

Sinon tu parles d'un BSS unique a chaque instance de la librarie ?

25

Je pense, oui.
avatar« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

26

oui
avatarMon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.

27

Je pensais le faire, mais j'ai abandonne devant la complexite de la chose (surtout que c'est pas si facile a faire).
Mais si tu me trouves une implantation rapide et efficace, je prends.

28

Tu sais, je sui pas un spécialiste de la programmation système, mais ça m'intéresse de regarder, pour le plaisir.
Il faut donc que je regardes ce que fait le kernel quand un prog l'appelle, ce que fait le kernel quand il se rend compte qu'il doit charger une librairie, ce qu'il fait quand il se rend compte qu'il y a une BSSà créer, ce qu'il fait quand un programme se termine et qu'il doit libérer une dll utilisant une BSS happy

J'irai voir.
avatarMon journal de bord <flux rss manuel> asTI68k : WIP </flux>

Le modernisme ne diffère guère de la libre pensée absolue que par sa prétention de demeurer catholique.

29

Juste pour rire,tu fais quoi dans le cas ou un programme utilisant une libraire A qui utilise une librarie C, et une librairie B qui utilise aussi la librarie C.
Et si la librarie C a des BSS uniques a chaque instance, tu l'as dans le cul, non ?

30

ce que tu peux faire, c'est peut-être faire cela selon un paramètre de la fonction de chargement...
et/ou interroger la librairie elle-même...
avatarMaintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.