Bon, je pense avoir été clair ; Quelqu'un pourrait m'expliquer ce que c'est que la VAT?
Mais aussi ; qu'est ce que c'est que le 'pointeur' qui est demandé pour les calculc matriciels et de listes?(la valeur qu'on doit mettre dans de?)
Parce que je stagne à cause de ca je sais pas à quoi et comment s'en servir...
Encore un truc ; quelqu'un pourrait m'enseigner comment manier un sprite, et où l'enregistrer dans la mémoire?Est-ce qu'il y a un emplacement particulier?
Et encore un truc ; à quoi servent les registres ix et iy , à part à set et rest des bit?
Parce que je les utilise, mais je les connais pas si bien que ca...
Pour fini, un dernier truc ; quelqu'un aurit-t-il une bonne adresse, parce que j'en ai un peu marre de poser toujours des questions de débutants, alors que je pourrais trouver les réponses dans des tuto (que je n'arrive pas à trouver sur le net triso )
Merci d'avance!
arnauddebordeaux (./1) :
Quelqu'un pourrait m'expliquer ce que c'est que la VAT?


Je suis pas sur mais je croit qu'il s'agit d'une liste des variables (programmes/etc...) avec leurs adresses et leurs états (archivée/protégée/etc...). Sinon essaye de voir la source de Bouncy!, je croit qu'au début du code il y a une recherche des différents niveaux grâce à la VAT.
arnauddebordeaux (./1) :
qu'est ce que c'est que le 'pointeur' qui est demandé pour les calculc matriciels et de listes?


C'est juste le nom du label avant la liste/matrice ça je croit.

arnauddebordeaux (./1) :
quelqu'un pourrait m'enseigner comment manier un sprite, et où l'enregistrer dans la mémoire?Est-ce qu'il y a un emplacement particulier?


Tu peux placer tes sprites où tu veux dans ton code, mais pour que ta source soit lisible il est préférable de les placer à la fin (avant les '.end'). Puis sinon pour les placer dans le graph buffer faut voir ça avec ta librairie. Par éxemple si tu utilise Ion, avec la routine 'IonLargeSprite', il faudra faire comme ça :

	ld l,10			; Coordonnée Y
	ld a,20			; Coordonnée X
	ld b,16			; Hauteur de la sprite (ici 16 pixels)
	ld c,2			; Largeur de la sprite divisée par huit (16/8=2)
	ld ix,Sprite		; Label du sprite
	call ionLargeSprite	; La routine d'Ion pour copier la sprite dans le graph buffer (mémoire de l'écran)
	call ionFastCopy	; Autre routine d'Ion qui, cette fois, copie le graph buffer à l'écran


Et la sprite t'as juste à la placer à la fin du code de cette manière :

Sprite:
 .db %01110111,%11101110
 .db %10001000,%00010001
 .db %10100000,%00000101
 .db %10001100,%00110001
 .db %01001100,%00110010
 .db %10000000,%00000001
 .db %10000011,%11000001
 .db %10001110,%01110001
 .db %10011001,%10011001
 .db %10110111,%11101101
 .db %10110111,%11101101
 .db %11011111,%11111011
 .db %01011100,%00111010
 .db %00100111,%11100100
 .db %00011000,%00011000
 .db %00000111,%11100000

arnauddebordeaux (./1) :
Et encore un truc ; à quoi servent les registres ix et iy , à part à set et rest des bit?


Bah ça sert pour les flags (et c'est 'set' et 'res').
arnauddebordeaux (./1) :
Pour fini, un dernier truc ; quelqu'un aurit-t-il une bonne adresse, parce que j'en ai un peu marre de poser toujours des questions de débutants, alors que je pourrais trouver les réponses dans des tuto (que je n'arrive pas à trouver sur le net triso.gif )


Y'avais bien TI 82 ASM Corner en traduit en Français par Marc Plouhinec mais depuis peu c'est plus accéssible sad (mais y'a la version anglaise hébergée par ticalc je croit).
C'est quoi la source de Bouncy! ?

deeph (./2) :
C'est juste le nom du label avant la liste/matrice ça je croit.


COmment on fait pour le connaitre?

ET comment tu manies les sprites?


Bah c'est la source du jeu Bouncy! quoi...
arnauddebordeaux (./3) :
COmment on fait pour le connaitre?


C'est toi qui la fixe, on va pas t'en imposer non plus cheeky
Exemple :

	ld hl,Table_Machin
	inc hl
	cp 0
	jp z,Fin
	ret

Table_Machin:
	.db 1,0


Et là ça devrait sauter au label 'Fin' car la deuxième valeur de la liste 'Table_Machin' est 0.
arnauddebordeaux (./3) :
ET comment tu manies les sprites?


Je te l'ai déjà dit : avec les routines d'Ion par éxemple. Après c'est à toi de modifier les coordonnées et tout ça...

Puis sinon je te conseil de lire des sources de jeu, ça permet d'apprendre plus vite (il doit y en avoir dans la catégorie ASM du forum).
arnauddebordeaux (./1) :
quelqu'un aurit-t-il une bonne adresse, parce que j'en ai un peu marre de poser toujours des questions de débutants, alors que je pourrais trouver les réponses dans des tuto (que je n'arrive pas à trouver sur le net triso.gif )


http://www.ticalc.org , avec notamment Learn TI-83 Plus Assembly In 28 Days v2.0 qui a une bonne réputation.
VAT veut dire 'Variable Allocation Table`, ou table d'allocation des variables. C`est une partie de la RAM ou est stocke (dsl pour les accents je suis en qwerty) les addresses memoire des variables de la calto. par exemple, quand on appuie sur la touche Prgm, la calculette cherche dans la VAT toutes les variables de type progrqammes (protege ou non), puis affiche leur nom.

Pour savoir exactement comment fonctionne la VAT, cherche sur asm28days, il y a super tutorial. Tu peur egalement rechercher le fichier 'ti-82hack.txt' sur ticalc (ou TI-82ram.txt, c`est l`un des deux)

Sinon, si tu cherche des cours d'Asm, je peut peut-etre t`en donner en direct (je suis sur Bordeaux), mais faudra fixer les conditions...
Avec la sévérité de mes parents, ca sera pas possible ; mais ca m'aurait bien branché ; merci pour les renseignements sur la VAT, c'est super clair ;-)
Je regarde tout de suite sur asm28days, pour des informations complémentaires.
Attends, deeph ; j'ai rien pigé du tout!!
gh (./5) :
arnauddebordeaux (./1) : quelqu'un aurit-t-il une bonne adresse

deeph (./4) :
ld hl,Table_Machin inc hl cp 0 jp z,Fin ret Table_Machin: .db 1,0

Ca veut dire quoi, .db 1,0 à la fin?
Et puis, y' aurait pas une erreur?
Parce que inc hl et ensuite cp 0, il doit manquer une étape entre les deux ; qu'est ce qui est chargé dans a?
T'aurais pas oublié la ligne
ld a,(hl)?
entre ces deux instructions?
'.db' signifie 'define byte' si je me trompe pas, en gros c'est comme si tu crée une variable (ou plutot une liste) et que tu y mets tout ce que tu veux.

Et, oui, je me suis trompé, ce serai plutôt :

	ld hl,Table_Machin
	inc hl
	xor a	; pareil que 'ld a,0' mais en plus rapide
	cp hl
	jp z,Fin
	ret

Table_Machin:
	.db 1,0

Fin:
	ret
il y a une erreur: il fallait ecrire:

ld hl,Table_Machin
inc hl
xor a
cp (hl)
jp z,Fin
ret

Et, après, ca fait quoi, ce code?
dancingmad > ah ouais sinon ça compare l'adresse d'hl.
arnauddebordeaux (./11) :
Et, après, ca fait quoi, ce code?


Bah ça compare la deuxième valeur de la 'liste' nommé 'Table_Machin' avec 0. Et vu que c'est égal ça saute au label 'Fin'.
En gros, c'est un peu comme les listes en basic, sauf que les valeurs (fixées au début)ne peuvent pas changer?
deeph (./9) :
'.db' signifie 'define byte' si je me trompe pas, en gros c'est comme si tu crée une variable (ou plutot une liste) et que tu y mets tout ce que tu veux.

C'est plus terre-à-terre que ça. Quand on écrit un programme assembleur, on écrit directement quels sont les octets qui vont constituer le programme. Par exemple quand on écrit :
 ld a,$23
 inc a

le programme binaire final contiendra "3E423C" ("3E42" pour "ld a,42" et "3C" pour "inc a").
Quand tu écris ".db $42", ça fait que ton programme contient effectivement "42". Et rien ne t'empêche, à l'exécution du programme, d'aller changer les valeurs n'importe où , y compris dans ton propre code "ld a,23 \ inc a".

Donc....
arnauddebordeaux (./13) :
En gros, c'est un peu comme les listes en basic, sauf que les valeurs (fixées au début)ne peuvent pas changer?

Non. Tu peux considérer ça comme une liste, mais il faut garder à l'esprit que c'est endroit de la mémoire comme les autres qui n'a aucun privilège.
La "liste" de deeph peut être modifiée, par exemple avec ce code:

ld a,$42
ld (Table_Machin),a
ld a,$64
ld (Table_Machin+1),a



Au passage, "Table_machin" n'est qu'une valeur connue par le compilateur, calculée à partir de l'emplacement du label "Table_machin" dans le code source, et l'adresse de départ du programme (indiquée par .org xxxx (xxxx dépend de la calculette)).

J'insiste sur le fait que ce qu'on manipule en assembleur, ce n'est plus des "variables" ou des "listes" comme en BASIC, mais on manipule juste de la mémoire, sans règle quelconque pour vous empêcher d'écrire n'importe où ou de faire planter la calculette. Évidemment, quand on écrit:

coordonnee_x .db 0
coordonnee_y .db 0


et qu'on stocke dans ces deux octets ce qu'il faut pour faire tourner un jeu, on dit que c'est des variables. Mais si on essaye de comprendre l'assembleur en restant collé à la comparaison avec le BASIC, on passe à coté des nouveaux dangers et des nouvelles possibilités de ce "langage".
Donc, en gros considérons la source suivante (désolé si je parle comme un prof!)
.org 9D95h
ld a,03
ld b,0
ld c,0
ld (9D95h),bc
ret

La forme compilée donne ca:
3E03
0600
0E00
ED43959D
C9
Donc, si j'exécute le prgm , ca fait que y'aura la valeur 0 à l'adresse 9D95 et 9D96?
Et en réexécutant le prgm, ca plante pas?

Et .dw, c'est quoi?

arnauddebordeaux (./15) :
Et en réexécutant le prgm, ca plante pas?


Voilà, ça fera juste des "nop" inoffensifs.
-
arnauddebordeaux (./15) :
Et .dw, c'est quoi?


Comme .db sauf que ça définit un "mot" = 2 octets (dw signifie "define word"). C'est pourquoi écrire ".db 0" et ".dw 0" est différent, le 2e réserve 2 octets en mémoire.
gh (./16) :
Voilà, ça fera juste des "nop" inoffensifs.


D'accord, mais mettons que j'aie mis d'autres valeurs , comme 34BCh, dans bc ; au début du prgm, il y aurait BC34 ; il y a de fortes chances pour qu'il y aie un plantage, non, lors de la deuxième exécution du prgm, vu que le code source aura été modifié, non?
Oui. En tout cas, tu as compris le principe smile Tu es prêt pour coder !
Donc, c'est pas très pratique de mettre des variables à l'intérieur même de ton code, non?
A moins de mettre à la fin du prgm, le valeurs hexadécimales qu'il y avait au début, ce qui n'est pas très pratique!!!!!!

Ca fait combien de temps que tu programmes en assembleur?
Et surtout, tu as mis combien de temps avant de bien programmer?
PArce que ca me fait flipper, comment je galère pour fiare un tout petit prgm de merde, parce qu'il y a des erreurs logiques partout, comme la destruction de crtains registres après un rom call...

Et aussi ; comment "traduire" la fonction Input du basic en assemleur?
Parce que je n'arrive pas à l'écrire!!!!Ou alors, ce serait hyper long!!!
arnauddebordeaux (./19) :
Et aussi ; comment "traduire" la fonction Input du basic en assemleur? Parce que je n'arrive pas à l'écrire!!!!Ou alors, ce serait hyper long!!!


Bah c'est super long. Heuresement y'a des routines déjà programmé qui sont là pour t'aider. Par éxemple y'a InpuTXT de joe14.
AAAAAAAAAAHHHHHHHHHHH!!je me disais aussi...Vous utilisez tous ces routines, ou certeins sont assez fous pour les programmer à chaque fois?
Bah au pire tu n'as qu'a les programmer qu'une fois, après elle te servent plusieurs fois cheeky
Bah au pire tu n'as qu'a les programmer qu'une fois, après elle te servent plusieurs fois


Ah oui, ça c'est sûr qu'il vaut mieux réutiliser des bouts de code déjà faits quand on peut car sinon, on n'en sort plus...

arnauddebordeaux -> Va voir dans les sections "routines" et "source code" sur ticalc pour choper des routines intéressantes. Bon, il faut farfouiller un peu, mais y'a quelques trucs intéressants.
C`est aussi bien d`ecrire des routines pour soit au fur et a mesure et les reutiliser dans les progs, c`est tres formateur et en plus ca permet de savoir exactement ce que fait la routine... Souvent on a de mauvaises surprises en utilisant les routines des autres...
Le mieux c`est meme de recopier les routines des autres en essayant de comprendre ensuite de les reecrire sans regarder. A la fin, on a mem plus besoin de lire ce aue l`autre a ecrit et on a tout plein de truc simpa a inclure.
PS: dsl pour les accents, je suis sur un clavier qwerty...
c'est pas grave!!!!Merci pour ton tuayu, ca a l'air vachement intéressant!
J'ai encore un autre problème triso
Je fonctionne en système D, c'est à dire que j'ai pas de cable ; donc, je recopie les chiffres un par un!!!!!
Sauf que c'est la merde dans le cas des sprites ; c'est pour ca que j'ai décdié de faire un mini prgm en asm qui me permettrait de recopier directement les 768 octets de plotsscreen dans un mini prgm créé spécialement à l'occasion , que je recopierai dans mon prgm 'officiel' à l'aide de la fonction Recall ; ca me permettra de ne pas faire de fautes dans le recopiage des sprites!
Sauf que le problème, c'est que j'arrive pas à le faire fonctionner ; alors j'aimerai bien qu'on me dise où est-ce que ca ne va pas!
Voila le code:
ld hl,nomprgm ; nom du mini prgm : SPRITE
ld de,OP1
ld bc,8 ;longueur du nom +2
ldir
ld hl,768
bcall(_createprog) ; créé le mini prgm
ld hl,plotsscreeen
inc de ;\au fait, à quoi servent ces deux lignes?
inc de ;/
ld bc,768 ;768 octets de plotsscreen
ldir ;copie les 768 octets de plotsscreen dans le prgm
nomprgm:
.db progobj,"sprite",0 ;nom du prgm à mettre dans OP1


Je ne sais pas d'où vient l'erreur ; alors , ce serait sympa de votre part de m'aider!
Et un autre truc ; dans la source de Bouncy!, j'ai vu que l'auteur programmait ses propres interruptions ; à quoi ca sert?
Je sais COMMENT le faire (enfin en théorie ;-) ) , mais pas à quoi ca sert!
Ben, programmer ses propres interruptions, ça peut servir par exemple à faire intervenir un bout de programme (chargé d'une tâche bien précise) à intervalles réguliers. C'est une sorte de temps partagé, comme sur les systèmes multi-tâches mono-processeurs, t'as plusieurs processus qui tournent en "pseudo-parallèle" (chacun leur tour en réalité).

Dans le cas ,de Bouncy, je ne sais pas pourquoi il l'utilise, mais ça pourrait très bien être pour faire changer un décor de fond au bout d'un certain temps par exemple... (le code de l'interruption compte le nombre d'interruptions et arrivé à un certain nombre, lance une procédure de changement de décor). Enfin là, c'est purement un exemple, je n'ai pas regardé le code de Bouncy. smile
joe14 (./28) :
Dans le cas ,de Bouncy, je ne sais pas pourquoi il l'utilise


C'est pour avoir un chrono je croit.
Ah oui, c'est une possibilité, même si la fréquence des interruptions est très variable selon les conditions et notamment la santé des piles (d'ailleurs, un autre topic en parle il me semble)...