1

oubliez-tout !
Est-ce que quelqu'un saurait pas plutot comment enregistrer dans les variales A, B, ..., Z de la RAM ?
Me balancez pas des tutos, j'en ai vu plein et je comprends pas !
:bravo: Vous pourriez pas m'expliquer?

2

tu peux pas mettre des nombres entiers dans les registres et ces nombres entiers ne doivent pas depassé 65535 pour les registres de 16 bit et 255 pour les registres de 8 bits....mais pour stocker dans les variables utilisateurs, tu procede de cette façon:

1. tu met la valeur que tu veux dans op1
2. t'appel pushrealo1
3. tu met a 0 op1
4. tu charge la variable dans lequel tu veux stocker dans (op1+1)
5. t'appel stoother pour le stocker

mais tu sai le tutorial de guru explique corectement ca...tu devrais le lire...
si tu l'as déja lu, c'est pas normal que tu ne comprend pas...
pour travailler avec les nombres decimaux, tes obligé d'utilisé les opX...

pour enregistrer un nombre decimaux dans opX, voila le code.

ld hl, adresse du nombre
ld de, opX ( X va de 1 a 6 )
ld bc,9
ldir

adresse du nombre:
.db $00,$00,$00,$00,$00,$00,$00,$00,$00

le premier octet est le signe ( positif=$00 et negatif=$80)
le 2eme est la virgule...elle commence a $80
et les autres sont le nombres sans virgules

ex: si on veut stocker 30.5 dans op1, on le represente de la façon suivante

.db $00,$81,$30,$50,$00,$00,$00,$00,$00

j'espere que t'as compri...

3

:lol Piti problème !
D'après ton truc, on peut stocker un nombre dans une variable de la RAM mais moi, mon problème, c'est que je voudrais stocker une variable du genre a,b,c,d,... -h,l dans une variable de la RAM.
C'est pas possible?

Sinon, peut-on stocker hl dans a en prenant que l ?
j'ai vu qu'on faisait (hl) mais ça marche pas. :cry:
J'ai aussi essayé (hl+1) mais pareil. sad

En fait, il me faudrait n'importe quelle variable (RAM ou pas RAM) pour sauvegarder un nombre (pour la sauvegarde des niveaux de mon jeu). Y en a qui m'on dit la pile. J'ai essayé et je suis sur que tout est bon, seulement, je stocke un registre 16 bits et il faut que j'utilise a (pour comparer avec cp) qui est 8 bits.

Si quelqu'un pouvait m'écrire un bout de code pour stocker une variable 8 ou 16 bits qu'on peut retransformer en 8 bits sans utiliser :
a,b,c,d,e,f,g,h,l,hl,... je crois que y en a d'autres wink

Il me faudrait donc un bout de prog de type :



lvl=1

