90

91

La routine ./81 modifie le zero flag donc quand tu fais :

	bcallnz _vputs
	call nz,getkey
	call nz,bell_sync
	ret nz

C'est pas bon (en plus je ne suis pas sûr que _vputs n'en fait pas autant).

Autrement je suis à peu près sûr que certaines autres rom calls sont aussi responsables de tout ces bugs : quand tu enlèves le "bcall _clrlcdfull" ligne 79, ça bug déjà beaucoup moins...

92

Certes, cette routine modifie zéro, mais on est forcément à nz quand on en sort (jp z,getkey), et comme ici on y rentre que si nz ça va parfaitement.
Pour _vputs ça ne le modifie pas par contre

Pour le _clrlcdfull l79, je l'ai mis juste pour voir si ça bugue avant ou après bell_connect
Je vais essayer de voir si je peux recoder certaines rom call (sauf des trucs comme l'affichage de tete cheeky

93

À la place de "bcall _copygbuf" il vaut mieux faire "call ionFastCopy", et tu peux remplacer "bcall _cleargbuf" par :

cleargbuf:
	ld hl,gbuf
	ld de,gbuf+1
	ld (hl),0
	ld bc,767
	ldir
	ret

94

Comme il n'y a apparemment que bell_sync qui gène, je me suis dit que je n'ai qu'à le remplacer par autre chose, mais ce que j'ai fait fait buguer l'émulateur... mourn
Comme c'était pour savoir si on commence à droite ou à gauche, j'ai mis:
	call bell_connect
	ret nz
	bcall _cleargbuf
	call ionFastCopy
DEFINE_PLACE:
	ld b,$FF
	call ionRandom
	ld hl,my_x
	ld (hl),a
	ld de,my_y
	ld b,1
	call bell_swapBlock
	ret nz
	ld a,(my_x)
	ld b,a
	ld a,(my_y)
	cp a
	jr z,DEFINE_PLACE
	jp m,DEFINE_PLACE2
	ld a,1
	jr DEFINE_PLACE3
DEFINE_PLACE2:
	xor a
DEFINE_PLACE3:
	ld (SAVE_NUM),a

Ca marche tout seul, mais pas dans le jeu, je pige pas...

95

C'est pas "cp b" plutôt que "cp a" (parce que dans tous les cas a=a) ?

Sinon y'a moyen d'optimiser un peu :
	call bell_connect
	ret nz
	call cleargbuf
	call ionFastCopy

DEFINE_PLACE:
	ld b,$FF
	call ionRandom
	ld hl,my_x
	ld (hl),a
	ld de,my_y
	ld b,1
	call bell_swapBlock
	ret nz
	ld a,(my_x)
	ld b,a
	ld a,(my_y)
	cp b
	jr z,DEFINE_PLACE
	ld a,0 ; (ne modifie pas les flags comme 'xor a')
	call m,DEFINE_PLACE2
	ld (SAVE_NUM),a
	[...]

DEFINE_PLACE2:
	inc a
	ret

cleargbuf:
	ld hl,gbuf
	ld de,gbuf+1
	ld (hl),0
	ld bc,767
	ldir
	ret

96

Si, c'est bien cp b (je l'avais modifié pourtant, je ne comprends pas comment ça s'est rechangé cheeky )
Ca marche impec sur émulateur (j'espère que ça sera pareil on-calc ^^)
Il y a juste un truc que je ne comprends pas dans ton code:
Pour bell_swapBlock, hl doit pointer l'adresse de départ du bloc, et je ne vois pas où est ce que ça le fait...

97

Ah oui j'ai pas fait attention aux paramètres de la routine, je modifie ça.

98

Coucou!
J'ai testé sur des caltos, et ça marche grin , à quelques détails près:
Quelques fois, le jeu quitte sans raisons, et sans passer par l'affichage du score, je me demande si il n'y a pas un pb avec la transmission de données via le câble, quoique ça m'étonnerais vu que pour transférer des prgm, il fonctionne...
Et au fait: celui qui a écris le texte que tu as cité sur getkey et le port 0 n'est autre que l'auteur de bell !

99

Oui à ce que j'ai vu il a pas mal étudié les liaisons entre TI (y'a même des vidéos youtube il me semble) smile

Par contre ces bugs étranges c'est pas rassurant, moi qui voulais tenter d'ajouter un mode multi pour un de mes projets... Et pour finir, la routine "bell_sync" bug ou pas ? J'veux dire, dans ton programme en théorie elle était bien utilisée (seule façons "propre" de connaitre l'ordre de connexion)...

