Posté le 12/07/2011 à 21:25 Membre depuis le 25/03/2011, 207 messages
Bonjours bonsoir,
Je vient de finir un "plus ou moins" en ASM sous ion.
Le programme prend 267 octés.

Voici les liens:
-les programmes : tromb Fichier joint : PLUSMOIN.83ptromb Fichier joint : PLUSMOIN.8xp
-le code : tromb Fichier joint : PLUSMOIN.z80
-le compilateur : tromb Fichier joint : compiler2.battromb Fichier joint : spasm.exe

ATTENTION : ne sortais pas des bornes ( [0;255] ) : nombres affichés invalides (bug de résultat mais aucun "dommage")

Voici la source:
	.nolist 
#include "ion.inc" 

#define	nombrecherche	saferam1
#define	n_essais	nombrecherche+1
#define	numerau_essaye	n_essais+1


	.list 
#ifdef TI83P 
	.org progstart-2 
	.db $BB,$6D 
#else 
	.org progstart 
#endif 
	ret 
	jr nc,start 
	.db "PLUSMOIN",0 
 
start: 


	ld	a,r
	ld	(nombrecherche),a
	ld	a,0
	ld	(numerau_essaye),a
	ld	(n_essais),a


debut:
	ld	hl,$0000
	ld	(pencol),hl
	ld	hl,interval
	bcall _vputs

boucle:
	ld	hl,$0001
	ld	(currow),hl
	ld	hl,(numerau_essaye)
	ld	h,0
	bcall _disphl
	bcall _getkey


	ld	hl,numerau_essaye

	cp	3
	jp	z,haut
	cp	4
	jp	z,bas
	cp	5
	jp	z,entrer


	cp	9
	jp	nz,boucle
	ret	

haut:
	inc	(hl)
	jp	boucle

bas:
	dec	(hl)
	jp	boucle
entrer:
	bcall _clrlcdf
	ld	a,(n_essais)
	inc	a
	ld	(n_essais),a

	ld	hl,$0807
	ld	(currow),hl
	
	ld	l,a
	ld	h,0
	bcall _disphl

	ld	hl,numerau_essaye
	ld	a,(nombrecherche)
	cp	(hl)
	jp	z,victoire
	jp	p,plus

	ld	hl,$0F00
	ld	(pencol),hl
	ld	hl,moin
	bcall _vputs
	jp	boucle

victoire:
	ld	hl,$0302
	ld	(pencol),hl
	ld	hl,vict
	bcall _vputs
	bcall _getkey
	ret

plus:
	ld	hl,$0F00
	ld	(pencol),hl
	ld	hl,plu
	bcall _vputs
	jp	boucle



interval:
	.db"C'est entre 0 et 255",0
vict:
	.db"Victoire !!!",0
moin:
	.db"C'est moins!",0
plu:
	.db"C'est plus! ",0
.end


Sandro

PS1 : toute remarque est le bienvenue.

PS2 : quelcun saurrait-il où trouver une aide en français sur le débugueur ASM de Virtual TI?
Posté le 13/07/2011 à 19:21 Membre depuis le 03/06/2011, 520 messages
ATTENTION : ne sortais pas des bornes ( [0;255] ) : nombres affichés invalides (bug de résultat mais aucun "dommage")

Essaye:
jp z,victoire
jp c,plus

Il fonctionne très bien smile Est-ce que tu n'utilises pas Wabbitemu ? Je trouve que les débugueurs de PindurTI/Wabbitemu sont mieux. Si tu veux utiliser un de ces émulateurs je peux t'aider, je ne connais pas ce de Virtual TI. Qu'est-ce que tu veux faire ?
Posté le 14/07/2011 à 19:17 Membre depuis le 25/03/2011, 207 messages
Je voulait juste savoir son fonctionnement, étant donné que je n'y comprend rien.

Sandro

PS : quelcun aurrait-il une idée d'un autre programme s'il vous plaît?
PS2 : j'ai réussit résoudre le problème et à l'amméliorer encore un peu, mais je ne préfère pas le poster pour l'instant du fait que je vais peut-être m'en servir pour le concours d'Espace TI (vue qu'ils demandent un plus ou moins, autant bien en proffiter).
Posté le 14/07/2011 à 21:50 Membre depuis le 15/03/2005, 3470 messages
Déjà tu peux gagner quelques octets et t-states en faisant des appels au lieu des sauts lorsqu'il s'agit de routines (haut/bas/entrer/victoire/plus).

Puis juste pour la lisibilité du code et justement pour éviter de confondre plus/plu ça ne coûte rien d'un peu plus spécifier les noms de labels smile

Sinon le label "debut" n'est pas utile.

T'es sûr que ça bug lorsqu'on sort des bornes ?