;CHARGEMENT DU NIVEAU (je m'en charge)
ld a,lvl

cp 1
call chargelvl1
cp 2
call chargelvl2
etc...

;JEU / DETECTION DE GAGNE OU PERDU (je m'en charge)

;AUGMENTATION DE LVL
inc lvl

:bravo: ;RETOUR AU CHARGEMENT

4

tu ne peux pas stocker hl dans a parce que hl est un registre de 16 bits et a est un registre de 8 bits...mais tu peux stocker l dans a et comme l depend de hl, bah enverite ca revient a stocker hl-->a
on utilise (hl) pour identifier ce qui est a l'interieur de l'adresse...
ex: ld hl,plotssceen
ld (hl),5

bah la on stocke 5 a l'adresse plotsscreen

tu peux que faire (ix+1) ou (iy+1), jai l'impression que t'as pas lu le tutorial de guru en français tu sais il explique tres bien les registres et vraiment si tu ne comprend pas les adresse ( comment ca marche ), je te conseille de t' arrete la dessus sino t' ira pas tro loin...

tu peux comparer les registres de 16 bits en utilisant " bcall(_cphlde) " si t' utilise une ti-83+...mais si tu utilise la pile les nombres ne resteront pas stocke si tu reexecute le programme...pour cree les highscores, procede de cette façon:

ld hl,op1
ld de,adresse du nom du programme
ld bc,9
ldir
bcall(_chkfindsym)
inc de
inc de
push de
ld hl,adresse du highscore
ld de,9d95h
sbc hl,de
pop de
add hl,de
la tes a l'adresse du highscore...tu peux y stocker des tuc en utisant (hl), mais tu peux que y mettre des valeurs de 8 bits.....

adresse duhighscore:
.db 0
adresse du nom du programme:
.db Progobj,tvarprog,"nom du prog",0

tu sais quoi ce que tu demande est tres long a faire ( le bout de code ) et a mon avis personne ne voudra te faire ce code....jai essaye de te faire voir a peu pres comment on procede ...
euh au faite si t'utilise mirageos cest tro simple:
utilise ce code

ld hl,adresse du highscore
ld (hl),highscore

adresse du highscore:
.db 0

ce code permet de stocker un nombre dans un prog mais uniquement sous mirageos...

tu sais quoi tu connait pas gran chose je pense que tu devrais plutot lire le tutorial de guru avant de poser des questions aussi simples.....tu sauras comment on manipule les trucs de ce genre comme l'ecriture dans un programme et la creation de chaine ou autre chose......

5

En fait, j'ai déjà lu le tuto mais ça marche pas quand je tape le code.
Ex: un truc tout con qui marche pas:

;VALEUR DE DEPART :P
ld hl,1
push hl

debut:

;CHARGEMENT NIVEAU
pop hl
ld a,(hl)
push hl
cp 1
call niveau1
cp 2
call niveau2

;CODE DU JEU

;SI GAGNE
pop hl
inc hl
push hl
jp debut

;SI PERDU
jp debut

j'ai aussi essayé de remplacer hl par ix+1 et ça marche pas non plus
en fait, avec ça, je passe au deuxieme niveau mais quand je perds au deuxieme, il me fait tout le temps recommencer au premier!!! embarrassed

tout parait logique dans les tutos mais avec moi ça marche pas
sinon j'aurai voulu afficher hl sur l'écran du graph pendant le jeu pour mieux comprendre mais je sais pas comment on fait !
vputs affiche que du texte! :cry:

Donc, je voudrais savoir:
-kekivapa dans mon prog?
-veutu mon code complet pour m'aider? (pas tres long C un tron dans une map avec gagne quand on sort de l'écran)
-peux-tu me taper le code pour:
_sauvegarder une var 8bit dans la lettre A de la RAM
_le chargement qui va avec (A -> a ou b ou c,...)
parce que j'avais pas très bien compris ton truc :roll:

6

ouai vas y envoie le fichier source de ton programme dans ma boite au lettre c'est " mcbeach1@hotmail.com"...bon ces normal que tu ne comprenne pas parce que le tutorial de guru certes il est bien mais pas pour ce qui n'ont pas encore les connaissances du milieu de l'assembleur....il a certainement oublie d' expliquer les adresses et leur fonctionnement....dommage...

au faite a propos ton code,il pourra jammais marche parce que tu charge le contenu de l'adresse 1 et non la bonne valeur.ce contenu n'ayant pas changé avec le temps ton programme vas toujours au label de niveau 1....

7

si j'ai bien compris ce que tu veux faire, il suffit de mettre un .db 0 dans ton code (à la fin de préférence) avec un label tel que dernier_niveau:

et ensuite au lancement du prog tu fais ld a,(dernier_niveau) cp 1 call z,niveau1 cp 2 call z,niveau2 etc...

sinon je ne vois pas le pb...
-pacHa

8

alors tas resolu ton probleme ???

9

Si tu as des problèmes avec l'utilisation des registres, ce qu'on peut et ce qu'on ne peut pas faire, je rapelle que j'avais fait un tutorial qui explique les bases de l'assembleur, pas axé sur les rom calls comme guru et les autres, mais sur l'assembleur lui même: les registres, la pile, etc...

http://tift.paxl.org (rubrique tutoriels)

10

Magnifique, mon forum n'est pas mort ! grin
Tout d'abord, j'ai pas tout compris le problème pour le retour au niveau 1.
Un bout de code m'aiderai beaucoup (reprenez celui-que j'ai écrit et corrigez-le)
Sinon, je peut pas me servir de mon logiciel pour les mails alors je vais afficher le code de mon prog ici.
ATTENTION ! CA VA PRENDRE DE LA PLACE ! :mrd:


<<< X-Tron.z80 >>>

#include "ASM.inc"

.org 9d95h

;CONFIGURATION FENETRE
B_CALL(_RunIndicOff)
B_CALL(_OP1SET0)
ld a,XMIN
B_CALL(_STOSYSTOK)
B_CALL(_OP1SET0)
ld a,YMIN
B_CALL(_STOSYSTOK)
B_CALL(_OP1SET1)
ld a,DELTAX
B_CALL(_STOSYSTOK)
B_CALL(_OP1SET1)
ld a,DELTAY
B_CALL(_STOSYSTOK)

;AFFICHAGE TITRE
B_CALL(_grbufclr)
ld hl,imgtitre
ld de,plotsscreen
ld bc,768
ldir
B_CALL(_grbufcpy)
B_CALL(_getkey)

;VALEUR DE DEPART (SAUVEGARDE POUR LES NIVEAUX)
ld hl,1
push hl

;TRANSITION (RIDEAU BLANC)
debut:
ld c,64
ld b,0
ld d,96
ld h,0
transit:
dec c
ld e,c
B_CALL(_ILine)
dec c
ld e,c
B_CALL(_ILine)
jp nz,transit

;CHARGEMENT NIVEAUX (1 et 2)
retour:
pop hl
ld a,(hl)
push hl

cp 1
call z,goimglvl1
cp 2
call z,goimglvl2

;VALEURS (a=/ b=x c=y d=ipoint/slow e=? h=direction l=?)
ld b,3
ld c,3
ld d,1
B_CALL(_ipoint)
ld h,2

;DEBUT PROGRAMME
getkey:
ld a,0ffh
out (1),a
ld a,0feh
out (1),a
in a,(1)
cp 253
jp z,gauche
cp 251
jp z,droite
cp 247
jp z,haut
cp 254
jp z,bas
ld a,0ffh
out (1),a
ld a,0fdh
out (1),a
in a,(1)
cp 191
jp z,stop
fingetkey:
ld a,h
cp 1
call z,gohaut
cp 2
call z,godroite
cp 3
call z,gobas
cp 4
call z,gogauche

;COMMANDES GRAPHIQUES
push bc
ld d,3
B_CALL(_ipoint)
pop bc
jp nz,perdu

ld d,1
B_CALL(_ipoint)

ld a,c
cp 63
jp z,gagne
ld a,b
cp 0
jp z,gagne

;RALENTISSEMENT
ld a,120
ld d,250
slow:
dec d
jp nz,slow
ld d,250
dec a
jp nz,slow
ld d,1
jp getkey


gauche:
ld h,4
jp fingetkey
droite:
ld h,2
jp fingetkey
haut:
ld h,1
jp fingetkey
bas:
ld h,3
jp fingetkey
gogauche:
dec b
ret
godroite:
inc b
ret
gohaut:
inc c
ret
gobas:
dec c
ret

;ARRET PROGRAMME
stop:
B_CALL(_clrlcdfull)
ret

;GESTION DE LA FIN (RECOMMENCE QUAND PERDU)
;(FAIT UNE TRANSITION RIDEAU ET CONTINUE QUAND GAGNE)
perdu:
jp retour
gagne:
pop hl
inc hl
push hl
jp debut