100

Oui à priori c etait bell_sync qui buguait...
maintenant ca marche à peu près meme si ca quitte inexplicablement certaines fois

101

Bon ben la connexion entre 2 caltos est un échec monumental sad
Beaucoup de bugs (déconnexion inexplicable, mem effacées...), bref un vrai fiasco mourn

102

C'est vrai ? sad

Tu devrais en parler à l'auteur parce que c'est dommage, ça semblait être la meilleure lib' pour le link...

Autrement y'a d'autres routines (en anglais, comme celle là).

103

Ok, merci je vais voir.
Je vais aussi en parler à l'auteur, mais le problème c'est que mon anglais... bref, on a vu mieux tongue

EDIT: est ce que quelqu'un aurait un lien vers un jeu 2 caltos, que je puisse tester si c'est une erreur d'utilisation de la librairie (mais à priori non), ou s'il y a un pb avec le port 0 (peut être sur ma calto) ?

104

Y'en a plusieurs (mais aucun utilisant bell, par contre tu peux tester le programme test posté un peu plus haut : ./26) :

http://www.ticalc.org/archives/files/fileinfo/141/14177.html
http://www.ticalc.org/archives/files/fileinfo/196/19620.html
etc...

105

Le programme de test marchera sûrement (en fait, mon jeu fonctionne, mais peu de temps: entre 2 et 10 secondes environ).
Merci pour les autres jeux, je regarderai Lundi si ils marchent.
Si oui, je n'aurais plus qu'à me lancer dans le code de bell pour voir qu'est ce qui pourrais induire un ram cleared... ça sera pas de la tarte ^^
J'oubliais: une fois, j'ai eut, pendant le jeu, un message comme celui ci:
"ERR: TYPE DONNEE
1:Quitter"

106

Ouais mais quand un jeu ASM bug ça peut te sortir tout et n'importe quoi comme erreur (ça ne veut rien dire).

107

C est ce que je me suis dit la premiere fois, mais ca me l a fait 2fois (et j ai eut que ce type d erreur) donc je me suis dit que ca pouvais etre une piste...

108

Je voudrais faire une nouvelle version de bomberkids grin Malheureusement je crois que BomberKids ne contient pas de source (je n'ai jamais compris ça (edit: pourquoi on n'inclut pas le source à son jeu)). mathieu41, je peux t'aider aussi à faire des traductions à l'anglais si tu veux wink

109

C'est vrai qu'une version un peu plus développée de bomberman ça manque cruellement sur TI z80. Avec des cartes immenses (scrolling), plus de bonus et de structures (balances, téléporteurs), ce serait énorme grin

110

chickendude (./108) :
mathieu41, je peux t'aider aussi à faire des traductions à l'anglais si tu veux wink

Merci à toi wink
Pour l'instant, j'attends une réponse de l'auteur ^^

111

Erf en déboguant mon propre code je me suis rendu compte qu'il faut se méfier des rom calls _setxxop1 et _dispop1a (du moins pour s'en servir comme un "_vdispA" sorry) :

_vdispa:
	bcall _setxxop1
	ld a,3 ; (ou plus)
	bjump _dispop1a

