1

Bon j'ai bidouillé un p'tit explorateur de fichiers en Ti-BASIC y a assez longtemps et j'ai remarqué que si PreOS n'est pas installé (après reset par exemple), j'obtiens de méchants crashs en BASIC.

Ma solution actuelle c'est de demander à l'utilisateur de vérifier la présence de PreOS par lui-même. J'aimerais automatiser ça, et installer automatiquement PreOS s'il ne l'est pas.

J'ai trifouillé un peu avec Command Post Plus 2.2 et j'ai trouvé la routine ASM pour vérifier la présence de PreOS mais comme il s'agit d'adresses dynamiques, je peux pas l'utiliser.
[EDIT] En fait je suppose, j'ai des trucs du genre #$bc6a(pc) triso[/EDIT]

Et dans la foulée, même si c'est hors-section, comment je fais un appel ASM en C ? J'ai tenté
ASM_call(//tartarara) Mais d'après GTC, l'argument à la fonction est trop long, il faut 'une seule macro'.

Merci pour vos réponses et vos aides ^^

2

Tu regardes à l'adresse $32.w, tu dois trouver quelquechose (donc $32 et $33 doivent être non nuls). Sous AMS, ça vaut 0, s'il y a un kernel, on y trouve sa signature.

PS -> si ça crashe quand ya pas PreOS, tu dois te trainer un bug bien gore toi cheeky

3

On doit avoir ($32).b = $50 et ($33).b=$4F
Ensuite comment avoir cette information à partir du basic, je ne sais pas trop.

4

Vertel et FLib ne proposent pas des fonctions get/setbyte ?

5

Ligne de commande exec ?
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

Folco (./2) :
PS -> si ça crashe quand ya pas PreOS, tu dois te trainer un bug bien gore toi mod.gif

Ben, soit-disant des équations fausses... J'ai pas trop regardé, flemme, en plus j'ai fait des optimisations y a pas si longtemps, mais comme PreOS est auto-installé à chaque RESET, je réfléchis pas trop.
PpHd (./3) :
On doit avoir ($32).b = $50 et ($33).b=$4F

Ok merci, c'est noté happy
Folco (./4) :
Vertel et FLib ne proposent pas des fonctions get/setbyte ?

TOut à fait exact, mais je ne sais utiliser que celles de Flib et je vois pas trop comment faire, mon utilisation se limite à un équivalent du MakeExek() sur TiCalc de je ne sais plus qui ^^

Bon je voulais dire autre chose mais du coup j'sais plus triso

7

impossible à faire avec flib comme avec vertel
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

Ah, ça ne travaille que sur des variables alors ? Peut-être un buffer overflow, ou une chaine exec qui déconne. ^^

9

Bah non, tu peux renvoyer 0 ou 1 avec une chaîne Exec ^^ (via la variable de retour des boîtes de dialogue, par exemple)
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

10

Pas con. FireHunter, tu veux une chaine ?

11

(ou un fouet ? trifouet)

12

Folco (./10) :
Pas con. FireHunter, tu veux une chaine ?


Je dirais pas non, et si il existe des programmes on-calc pour les générer, ça serait pas de refus triso
Pen^2 (./11) :
(ou un fouet ? trifouet)


#okay##triway#

13

FireHunter (./12) :
Je dirais pas non, et si il existe des programmes on-calc pour les générer, ça serait pas de refus triso.gif

Tu parles de quoi exactement ? MakeExec te convient pas ?

14

Folco (./13) :
FireHunter (./12) :
Je dirais pas non, et si il existe des programmes on-calc pour les générer, ça serait pas de refus triso.gif

Tu parles de quoi exactement ? MakeExec te convient pas ?


MakeExec chez moi il convertit juste un prog en chaîne exec ...
J'eu crut que tu parlais d'une châine Exec pour retourner une valeur selon le fait que PreOS etait ou pas installe ...

15

Je peux te faire ça, oui.

16

pixtest:33,64889 devrait fonctionner pour détecter PreOs avec FLib. smile

J'explique:
1. FLib stocke les coordonnées dans un tableau de unsigned short: x=33, y=64889.
2. Elles sont ensuite passés à GetPix, un ROM_CALL qui prend des coordonnées signées (en particulier, il utilise muls pour calculer l'offset). Donc en réalité x=33, y=-647.
3. x&7==1, donc on teste le 2ème bit (correspondant à 26) de l'octet en 0x4c00+(-647)*30+(33>>3)==0x32.
4. Ce bit vaut 1 pour PreOs (car 'P' == 0b01010000) (et pour PedroM car 'R' == 0b01010010), 0 pour AMS sans kernel.
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é

17

C'est un hack ignoble qui ne fonctionnera plus si PedroM ou une version ultérieure d'AMS implémente la validation des paramètres de la fonction sick


( grin )
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

18

C'est clair, c'est un hack très bien vu, mais ignoble. grin

19

Il fallait y penser, c'est très bien vu... mais c'est vraiment horrible grin
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

20

Kevin Kofler (./16) :
pixtest:33,64889 devrait fonctionner pour détecter PreOs avec FLib. smile

J'explique:
1. FLib stocke les coordonnées dans un tableau de unsigned short: x=33, y=64889.
2. Elles sont ensuite passés à GetPix, un ROM_CALL qui prend des coordonnées signées (en particulier, il utilise muls pour calculer l'offset). Donc en réalité x=33, y=-647.
3. x&7==1, donc on teste le 2ème bit (correspondant à 26) de l'octet en 0x4c00+(-647)*30+(33>>3)==0x32.
4. Ce bit vaut 1 pour PreOs (car 'P' == 0b01010000) (et pour PedroM car 'R' == 0b01010010), 0 pour AMS sans kernel.


Le taré triso

De mon côté j'ai fait ça hier soir
#include <tigcclib.h>

int _main(){
   if(speek(50)==80 && speek(51)==79)
   {
       DlgMessage("PreOS ChekcUp", "PreOS installed",0,0);
   }
   else
   {
       DlgMessage("PreOS ChekcUp", "PreOS not installed :[",0,0);
   }
}

M'suis senti tout fier de vérifier que ça fonctionnait trigni

ment je donne une valeur de retour à _main() ? J'ai tenté des return 1Mais com mais sans effet :'

21

Regarde dans la doc du côté de RETURN_VALUE, Returning values like TI-BASIC functions smile
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

22

Tu dois mettre une valeur sur l'E(xpression)Stack si tu veux qu'elle soir interprétée par AMS... C'est pas très compliqué, mais n'ayant pas touché à la chose depuis des lustres je ne me souviens plus des fonctions exactes à appeler.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

23

FireHunter (./20) :
if(speek(50)==80 && speek(51)==79)

Ah purée, les adresses en décimal et le code en décimal aussi sick grin

Eh Fire, ça searit beaucoup plus beau et lisible un truc dans le genre :
if (0x32) == 'P' && (0x33) == 'O'

ou encore
if (0x32) == 'PO'

En asm, on écrit pratiquement la seconde version, en C je sais pas ce que tu peux faire, mais c'est plus lisible ^^

24

Je viens de tester sur TiEmu: flib("pixtest:33,64889"):fl[1] fonctionne vraiment. smile
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

chapeau, c'est immonde mais fallait le trouver grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

26

Kevin Kofler (./24) :
Je viens de tester sur TiEmu: flib("pixtest:33,64889"):fl[1] fonctionne vraiment. smile.gif


Bon du coup ça doit pouvoir s'exploiter pour n'importe quel byte de la RAM ^^. Géjé !
Folco (./23) :
Eh Fire, ça searit beaucoup plus beau et lisible un truc dans le genre : if (0x32) == 'P' && (0x33) == 'O'


Je dis pas le contraire, mais bon, j'ai déjà généré la chaîne Exec gni
Lionel Debroux (./21) :
Regarde dans la doc du côté de RETURN_VALUE, Returning values like TI-BASIC functions smile.gif

Okay, merci happy

27

De toute façon, ça ne change pas la chaîne Exec résultante. smile
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é

28

Exactement, c'est juste que ce que je te propose est compréhensible au premier coup d'oeil, ce que tu as écrit, non. hehe

29

Mouais, bon perso j'm'en sors pas avec le push_shortint, j'ai utilisé la boucle toute faite pour vider l'estack, mais ça marche pas ^^

30

Ben crée un topic dans la partie C si tu veux rajouter une corde à ton arc. cheeky