;CHARGEMENTS IMAGES (PAS IMPORTANT POUR L'ETUDE DES BUGS)
goimglvl1:
B_CALL(_grbufclr)
ld hl,imglvl1
ld de,plotsscreen
ld bc,768
ldir
B_CALL(_grbufcpy)
B_CALL(_getkey)
ret
imglvl1:
#include "imglvl1.asm"

goimglvl2:
B_CALL(_grbufclr)
ld hl,imglvl2
ld de,plotsscreen
ld bc,768
ldir
B_CALL(_grbufcpy)
B_CALL(_getkey)
ret
imglvl2:
#include "imglvl2.asm"

imgtitre:
#include "imgtitre.asm"


.end
END


<<< Fin >>>

Si vous comprenez pas tout pour la direction, c'est pas grave.
Les problèmes sont :
- Quand perdu, retour au 1er niveau même si on est au 2ème
- Quand crash dans une certaine direction, va au niveau 2 (???)
- Au niveau 2, quand crash ds une certaine direction, retour au lvl1
(+KEUBIZAR!!!)
Apparement, le prog aime pas trop mon push/pop ou mon (hl) pour la
gestion des sauvegardes.
Je tiens à préciser que sinon, tout le reste marche à la perfection.
Je n'ai mis ici que le prog principal, il n'y a pas les fichiers images ASM.
:bravo: Merci d'étudier mes problèmes !

11

franchement si je regarde ton code....il me semble pas bon au niveau du stockage du level...tu sai koi...tu met 1 dans hl et apres tu va chercher ce qu'il y a l'adresse pointe par hl donc a l'adresse 1...et il me semble bien que dans ton programme tu me modifie pas ce qu'il y a dans cette zone memoire...
toi au lieu de changer ce qu'il y a à l'adresse hl...tu change hl donc en verité il est normale que le level ne change pas....sino pour ce qui est du code je n'ai pas le temps de le faire....a mon avis tas rien compri a la base de l'assembleur et tu veux deja programmer...je pense qu'il faudra laisser ton jeu et essaye de comprendre les base du langage comme les adresse et les registres et le passage des donnes sino tu va pas aller loin....si tu veux je t'envoie un bout de mes tutorial qui parlent des bases du langage....

sino je te conseil de creer une zone de donne de 1 octet pointe par un label dans le programme et apres tu y stocke le level de cette façon:

ld hl, label de la zone de donné
ld a,level
ld (hl),a

pour recuperer le level tu fai ca:

ld hl, label de la zone de donné
ld a,(hl)

et la zonne de donne sera defini comme ca:

adresse de la zone de donne:
.db 0

j'espere que t'as compri....

12

:P OK ! Juste quelques précisions:
1/ Si je commence au niveau 1, je remplace .db 0 par .db 1 ou ld a,level par ld a,1 ?
2/ Comment je fais pour incrémenter ma variable niveau?
inc hl? inc (hl)? inc a?

13

McBeach, aide moi!!!!!!!!!!! :aouaou:
Il ne me manque plus que deux choses pour finir mon jeu!
(voir au dessus) :roll:

14

pour incrémenter le niveau tu utilise ceci:

ld hl,adresse du niveau
inc (hl)

pour charger le niveau tu utilise ceci:
ld hl,adresse du niveau
ld a,(hl)

"hl" pointe à l'adresse du niveau...et "(hl)" est le contenu de l'adresse pointé par "hl"...j'espere que tas compri...au faite c'est un jeu de koi ke tu fait.....et a mon avis tas pas compri les adresses et ca te posera un probleme apres...si tu veux je peux t'envoyer quelques unes de mes tutorials qui pourront t'éclaircir ce point...

15

Merci beaucoup!
Je vais enfin pouvoir me remettre à la programmation de mon jeu. Même si j'ai peut-être pas bien compris les bases, je m'en fout car dès que j'ai ma variable niveau, le gros du jeu est fini, il me reste juste à faire les maps avec Paint.

Sinon, mon jeu c'est un tron (serpent où l'arrière ne disparait pas) qui doit aller à la fin d'une map : un parcours où il faut pas toucher les murs quoi !
[img][/img]

16

Je t'aurais bien affiché un de mes niveaux mais ça a pas marché !
[img]\AthlonCProgram FilesTI EducationTASMPrgmsX-TronLVL1.bmp[/img]

17

si tu veu poster une image sur le forum, faut qu'elle soit hebverger on-line
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

18

[quote:e534d374d0="EJC2810"]Merci beaucoup!
[/quote:e534d374d0]

de rien.....