Apparemment il faut mettre le nombre de "digits" à afficher dans l'accumulateur avant d'appeler _dispop1a (ce qui est débile, il ne peut y en avoir que 3 au maximum de toute façons, non ?), sinon il est possible de tout faire bugger ( cf http://www.cemetech.net/projects/uti/viewtopic.php?p=129413#129413 ), et en plus de ça d'après mes tests ces rom calls buggent de toute façons sur certaines ROM (notamment TI 84+ 2.41 et supérieures)... Ou alors je m'y prend mal (mais bon elle n'est pas documentée sur le wikiti...) :/

D'autres avis (chickendude, contra) ?

Autrement il y a une autre version tirée de Bubble Bobble (de Dwedit), peut être pas plus optimisée mais plus sûre :

_vdispa:
	ld h,0
	ld l,a

_vdisphl:
	push de
	push hl
	ld de,op1+5
	xor a
	ld (de),a

_vdisphl_loop:
	bcall _divhlby10
	add a,'0'
	dec de
	ld (de),a
	ld a,h
	or l
	jr nz,_vdisphl_loop
	ex de,hl
	bcall _vputs
	pop hl
	pop de
	ret

D'ailleurs je viens de me rendre compte qu'il y a du link dans ce jeu, ça vaudrait peut être le coup d’œil...

edit : Autrement quelqu'un sait pourquoi "bjump _vputmap" bug complètement ? Ça m'a pris la tête pendant 30min sorry

112

Est-ce que tu mets bien les coordonnées dans pencol et penrow ?

Le sdk ti dit :
DispOP1A
Category: Display
Description: Displays a floating-point number using either small variable width or large
5x7 font. The value is rounded to the current “fix” setting (on the mode
screen) before it is displayed.
Inputs:
Registers: ACC = maximum number of digits to format for displaying
Flags: textInverse, (IY + textFlags) = 1 for reverse video
textEraseBelow, (IY + textFlags) = 1 to erase line below character
textWrite, (IY + sGrFlags) = 1 to write to graph buffer not display
fracDrawLFont, (IY + fontFlags) = 1 to use large font, not small font
Others: (penCol) = pen column to display at
(penRow) = pen row to display at
Outputs:
Registers: None
Flags: None
Others: None
Registers All
destroyed:
RAM used: OP1, OP2, OP3, OP4
Remarks: Displaying stops if the right edge of the screen is reached.


Je n'en sais pas plus wink

Bon courage Matthieu41 pour ton jeu, c'est déjà très bien bravo wink

113

Je vais chercher plus à fond plus tard, mais je crois que si tu fais un "bjump" au lieu de "bcall", l'éxécution du code ne va pas rentrer chez ton programme, non ? Pourquoi n'utilises-tu pas "bcall _dispop1a" ? bjump ne garde pas le port où est ton programme, donc quand on retourne du bcall, la nouvelle page de FLASH est toujours là.

114

Oui les coordonnées sont correctes.

Le "bjump" à la place du "bcall" c'est pour optimiser lorsqu'il y a un "ret" juste après. Dans certains cas ça marche mais c'est vrai que c'est pas tout à fait comme un simple "jp" :

#define bjump call 50h \ .dw
D'ailleurs je ne vois pas trop ce que fait ce code cheeky

115

J'ai trouvé quelque chose sur United-TI (maintenant sur Cemetech): http://www.cemetech.net/projects/uti/viewtopic.php?t=8497&start=20
14) B_JUMP is to B_CALL as jp is to call... sort of. A better question would be "what's a B_CALL?" When you perform a B_CALL or B_JUMP, the OS uses the address provided to look up the absolute address (a 16-bit logical address, X, plus an 8-bit page number, Y) for the routine you're looking for. To "jump", then, simply means to output Y to port 6 and jump to X. To "call", however, means that we have to return to the same place we started. That means we have to save the current port-6 value (let's call it Z) on the stack, output Y to port 6, call X, pop Z off the stack, output Z to port 6, and return to the address following the B_CALL.

In practical terms, modern structured programming conventions mean that you will almost never need or want to use B_JUMP; B_CALL is far more useful. That's why the B_CALL macro is implemented with an RST, so each B_CALL takes only three bytes, while each B_JUMP takes five.
Bcall est tout de même plus rapide est plus petit :P

116

Oui vu comme ça, ça n'est finalement pas si optimisé que ça smile

Merci !

117

Coucou!
Ca fait un petit moment que je n'ai pas pu me connecter,
@deeph" _dispop1a" est une romcall faite pour afficher un flottant, donc pouvant aller jusqu'à 14 chiffre, donc quand il y a des virgules, c'est pratique de pouvoir donner la précision de l'affichage avec a

J'ai peut-être trouvé un pb en lisant le code d'une routine de bell, qui expliquerait les ram cleared et que le jeu quitte sans raison:

(Au passage, j'ai remarqué que la routine que j'ai créé pour savoir où on commence est inutile: quand on utilise bell_connect, ça appelle bell_sync, et le numéro de la calto (0 ou 1) est stocké dans bell_calcId, il suffit donc de faire ld a,(bell_calcId) ) wink

Voici la routine qui me pose pb:
bell_swapByte:
	; Store data to be sent (a=registre à envoyer)
	push af
	; Should we send first or receive first?
	ld a,(bell_calcId)
	or a
	jp z,_bell_sendFirst