Quant au debugger de VTI il te permet de voir le code exécuté (qui est un peu plus difficile à appréhender du fait que tu n'as pas les noms de labels et des rom calls, mais le fichier .lst compense un peu ça), l'état des registres et de la mémoire (éditable) ainsi que la pile et les variables de la TI. Tu peux aussi interagir avec l’exécution du programme en sautant à n'importe quelle adresse.

Mais bon perso je ne l'utilise que très peu puisqu'à part vérifier l’exécution de ton programme (ce que tu peux faire "à l’œil nu" avec le code source), il n'apporte pas grand chose.
Posté le 15/07/2011 à 09:18 Membre depuis le 25/03/2011, 207 messages
Merci beaucoup pour tes remarques, même si certaines ne me servent déjà plus du fait que j'ait amélioré le code (je peut pas poster cette version car je risque de m'en servir pour le concours d'espace TI (vu qu'ils demandent un "plus ou moins" ...), mais je suis en train d'essayer d'en faire un qui va jusqu'à 10 000, que je pourrais poster (le concours ne demande que d'aller jusqu'à 100).

Par contre, l'idée des appels au lieu des sauts est pas mal.

Pour les noms des labels, t'a raison, ça ne peu pas faire de mal.

Le label "début", je comptait m'en servir à un moment donné, mais finalement je n'en ai pas eut besoin mais j'ai oublié de la suprimer.

Por quand on sort des bornes, il n'y a aucun "bug" logiciel, mais les nombres affichés ne corrrespondent plus à ceux qui sont comparés au résultats (problème de retenue sans doute). (problème résolut dans la v2).

Merci beaucoup
Sandro
Posté le 16/07/2011 à 13:58Edité par sandro le 16/07/2011 à 22:08 Membre depuis le 25/03/2011, 207 messages
Bonjours,bonsoir,
voici la v2 du plus ou moins, elle fait 432 octés mais comporte plusieurs amméliorations:
- interval [1;10 000] au lieu de [0;255]
-suppréssion des problèmes de sortie des bornes (on arrive "de l'autre coté")
-possibilité de sauter de 20 en 20 avec les flèches gauche et droite (1 en 1 avec haut et bas)
-amélioration au niveau graphique

Voici les fichiers qui changent:
-le code (cf plus bas) : tromb Fichier joint : PLUSMOIN.z80
-le .83p : tromb Fichier joint : PLUSMOI2.83p
-le .8xp corrigé: tromb Fichier joint : PLUSMOI2.8xp

Voici le code :
	.nolist 
#include "ion.inc" 

#define	nombrecherche	saferam1
#define	n_essais	nombrecherche+2
#define	numerau_essaye	n_essais+1


	.list 
#ifdef TI83P 
	.org progstart-2 
	.db $BB,$6D 
#else 
	.org progstart 
#endif 
	ret 
	jr nc,start 
	.db "PLUSMOIN2",0 
 
start: 

	bcall _clrlcdf
	ld	b,28
	call	ionRandom
	ld	h,a
	ld	b,255
	call	ionRandom
	ld	l,a
	ld	(nombrecherche),hl
	ld	de,0
	bcall _cphlde
	jp	z,start
	ld	hl,(nombrecherche)
	ld	de,10000
	bcall _cphlde
	jp	p,start


	ld	hl,1
	ld	(numerau_essaye),hl
	ld	a,0
	ld	(n_essais),a


	ld	hl,$0000
	ld	(pencol),hl
	ld	hl,interval
	bcall _vputs

	ld	hl,$3802
	ld	(pencol),hl
	ld	hl,nombredecoups
	bcall _vputs
boucle:
	ld	hl,$0001
	ld	(currow),hl
	ld	hl,(numerau_essaye)
	bcall _disphl
	bcall _getkey


	dec	a
	call	z,droite
	dec	a
	call	z,gauche
	dec	a
	call	z,haut
	dec	a
	call	z,bas
	dec	a
	jp	z,entrer


	cp	4
	jp	nz,boucle
	ret	

droite:
	ld	hl,(numerau_essaye)
	ld	de,20
	add	hl,de
	ld	de,10001
	bcall _cphlde
	jp	m,droite_suite
	dec	de; de=10 000
	sbc	hl,de
droite_suite:
	ld	(numerau_essaye),hl
	ret


gauche:
	ld	hl,(numerau_essaye)
	ld	de,20
	or	a
	sbc	hl,de
	call	z,gauche0
	call	m,gauche0
	ld	(numerau_essaye),hl
	ret

gauche0:
	ld	de,10000
	add	hl,de
	ret


haut:
	ld	de,10000
	ld	hl,(numerau_essaye)
	bcall _cphlde
	call	z,haut10000

	ld	hl,numerau_essaye
	inc	(hl)
	ret


haut10000:
	ld	hl,1
	ld	(numerau_essaye),hl
	ret

bas:
	ld	hl,(numerau_essaye)
	dec	hl
	ld	de,0
	bcall _cphlde
	jp	nz,bas_suite
	ld	hl,10000
bas_suite:
	ld	(numerau_essaye),hl
	ret



