1

Help !! Mon problème est simple, je ne veux pas faire de gros programmes. Seulement un (mon dernier). Voilà le topo :
Je veux créer une variable ("mainbon"), de type nombre, que ne peut prendre que la valeur 0 ou 1 en fonction du résultat du password ("jsr userlib::getpassword").
Si quelqu'un sait comment faire pour créer cette variable ce serait sympa de m'aider (= écrire les lignes de code...)
Faut-il faire aussi des tests sur l'existence éventuelle de la variable pour éviter des plantages ?
Merci ! doom
.

2

ya une super doc "file storage on the ti92 v4" où il y a des routine toutes pretes a la fin...si ca peut t'aider.
mais bon comme tu doit etre sur 89 comme d'habitude...
Faut faire des tests oui pasque sinon tu feras une erreur et tu retournera dans l'ecran principal donc ton test sera foutu...

3

89 ? 92+ ? on s'en fou ! y'a pas de difference pour la VAT/FAT !
pour t'aider tu peus utiliser la ROM_CALL VarStore [c'est la numero $86] ... elle est pas documentee dans TIGG lib mais elle l'est dans la doc sur ti68k de texas instruments [celle avec le SDK] smile
cette rom_call est tres pratique et tres simple a utiliser wink
[edit]Edité par Bill-Bob le 26-07-2001 à 22:48:12[/edit]
avatar
pwet

4

	pea		Format(pc)			; Entre l'adresse du format du fichier a creer
	move.w		#taille_du_fichier,-(a7)	; Entre la taille du fichier a creer
	move.w		#$4000,-(a7)		; C'est un Token
	pea		Fichier(pc)		; Entre l'adresse du nom du fichier
	jsr		doorsos::VarStore		; Appelle la fonction qui cree le fichier
	jsr		doorsos::SymFind		; On va chercher le Handle, stocké dans d0
	lea		12(a7),a7			; Restaure la pile

			even
			dc.b	0,"mainfichier"
Fichier			dc.b	0
			even
			dc.b	0
			dc.b	"XYZ",0
Format			dc.b	$f8
			even



a0 pointe sur le debut du fichier (devant la taille)
[edit]Edité par FlashZ le 27-07-2001 à 11:54:59[/edit]
Site personnel
Site professionnel

msn / mail : racine.f(at)free.fr

5

Merci, je vais essayer dès que j'aurai de nouveau le temps. AU fait, j'ai une 89 HW1 ROM 2.03.
.

6

FlashZ: moi jáurais pas faais ca, autant prendre un int que un typpe user...

meme routine avec :
Fichier			dc.b	0,1
Format			dc.b	$1F
			even



sans oublier:
move.b d0,Fichier
Cours et tutos Asm: http://membres.lycos.fr/sirryl

7

bah avec ca on peut pas faire d'extension personalisee...
et pis je te rappelle qu'on avait des pb en utilisant les formats predefinis du tios
Site personnel
Site professionnel

msn / mail : racine.f(at)free.fr

8

Tu sais en Malaisie g pas mes docs alors.... je suggerais juste, sinon y a toujours fillelib ou alors regarder plus precisement la Fonction VarStore...
Cours et tutos Asm: http://membres.lycos.fr/sirryl

9

En malaisie ? smile
Erf, FileLib c assez buggue, et c plus nul que les fonctions du TIOS.
En plus, la plupart des fonctions de FileLib sont redirigees vers des fonctions de la ROM
Site personnel
Site professionnel

msn / mail : racine.f(at)free.fr

10