_bell_recvFirst:
	; Receive data
	call bell_recvByte
	; Exit on receive error
	ret nz                            ;<- 1.S'il y a eut une erreur, on ret, mais sans pop avant...
	; Store the received byte
	ld b,a
	; Get the byte to send
	pop af
	; Store the received byte even safer
	push bc
	; Send data
	call bell_sendByte
	; Retrieve the stored data
	pop af
	ret                                ;<- 2.Le code est censé renvoyer z s'il a réussi...

_bell_sendFirst:
	; Get the byte to send
	pop af
	; Send data
	call bell_sendByte
	; Exit on send error
	ret nz                           ;<-Là c'est ok
	; Receive data
	call bell_recvByte
	ret                                ;Là aussi 

Je vais modifier la première partie, et je vous tiens au courant

Voici ma petite correc': (non testée)
bell_swapByte:
	; Store data to be sent
	ld (bell_swapByte_save_a),a
	ld (bell_swapByte_save_a_3),a
	; Should we send first or receive first?
	ld a,(bell_calcId)
	or a
	jp z,_bell_sendFirst

_bell_recvFirst:
	; Receive data
	call bell_recvByte
	; Exit on receive error
	ret nz
	; Store the received byte
	ld (bell_swapByte_save_a_2),a
	; Get the byte to send
bell_swapByte_save_a = $+1
        ld a,0
	; Send data
	call bell_sendByte
	; Retrieve the stored data
bell_swapByte_save_a_2 = $+1
        ld a,0
	ret

_bell_sendFirst:
	; Get the byte to send
bell_swapByte_save_a_3 = $+1
	ld a,0
	; Send data
	call bell_sendByte
	; Exit on send error
	ret nz
	; Receive data
	call bell_recvByte
	ret

J'ai testé sur l'ému et tout m'a l'air correct (ces derniers, temps, ça c'est carrément mis à bugguer sur l'ému, donc j'espère que c'est bon signe smile )
Contra (./112) :
Bon courage Matthieu41 pour ton jeu, c'est déjà très bien bravo wink

Merci! smile

118

mathieu41 (./117) :
" _dispop1a" est une romcall faite pour afficher un flottant, donc pouvant aller jusqu'à 14 chiffre, donc quand il y a des virgules, c'est pratique de pouvoir donner la précision de l'affichage avec a

Oui en lisant le sdk ça a tout de suite plus de sens. Du coup vérifie bien que a > 2 (au minimum), si c'est pour afficher des scores, autrement ça peut expliquer certains "ram clear".
mathieu41 (./117) :
(Au passage, j'ai remarqué que la routine que j'ai créé pour savoir où on commence est inutile: quand on utilise bell_connect, ça appelle bell_sync, et le numéro de la calto (0 ou 1) est stocké dans bell_calcId, il suffit donc de faire ld a,(bell_calcId) ) wink.gif

C'est ce qui me semblais mais c'était pas indiqué dans la doc.

Pour ta routine, pourquoi ne pas simplement faire :

bell_swapByte:
	push af
	ld a,(bell_calcId)
	or a
	jp z,_bell_sendFirst

_bell_recvFirst:
	call bell_recvByte
	jp nz,_bell_recvFirst_skip	; on vide la pile avant de quitter
	ld b,a
	pop af
	push bc
	call bell_sendByte

_bell_recvFirst_skip:
	pop af
	ret

_bell_sendFirst:
	pop af
	call bell_sendByte
	ret nz
	jp bell_recvByte	; petite optimisation

119

	push bc 
	call bell_sendByte 
 
_bell_recvFirst_skip: 
	pop af 

Ce passage ne va pas (à moins que je ne me trompe, il modifie f, du coup on peut aussi bien avoir z que nz, or, il faut nz si ça a échoué, et z si ça a marché...
EDIT:
deeph (./118) :
Oui en lisant le sdk ça a tout de suite plus de sens. Du coup vérifie bien que a > 2 (au minimum), si c'est pour afficher des scores, autrement ça peut expliquer certains "ram clear".

Pour moi c'est du chinois, je n'ai même pas cherché à lire cheeky
(Mais c'est ce que dit le cours sur le sdz... qui lui, a la gentillesse d'être en français wink )

120

[fail]J'ai loupé l'édit, désolé[/fail]