entrer:
	ld	a,(n_essais)
	inc	a
	ld	(n_essais),a

	ld	hl,$0A07
	ld	(currow),hl
	
	ld	l,a
	ld	h,0
	bcall _disphl

	ld	hl,(numerau_essaye)
	ld	e,l
	ld	d,h
	ld	hl,(nombrecherche)
	bcall _cphlde
	jp	z,victoire
	jp	p,plus

	ld	hl,$0F00
	ld	(pencol),hl
	ld	hl,moin
	bcall _vputs
	jp	boucle

victoire:
	ld	hl,$0204
	ld	(currow),hl
	ld	hl,vict
	bcall _puts

	ld	hl,$0002
	ld	(currow),hl
	ld	hl,victeff
	bcall _puts
	bcall _getkey
	ret

plus:
	ld	hl,$0F00
	ld	(pencol),hl
	ld	hl,plu
	bcall _vputs
	jp	boucle




interval:
	.db"C'est entre 1 et 10 000",0
nombredecoups:
	.db"Nombre de coups :",0
vict:
	.db"Victoire !!!",0
victeff:
	.db"              ",0
moin:
	.db"C'est moins!",0
plu:
	.db"C'est plus!     ",0
.end


Sandro

PS1 : si vous voyez des optimisations, n'hésitez pas!

PS2 : pensez vous qu'il est intéréssant de rajouter un saut de 100 en 100 ou de 200 en 200 (place suplémentaire mais plus ergonomique)?

tromb Fichier joint : PLUSMOIN.z80tromb Fichier joint : PLUSMOI2.83ptromb Fichier joint : PLUSMOI2.8xptromb Fichier joint : PLUSMOIN.z80tromb Fichier joint : PLUSMOI2.83p

EDIT: correctiond'un bug pour le ***.8xp
Posté le 16/07/2011 à 15:10 Membre depuis le 03/06/2011, 520 messages
C'est très bien ! Je vois quelques petites optimisations, mais je te les explique plus tard. Pour le moment, un petit truc:
	cp	1 
	call	z,droite 
	cp	2 
	call	z,gauche 
	cp	3 
	call	z,haut 
	cp	4 
	call	z,bas 
	cp	5 
	jp	z,entrer 

a call z,bas dec a jp z,entrer
Tu peux aussi faire (plus petit/rapide):	dec a
	call	z,droite 
	dec a
	call	z,gauche 
	dec a 
	call	z,haut 
	dec
Posté le 16/07/2011 à 15:40 Membre depuis le 15/03/2005, 3470 messages
Oui un pas de 100 serais plus approprié je pense parce que là c'est un peu long grin

Sinon je ne sais pas pourquoi mais j'ai l'impression que la version 83+ bug, je l'ai essayée avec VTI et WabbitEmu et dans les 2 cas dès qu'on fait haut ou bas ça freeze...
Posté le 16/07/2011 à 20:08 Membre depuis le 25/03/2011, 207 messages
Merci beaucoup pour l'optimisation, par contre je ne comprend pas pourquoi la version pour TI83+ ne fonctionnerait pas comme il faut alors que ça marche nickel sur VTI avec la rom de ma TI82 stats.fr.

Sandro

PS : j'édite mon message d'audessus pour prévenir du risque.
Posté le 16/07/2011 à 20:53 Membre depuis le 15/03/2005, 3470 messages
Es-tu sûr de l'avoir bien compilé (dernière version ?), parce que si la version 83 marche y'a pas de raisons normalement.

Surtout que le freeze ne se déclenche que lorsqu'on utilise la touche haut...
Posté le 16/07/2011 à 21:33 Membre depuis le 25/03/2011, 207 messages
non, tout marche nickel avec le ***.83p, mais c'est vrai que mi aussi, ça a bugué sur Wabbit emu avec le ***.8xp même si je n'en voie aucune raison.

Je voici à nouveau le ***.83+ recompilé avec l'amélioration de chickendude et dont le .83p compillé en même temps marche inpeccablement : tromb Fichier joint : PLUSMOI2.8xp

Et pour si ça peut servir : tromb Fichier joint : ion.inctromb Fichier joint : compiler2.battromb Fichier joint : PLUSMOIN.z80tromb Fichier joint : PLUSMOI2.lsttromb Fichier joint : spasm.exetromb Fichier joint : PLUSMOI2.83p

Merci d'avance pour d'éventuelles explication à ce mystère
Sandro mur
Posté le 16/07/2011 à 21:43 Membre depuis le 15/03/2005, 3470 messages
Ah enfaite c'est tout simple : tu as mis "call _cphlde", ce qui est bon pour TI 83 mais pour 83+ ça doit être "bcall _cphlde" grin
Posté le 16/07/2011 à 21:59 Membre depuis le 25/03/2011, 207 messages
Merci beaucoup, je ne savais pas que ça changeait quelque chose pour le .8xp, je n'y ait donc pas fait particulièrement attention, je corrige et j'édite mon message précédant (avec l'ammélioration de chickendude).

Sandro