FlashZ : J'ai testé ta routine. Tout fonctionne, sauf qu'apparaissent 2 caractères avant mon 1 (Eq et *) quand je mets une taille de fichier de 5 octets (ce que m'indique le Var-link quand je tape "1->bon"... le prog créé ma variable sur 7 octets...

Pour taille du fichier j'ai mis 5,
rts après avoir restauré la pile
"1" à la place du "XYZ" (je suis doué mdr)

Lé où le problème ?
.

11

Tu veux créer une expression qui vaut 1 dans AMS?

Alors le format est celui donné par Paxal (sauf qu'il a oublié un 1 roll):
Fichier dc.b 0,1,1
Format dc.b $1F


Donc:
	pea		Format(pc)			; Entre l'adresse du format du fichier a creer
	move.w		#3,-(a7)	; Entre la taille du fichier a creer
	move.w		#$4000,-(a7)		; C'est un Token
	pea		Fichier(pc)		; Entre l'adresse du nom du fichier
	jsr		doorsos::VarStore		; Appelle la fonction qui cree le fichier
	jsr		doorsos::SymFind		; On va chercher le Handle, stocké dans d0
	lea		12(a7),a7			; Restaure la pile

			even
			dc.b	0,"mainfichier"
Fichier			dc.b	0
			even
			dc.b	1,1
Format			dc.b	$1f
			even


D'ailleurs, la taille vaut 3, pas 5.
[edit]Edité par Kevin Kofler le 10-08-2001 à 22:26:18[/edit]
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é

12

Impéccable, merci à tout le monde. Autant dire que cela sera mon (puis-je seulement dire "mon" ?, vu que la base n'est pas de moi, ni les librairies etc.). En tout cas MERCI et BONNES VACANCES A TOUS !
.

13

smile
Site personnel
Site professionnel

msn / mail : racine.f(at)free.fr

14

Merci! smile
Cours et tutos Asm: http://membres.lycos.fr/sirryl

15

Je viens de me rendre compte que ma phrase n'était pas finie, à force de m'étendre. Donc je disais : c'est mon ("mon" ? blablabla) dernier programme en asm. Je retourne au basic + flib.
Bye.bang
.

16

eekeekeekeekeekeekeekeekeekeek
moi je suis à l'asm et j'y reste !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
je retourne en basic que pour faire du calcul symbolique, ainsi que les fonctions balèzes à coder directement en asm (je l'ai fait avant de programmer le zoom et la rotation, mais ccccc lllleeennnnntt ......)
:D

17

Bon, pour la dernière routine de Kevin, OK, mais prenons un autre exemple, un fichier texte de 10 octets:
	pea		Format(pc)			; Entre l'adresse du format du fichier a creer
	move.w		#8,-(a7)	; Entre la taille du fichier a creer
	move.w		#$4000,-(a7)		; C'est un Token
	pea		Fichier(pc)		; Entre l'adresse du nom du fichier
	jsr		doorsos::VarStore		; Appelle la fonction qui cree le fichier
	jsr		doorsos::SymFind		; On va chercher le Handle, stocké dans d0
	lea		12(a7),a7			; Restaure la pile

			even
			dc.b	0,"mainfichier"
Fichier			dc.b	0
			even
			dc.b	0,1,$20,$61,$61,$61,0
Format			dc.b	$e0
			even


Ca fonctionne très bien, mais si maintenant on veut créer un texte de 30000 octets (rempli de caractères nuls, donc à remplir soi-même après smile), on pourrait faire:
	pea		Format(pc)			; Entre l'adresse du format du fichier a creer
	move.w		#29998,-(a7)	; Entre la taille du fichier a creer
	move.w		#$4000,-(a7)		; C'est un Token
	pea		Fichier(pc)		; Entre l'adresse du nom du fichier
	jsr		doorsos::VarStore		; Appelle la fonction qui cree le fichier
	jsr		doorsos::SymFind		; On va chercher le Handle, stocké dans d0
	lea		12(a7),a7			; Restaure la pile

			even
			dc.b	0,"mainfichier"
Fichier			dc.b	0
			even
			ds.b	29997
Format			dc.b	$e0
			even


Ca fonctionne aussi, mais le seul prob est que le prog qui crée ce texte fait lui aussi plus de 30000 octets (ce qui est tout à fait normal bien sûr).
Donc je voudrais savoir comment faire dans un cas comme celui-ci ? Allouer ? Mais comment, car ce n'est pas la même chose qu'une simple allocation pour un écran virtuel, par exemple.

P.S. : G bien compris le format des fichiers et les tags de type de fichier, mais est-ce que quelqu'un pourrait m'expliquer (ou m'indiquer une doc qui explique) ce que sont les even et à koi ils servent ; et pourquoi le format des fichiers est-il placé avant le label Format ? En fait, je ne comprend pas du tout comment sont structurées les données sad
[edit]Edité par Asterix le 24-09-2001 à 23:44:06[/edit]

18

even: il me semble qu'il sert à mettre une adresse paire ou plutôt forcer le processeur à mettre la prochaine adresse à une adresse paire !

qqun peut confirmer ?

19

>Asterix:
>Ca fonctionne aussi, mais le seul prob est que le prog qui crée ce texte fait lui aussi plus de 30000 octets (ce qui est tout à fait normal bien sûr).
>Donc je voudrais savoir comment faire dans un cas comme celui-ci ? Allouer ? Mais comment, car ce n'est pas la même chose qu'une simple allocation pour un écran virtuel, par exemple.

Regarde les sources de XtraKeys sur http://ti89prog.francais.kevinkofler.cjb.net. Mes fichiers sont très petits, mais je n'ai pas utilisé VarStore (puisque je ne la conaissais pas à l'époque, vu qu'elle n'est pas documentée dans TIGCC).
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é

20

Oué, je pense avoir bien pigé ta technique, et g essayé de m'en inspirer :
	include "os.h"
        xdef _nostub
	xdef _ti89
	xdef _ti92plus	

 move.l #10,(a7)
 ROM_CALL HeapAlloc
 tst.w d0
 beq pas_mem
 move.w d0,d7
 move.w d0,(a7)
 ROM_CALL HeapDeref
 clr.w (a7)
 pea format(PC)
 pea (a0)
 ROM_CALL memcpy
 lea 8(a7),a7
 pea fichier(PC)
 ROM_CALL SymAdd
 tst.w d0
 beq pas_creation
 move.l d0,(a7)
 ROM_CALL DerefSym
 move.w d7,12(a0)
pas_creation:
 lea 4(a7),a7
 move.w d7,(a7)
 jsr ROM_CALL HeapFree
 rts
pas_mem:
 move.w d0,(a7)
 ROM_CALL HeapFree
 rts
	
 dc.b "mainfichier"
fichier dc.b 0
format dc.b 0,8,0,1,$20,$61,$61,$61,0,$e0
 
 END


Malheureusement, ça buggue : soit Line 1111 Emulator, soit Illegal Instruction, soit Address Error, soit la calc gèle carrément, c assez aléatoire, et ça change entre les ROM 1.01, 2.03 et 2.05 (pas le même bug sur chaque)). Je ne vois pas où il peut y avoir un problème, mais d'après le debuggueur de VTI, ça serait le rom_call SymAdd qui ferait des siennes !? Je vois pas trop pkoi ?

21

1. Il faut restaurer la valeur de a7! (Elle doit être la même à la fin qu'au début.)
2. Il ne faut pas écrire à (a7) ni à n(a7) où n>0! Il faut d'abord soustraire qqch. à a7 ou utiliser -(a7)!
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

D'accord. G corrigé :
 include "os.h"
 xdef _ti89
 xdef _nostub
 xdef _ti92plus
 xdef _main
	
_main:
 move.l #10,-(a7)
 ROM_CALL HeapAlloc
 lea 4(a7),a7
 tst.w d0
 beq pas_mem
 move.w d0,d7
 move.w d0,-(a7)
 ROM_CALL HeapDeref
 lea 2(a7),a7
 move.l #10,-(a7)
 pea.l format(PC)
 pea.l (a0)
 ROM_CALL memcpy
 lea 12(a7),a7
 pea.l fichier(PC)
 ROM_CALL SymAdd
 tst.w d0
 beq pas_creation
 move.l d0,-(a7)
 ROM_CALL DerefSym
 lea 8(a7),a7
 move.w d7,12(a0)
pas_creation:
 lea 4(a7),a7
 move.w d7,-(a7)
 ROM_CALL HeapFree
 lea 2(a7),a7
 rts
pas_mem:
 move.w d0,-(a7)
 ROM_CALL HeapFree
 lea 2(a7),a7
 rts
 	
 dc.b 'mainfichier'
fichier dc.b 0
format dc.b 0,8,0,1,$20,$61,$61,$61,0,$e0
 
 END


Ca ne buggue plus, mais ça ne crée toujours pas de variable sad En fait, le rom_call SymAdd renvoit toujours 0 dans d0 sad Ca vient peut-être du format des données ? (Mais vu que je ne le comprend pas trop, ja sais pas si ça peut poser problème ou pas)

23

>Ca ne buggue plus

Bizarre. Ça devrait boguer, puisque tu modifies d7 sans le sauvegarder. (Il faut un move.l d7,-(a7) au début et un move.l (a7)+,d7 devant chacun des 2 rts.)

>Ca vient peut-être du format des données ?

Oui, il manque un 0. Remplace dc.b 'mainfichier' par dc.b 0,'mainfichier'.

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é

24

>Bizarre. Ça devrait boguer, puisque tu modifies d7 sans le sauvegarder
Oui, mais la routine que j'affiche est en nostub, alors que je la teste dans un prog qui est, pour le moment, en mode kernel, donc ça sauvegarde d7 tout seul grin

Sinon, g bien rajouté le 0, mais maintenant, ça re-buggue (apparement, c encore le rom_call SymAdd qui fait bugguer) sad Je n'y comprend plus rien, je vais aller me coucher ; je reviendrais voir ça demain, peut-être que tu auras trouvé entre temps (ou quelqu'un d'autre smile) de koi peut bien venir ce bug.

25

Bon, g trouvé un compromis : je crée un texte vide avec VarStore, je met le handle de la zone mémoire au fichier texte, et je détruit l'espace mémoire (de 7 octets smile) créé par VarStore. Ca fonctionne bien, et je pense que c plutôt propre wink En tout cas, ya pas 1 octet de RAM perdu entre de lancement du prog smile

26

Ouais, t'aurais pu passer par fopen, fclose aso...
Cours et tutos Asm: http://membres.lycos.fr/sirryl