Ecrire dans un programme
2 participants
Page 1 sur 1
Ecrire dans un programme
Bonjour à tous,
Je me demandais comment, en ASM z80 (pour TI-82 stats si possible, mais au pire donnez moi juste les noms des roms call quand il y en a et j'ai la la lib ti83-ultimate.inc), on pourrait gérer les programmes présents sur la calculatrice :
- En créer
- Ecrire dedans
- Lire son contenu (mais pas besoins de l'afficher)
- Définir son mode (éditable ou non) (je n'ai pas besoin de le changer en cours de route, juste de le définir à sa création)
- Et enfin en supprimer
J'espère que vous le savez, même si je me doute bien qu'il doit falloir un bon niveau en ASM pour maîtriser ça.
Merci d'avance
Je me demandais comment, en ASM z80 (pour TI-82 stats si possible, mais au pire donnez moi juste les noms des roms call quand il y en a et j'ai la la lib ti83-ultimate.inc), on pourrait gérer les programmes présents sur la calculatrice :
- En créer
- Ecrire dedans
- Lire son contenu (mais pas besoins de l'afficher)
- Définir son mode (éditable ou non) (je n'ai pas besoin de le changer en cours de route, juste de le définir à sa création)
- Et enfin en supprimer
J'espère que vous le savez, même si je me doute bien qu'il doit falloir un bon niveau en ASM pour maîtriser ça.
Merci d'avance
Re: Ecrire dans un programme
Salut cyxo !
Pour créer un programme, il faut utiliser la romcall _createprog qui prend en paramètre dans HL le nombre d'octet que va faire ton programme. Après pour mettre des chose dans ton programme, tu dois faire des ldir. ATTENTION : ne copie pas plus que le nombre d'octets de ton prog'. Sinon c'est RAM CLEARED assuré.
Pour écrire dedans tu as ta réponse : via LDIR. Pour chercher un programme, il faut utiliser _Chkfindsym qui prend comme paramètre dans OP1 le nom de ton programme. Il retourne alors l'adresse du début de ton programme dans DE. ATTENTION : les deux premier octets de ton programme son réservés pour sa taille. Donc n'oublie pas de faire deux INC DE avec de copier.
Pour lire, tu as juste à te déplacer à l'intérieur avec des inc et des add. Juste une précision, le programme est composé de tokens, donc ne t'attend pas à avoir "ClrHome" dans un registre et l'afficher tel quel juste après.
Pour définir son mode, tu as aussi le possibilité de créer un programme protégé en utilisant _createProtProg qui marche exactement pareil que _createProg. Sinon, si tu veux changer en cours de route, ces deux romcalls retournent dans HL l'adresse du programme dans la table des variables. Il suffit alors de changer un 05 en 06 pour le protéger et vis-versa (n'hésite pas à demander plus de précisions).
Pour le supprimer, rien de plus simple : la commande _delvar fera l'affaire. Pour l'utiliser, tu dois faire la commande _ChkFindSym juste avant, et ensuite faire la commande _delvar : c'est par sécurité, pour vérifier que le programme existe bien. Du coup je te conseil de faire après le ChkFindSym un "RET c" pour éviter les bugs (à part si t'es sûr de toi).
Si tu veux de l'aide pour ton programme, je serais ravi de t'aider ;)
PS : fais attention, les noms des romcalls peuvent un petit peu varier vu que je n'ai pas la même include que toi.
PPS : Fais aussi un ChkFindSym avant la création de ton programme pour ne pas créer 2 programmes avec le même nom (je crois que c'est possible oui ^^)
PPPS : Rassure toi, tout ce que je t'ai dit ici est valable pour ta calculatrice : j'ai la même que toi
PPPPS : Ça commence à faire beaucoup de PS
PPPPPS : Je crois qu'il y a une romcall pour transformer un nombre dans un registre en token si tu veux faire un éditeur de code. Je vais vérifier...
Pour créer un programme, il faut utiliser la romcall _createprog qui prend en paramètre dans HL le nombre d'octet que va faire ton programme. Après pour mettre des chose dans ton programme, tu dois faire des ldir. ATTENTION : ne copie pas plus que le nombre d'octets de ton prog'. Sinon c'est RAM CLEARED assuré.
Pour écrire dedans tu as ta réponse : via LDIR. Pour chercher un programme, il faut utiliser _Chkfindsym qui prend comme paramètre dans OP1 le nom de ton programme. Il retourne alors l'adresse du début de ton programme dans DE. ATTENTION : les deux premier octets de ton programme son réservés pour sa taille. Donc n'oublie pas de faire deux INC DE avec de copier.
Pour lire, tu as juste à te déplacer à l'intérieur avec des inc et des add. Juste une précision, le programme est composé de tokens, donc ne t'attend pas à avoir "ClrHome" dans un registre et l'afficher tel quel juste après.
Pour définir son mode, tu as aussi le possibilité de créer un programme protégé en utilisant _createProtProg qui marche exactement pareil que _createProg. Sinon, si tu veux changer en cours de route, ces deux romcalls retournent dans HL l'adresse du programme dans la table des variables. Il suffit alors de changer un 05 en 06 pour le protéger et vis-versa (n'hésite pas à demander plus de précisions).
Pour le supprimer, rien de plus simple : la commande _delvar fera l'affaire. Pour l'utiliser, tu dois faire la commande _ChkFindSym juste avant, et ensuite faire la commande _delvar : c'est par sécurité, pour vérifier que le programme existe bien. Du coup je te conseil de faire après le ChkFindSym un "RET c" pour éviter les bugs (à part si t'es sûr de toi).
Si tu veux de l'aide pour ton programme, je serais ravi de t'aider ;)
PS : fais attention, les noms des romcalls peuvent un petit peu varier vu que je n'ai pas la même include que toi.
PPS : Fais aussi un ChkFindSym avant la création de ton programme pour ne pas créer 2 programmes avec le même nom (je crois que c'est possible oui ^^)
PPPS : Rassure toi, tout ce que je t'ai dit ici est valable pour ta calculatrice : j'ai la même que toi
PPPPS : Ça commence à faire beaucoup de PS
PPPPPS : Je crois qu'il y a une romcall pour transformer un nombre dans un registre en token si tu veux faire un éditeur de code. Je vais vérifier...
p'Ti rageur- Argent 4
- Sexe :
Age : 24
Messages : 58
Date d'inscription : 05/01/2014
Etudes : 2nde
Points Forum : 5
Points Concours : 0
Langages :- - TI-Basic Z80
- - ASM TI-82 Stats / TI-83
- - xLib
- - TI-82 Stats.fr
- - TI-83+
- - Casio Collège
Re: Ecrire dans un programme
Bon en fait ce que je veux faire n'est pas tout à fait un éditeur, comme laisseraient présumer mes questions. Mais au niveau du principe ça s'en rapproche un peu. En réalité mon programme vise à lire le contenu d'un programme pas à pas, créer un nouveau programme et écrire dedans en fonctions du contenu du premier.
Déjà je n'ai pas _createProtProg. Tu peux me dire l'equ hexa ?
Après y a des trucs que j'ai pas trop compris pour ces différents romcalls :
- Pour le _create(Prot)Prog, il prend HL comme taille en octet... Mais où on choisit le nom ?
- Si j'ai bien compris, ChkFindSym retourne l'adresse de mon programme dans c ? Et c'est quoi le OP1 ? Comment on le met dans un registre ? (si c'en ai pas déjà un)
- Pour le _delvar, dans quel registre il faut mettre l'adresse du programme ? On le laisse dans c ?
Merci (pour m'aider pour mon programme il te suffit de répondre à ce topic et aux éventuels autres ).
PS : En effet les noms des romcalls changent un peu mais c'est pas cata. Juste que j'ai pas le _createProtProg comme je l'ai dit auparavant.
PPS : En effet, ça cause d'ailleur de gros troubles à la calculatrice. C'est réalisable très facilement avec Axe : si ton programme source a le même nom que ce qu'il y a après le "." au début du programme (nom du programme compilé), ça va avoir lieu, et ça déstabilise la calculette.
PPPS : Je m'inquiète pas, puisque je reconnais les noms des romcalls
PPPPS : En effet
PPPPPS : Pas de PPPPPS.
Déjà je n'ai pas _createProtProg. Tu peux me dire l'equ hexa ?
Après y a des trucs que j'ai pas trop compris pour ces différents romcalls :
- Pour le _create(Prot)Prog, il prend HL comme taille en octet... Mais où on choisit le nom ?
- Si j'ai bien compris, ChkFindSym retourne l'adresse de mon programme dans c ? Et c'est quoi le OP1 ? Comment on le met dans un registre ? (si c'en ai pas déjà un)
- Pour le _delvar, dans quel registre il faut mettre l'adresse du programme ? On le laisse dans c ?
Merci (pour m'aider pour mon programme il te suffit de répondre à ce topic et aux éventuels autres ).
PS : En effet les noms des romcalls changent un peu mais c'est pas cata. Juste que j'ai pas le _createProtProg comme je l'ai dit auparavant.
PPS : En effet, ça cause d'ailleur de gros troubles à la calculatrice. C'est réalisable très facilement avec Axe : si ton programme source a le même nom que ce qu'il y a après le "." au début du programme (nom du programme compilé), ça va avoir lieu, et ça déstabilise la calculette.
PPPS : Je m'inquiète pas, puisque je reconnais les noms des romcalls
PPPPS : En effet
PPPPPS : Pas de PPPPPS.
Re: Ecrire dans un programme
Oups quel étourdi je fais, le nom de ton programme doit être dans OP1 pour createprog. Quant à createprotprog, il n'existe peut être que sur ti-83+. Donc je te conseille de faire avec la technique du 05 transformé en 06 dans la table des variables.
En fait quand je parle de "C" dans ChkFindSym je parle du flag Carry. Ce n'est pas le registre C. C'est juste que si le programme n'existe pas, il met le flag carry à 1. ChkFindSym retourne l'adresse de ton programme dans DE (attention toujours aux deux premiers octets), et dans HL, l'adresse du programme dans la table des variables (c'est comme une sorte d'index des variables, avec leur adresse, leur type, etc)
Delvar se fait après un ChkFindSym, donc a besoin dans OP1 du nom du programme. Mais il est préférable de faire ChkFindSym tout de même avant.
Voilà, cette fois pas de PS
En fait quand je parle de "C" dans ChkFindSym je parle du flag Carry. Ce n'est pas le registre C. C'est juste que si le programme n'existe pas, il met le flag carry à 1. ChkFindSym retourne l'adresse de ton programme dans DE (attention toujours aux deux premiers octets), et dans HL, l'adresse du programme dans la table des variables (c'est comme une sorte d'index des variables, avec leur adresse, leur type, etc)
Delvar se fait après un ChkFindSym, donc a besoin dans OP1 du nom du programme. Mais il est préférable de faire ChkFindSym tout de même avant.
Voilà, cette fois pas de PS
p'Ti rageur- Argent 4
- Sexe :
Age : 24
Messages : 58
Date d'inscription : 05/01/2014
Etudes : 2nde
Points Forum : 5
Points Concours : 0
Langages :- - TI-Basic Z80
- - ASM TI-82 Stats / TI-83
- - xLib
- - TI-82 Stats.fr
- - TI-83+
- - Casio Collège
Re: Ecrire dans un programme
Je n'ai jamais entendu parler de OP1. Comment on stocke une chaîne de caractère (puisque j'imagine qu'une chaîne de caractère est le nom de mon programme) ?
EDIT: OP1 = 8039h, merci
EDIT: OP1 = 8039h, merci
Re: Ecrire dans un programme
OP1 est une variable spéciale. Pour stocker des choses à l'interieur, soit tu fais un LDIR, soit tu fais octet par octet en faisant des trucs du genre :
Du coup, tu dois utiliser les tokens pour écrire le nom du prog : 'A' étant égal à 41h (je crois) tu as juste à compter pour avoir avoir le token correspondant ;)
- Code:
ld hl,$45
ld (OP1),hl
ld hl,$5A
ld (OP1+1),hl
etc...
Du coup, tu dois utiliser les tokens pour écrire le nom du prog : 'A' étant égal à 41h (je crois) tu as juste à compter pour avoir avoir le token correspondant ;)
p'Ti rageur- Argent 4
- Sexe :
Age : 24
Messages : 58
Date d'inscription : 05/01/2014
Etudes : 2nde
Points Forum : 5
Points Concours : 0
Langages :- - TI-Basic Z80
- - ASM TI-82 Stats / TI-83
- - xLib
- - TI-82 Stats.fr
- - TI-83+
- - Casio Collège
Re: Ecrire dans un programme
Ok. En effet, A = 41h, je connaissais déjà les chaînes de caractères en hexa, je savais juste pas comment utiliser OP1. Merci bcp pour toute tes réponses.
Re: Ecrire dans un programme
De rien et bonne chance pour ton programme ;)
Tu es en train de faire quoi ? Un interpréteur de programme ?
Tu es en train de faire quoi ? Un interpréteur de programme ?
p'Ti rageur- Argent 4
- Sexe :
Age : 24
Messages : 58
Date d'inscription : 05/01/2014
Etudes : 2nde
Points Forum : 5
Points Concours : 0
Langages :- - TI-Basic Z80
- - ASM TI-82 Stats / TI-83
- - xLib
- - TI-82 Stats.fr
- - TI-83+
- - Casio Collège
Re: Ecrire dans un programme
Tu chauffe (je sais ce qu'est un debugger ) mais c'est encore plus ambitieux (oui je suis un fou)
Re: Ecrire dans un programme
J'ai trouvé , c'est pas pour créer un compilateur?
Je donnais juste la fonction qui m'avait mis la puce à l'oreilleCyxo a écrit:(je sais ce qu'est un debugger )
Invité- Invité
Re: Ecrire dans un programme
X). Après c'est pas le projet principal sur lequel je bosse. Je suis en train de faire un de ces logiciels, du pur bonheur. J'en parlerai bientôt sur le forum.
Sujets similaires
» Axe, écrire dans l'autre sens.
» Bug dans programme avec fonction pgcd(
» Matrefeytontias's hex codes (ne pas poster ici, y'a un topic de discussion !)
» [REC] Dans quel niveau êtes-vous dans Sokoban ?
» [TI83] ecrire en inversion vidéo ?
» Bug dans programme avec fonction pgcd(
» Matrefeytontias's hex codes (ne pas poster ici, y'a un topic de discussion !)
» [REC] Dans quel niveau êtes-vous dans Sokoban ?
» [TI83] ecrire en inversion vidéo ?
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum