1

Salut tout le monde,

je commence è programmer en ASM avec CrASH 19.006 pour une TI-82. J'ai commencé à faire un programme de base mais je ne comprend rien de tout: le fonctionnment n'a pratiquement rien a voir avec ce que je lui ai demandé de faire. Y a-t-il quelqu'un qui pourrait m'aider ?
PS: j'essaye d'apprendre avec le tuturiel de Plouhinec.

2

faudrai plus préciser ton probleme si tu veux de l'aide....

3

En fait je veux faire un truc tout simple: faire un curseur qui clignote comme lorsque l'on est sur l'écran de calculs.
Merci de m'aider !!!

4

tout d'abord c'est tres bien, le tuto de marc est bien

ensuite, avant de faire quoi que ce soit, je te coneille de le lire en entier (sauf les dernieres lecons, superflues pour le moment)

il faut bien assimiler les notions de l'asm, surtout si c'est ta pemiere exprience en programmation 'bas niveau'

ensuite tu peux passer à al pratique

(euh bien sur ca c'est mon avis, mes conseils, tout le monde ne sera pas forcément d'accord)
-pacHa

5

J'ai tout lu. Ca fait 10 mois que je réfléchi (pour comprndre) et je pense avoir compris l'esprit de la proogramme en ASM.
Mais on peut toujours se tromper.
Je passe à la pratique mais je bloque!!

6

arf d'accord smile

alors explique ton pb, on va essayer de t'aider...
-pacHa

7

Voila ce que j'ai tapé comme code source:

#include "CRASH196.INC"
.ORG START_ADDR
.DB "HIDE",0

ROM_CALL(CLEARLCD)

Clignotant:
LD B,200
LD HL,0
LD (CURSOR_POS),HL
LD A,$D9
ROM_CALL(TX_CHARPUT)

Noir:
CALL (CR_KHAND)
CP K_PRGM
JR Executer
DJNZ Noir
LD B,200
ROM_CALL(CLEARLCD)

Blanc:
CALL (CR_KHAND)
CP K_PRGM
JR Executer
DJNZ Blanc
JR Clignotant

Executer:
RET

.END

Je pensait que ça allait faire clignoter le curseur mais en fait ça l'affiche et quand j'appui sur ENTER il revient au menu assembleur.

8

J'ai trouvé cet après-midi :idea: , (tout seul comme un grand smile ) cependant la fréquence du clignotement est trop élevée :cry: .
Voilà ce que j'ai fait:


#include "CRASH196.INC"
.ORG START_ADDR
.DB "HIDE By Ceasar",0

Clignotant:
ROM_CALL(CLEARLCD)
LD B,255

Noir:
LD HL,0
LD (CURSOR_POS),HL
LD A,$D9
ROM_CALL(TX_CHARPUT)
CALL GET_KEY
CP G_PRGM
JR Z,Executer
DJNZ Noir

Blanc:
LD HL,0
LD (CURSOR_POS),HL
LD A,$20
ROM_CALL(TX_CHARPUT)
CALL GET_KEY
CP G_PRGM
JR Z,Executer
DJNZ Blanc
JR Clignotant

Executer:
RET

Titre:
.DB "HIDE By Ceasar",0

.END

Y a-t-il moyen de faire plus court ?

9

c bien que t'es trouvé mais en meme temps fo pas trouvé au hasard...cherche pk ca marchait pas...essaye de comprendre parce que ca ne sert à rien les trucs au hasard...

10

jeé pa troouvé au pif mais il y a quelques truc que je pige pa
morque je remplace ça:
LD HL,0
LD (CURSOR_POS),HL
LD A,$20
ROM_CALL(TX_CHARPUT)
par
ROM-CALL(CLEARLCD)
plus rien ne marche
et lorsque je supprime le 2e LD B,255
ça marche mais je ne comprend pas pourquoi !
merci pour votre aide !

11

je programme pas sur 82 mais il me semble bien que c normal que ca marche pas parce que tu met pas le caractere qu'il va afficher...
en fait je vais essayer d'expliker ton code...jesper que je me trope pas

LD HL,0
LD (CURSOR_POS),HL ; met ligne=colonne=0
LD A,$20 ; ca doit surement etre le code ascii du caractere a afficher...
ROM_CALL(TX_CHARPUT) ;affiche le caractere
par
ROM-CALL(CLEARLCD) ; ca ca efface juste l'ecran donc c normal que ca fait rien...

le 2 "ld b,255" tu cree une boucle parce que comme l'assembleur est tro rapide, tu doit crer une boucle d'attente entre le noir et le blanc mais tas preferez affiché un certain nbre de fois...si tu cre pas la boucle ton curseur clignote mais clignote tro vite et la persistance retinien ne permet pas de distinguer le noir et le blanc donc pas de clignotement...

12

Je pense que je me suis mal fait comprendre:
[color=#0076ff:12b430033b]LD HL,0
LD (CURSOR_POS),HL ça sert à afficher un carré noir
LD A,$D9
ROM_CALL(TX_CHARPUT)
[/color:12b430033b]alors que:
[color=#0064ff:12b430033b]LD HL,0
LD (CURSOR_POS),HL ça sert à afficher un carré blanc
LD A,$20
ROM_CALL(TX_CHARPUT)
[/color:12b430033b]Le problème ce que c'est plus simple de faire:
[color=#005bff:12b430033b]ROM_CALL(CLEARLCD)
[/color:12b430033b]C'est plus court mais ça ne marche pas pourtant l'effet devrai être le même non?

Pour [color=#006dff:12b430033b]LD B,255 [/color:12b430033b]ça me sert pour la boucle: quand B est à zéro il change de boucle et donc de carré à afficher. Ma quetsion c'est: pourquoi le programme fonctionne même lorsque je ne remet pas le deuxième [color=#005bff:12b430033b]LD B,255 [/color:12b430033b]pour afficher le carré blanc ? Le programme devrai tomber dans une boucle infinie et n'afficher que le carré blanc !

13

oui tas raison le programme devait tombé dans un boucle infini parce que b sera tjrs != de 0...je suppose que b=0 a moment donné puisque meme si le nbre est negatif en décimal, l'assembleur peut le considérer comme un nombre signé donc positif donc nouvelle décrémentation...

bon je vais t'expliquer , j'esper ke je ne me trompe pas...

lorsque b=0, si une nouvelle décrémentation est fait, b= -1 or vu ke l'assembleur travaille en meme temps avec les nombres signé et non signé, bah "b" est aussi égale a 255...donc ta nouvelle décrémentation redémarre sans que tu ne remet pas "b" à 255...


euh j'espère que je ne me trompe pas...si c le cas merci de me corriger...

14

merci de m'aider!!
mais il y a un truc qui colle pas: il faut B=0 pour changer de boucle mais si b est négatif je ne voit pas comment il pourrai revenir à zéro. A moins que le programme ne prenne pas en compte le signe ! C'est la seule solution !
Et pour l'histoire du ROM_CALL(CLEARLCD) as tu des explications ?

15

non...le premier "djnz" fini kan b=0 normalement...puis le programme va a la deuxieme boucle
ensuite apres le 2eme "djnz", b=-1= 255 (non signé) or comme kom l'assembleur ne distingue pas les nombres signés des non signés ( enfin, je veu dire que c toi ki doit savoir dans kel mode tu travaille), la décrémentation reprend parce que b=255 (non signé)....

pour le romcall, efface l"ecran puis met une boucle entre la partie ki efface et la partie qui affiche le noir...

je précise que je ne suis pas sur...tas ka changer ton prog pour afficher la valeur de "b" apres le 2eme "djnz"...

16

je pense que je vais faire ce que tu m'as dit: je vais modifier mon programme pour comprendre de que j'ai fait. C'est quand même dingue de faire un programme qui marche et de pas comprendre pourquoi !
Comment je peux indiquer à l'assembleur si je me place en nombre signés ou non signés ?

17

pour les nombres signés ou pas c'est à toi de te débrouiller

par exemple pour stocker -1 dans a tu peux faire

ld a,-1

mais là ca sera exactemen pareil que

ld a,254

onc ensuite quand t'additionnes avec un registre de 8 bits tu ois ps la différence, a+255=a-1

tu vois ?
-pacHa

18

tu ne peux pas indiquer a l'assembleur si tu travaille avec des nombres signés ou pas...c'est à toi de le savoir...en vérité tout nombre positif peut etre négatif et inversement lorsque tu travaille avec des registres et l'orsque t'utilise pas la convention ( bit de poid fort est le signe )...mais losque t'utilise pas la convention, tu travaille avec des nombres signés et tu peux distinguer les nombres positif des negatifs grace au indicateur..

19

Merci les gars :bravo: ,

je comprends mieux maintenant ce qui se passe.

Il reste encore un truc que je n'arrive pas à comprendre avec l'histoire du ROM_CALL(CLEARLCD).

PS: comment vous avez fait pour connaitre tous ça sur l'assembleur ? Ca fait combien de temps que vous programmez en ASM ?

20

ca fait koi kan tu met " ROM_CALL(CLEARLCD). " a la place du blanc...décri un peu...ca affiche koi???

[quote:bb6540ad90="Ceasar"]PS: comment vous avez fait pour connaitre tous ça sur l'assembleur ? [/quote:bb6540ad90] moi je sais pas ou je lai su mai c surement pas en lisant des tutos...puisque jai lu que ASMGURU et c une transformation du basic en asm...
en faite si tu comprend bien les bases ( décimal , binaire...) je pense que tu peux deviner qu'on ne peux savoir si un nombre est positif ou négatif à moins qu'on te le disent...

par exemple -1 (décimal) = 11111111 ( binaire ) = 255 ( décimal ) ...c'est à toi de le considerer comme tu veux....
la seule maniere de distinguer clairement un nombre est d'utiliser la convention ( bit de poid fort= bit de signe ) et dans ce cas si le bit 7=1 (le nombre est négatif) et si le bit 7=0 ( le nombre est positif )...

[quote:bb6540ad90="ceasar"]Ca fait combien de temps que vous programmez en ASM ?[/quote:bb6540ad90] c'est pas une question de temps...c une question de bon documentation...mais généralement personne ne parle de ca pcq que c pas en prog sur ti qu'on l'apprend...on doit le savoir avant...

21

un truc qu'il faut absolument piger en asm, c'est que tout ce que tu ecris va être très fidelement présent dans l'executable produit
tu peux donc utiliser abusivment de 'hacks' et de self modifying code

ce n'est pas du tout comme les langages genre C qui sont réellement transformés lors de la compilation


sinon moi ca fait environ 1 an et demi que je programme en asm (enfin disons que je connais l'asm z80)

j'ai appris 'comme ca', en regardant des sources et essayant des trucs
enfin chacun sa tech' grin
-pacHa

22

[quote:e967f12783="pacha"]un truc qu'il faut absolument piger en asm, c'est que tout ce que tu ecris va être très fidelement présent dans l'executable produit
[/quote:e967f12783]ca depend si c des instructions ou des pseudo-instructions...
[quote:e967f12783="pacha"]j'ai appris 'comme ca', en regardant des sources et essayant des trucs
enfin chacun sa tech'[/quote:e967f12783]c la meilleur technique...enfin kelkun ki s'est réellement cassé la tete...mai tu comprenais ce que tu fesai ( lorsque t'apprenai de cette maniere) ?....


[quote:e967f12783="pacha"]ld a,-1 pareil que ld a,254 [/quote:e967f12783]tu tes trompé je crois...tas du appuyer sur le 4 au lieu de 5...

23

d'accors pour les pseudo instructions, masi je parlais pas des '#define', '.org' et divers equates...

au debut non je ne pigeais pas, faut dire avant je connaissais que le TI BASIC alors omprendre l'asm ca a été chaud au début

sinon pour le truc de -1 et 254 ca me semble bon
ata
1= %00000001
255 = %11111111
nan ?

donc 0=%00000000
et -1=%11111110=254

nan ?
-pacHa

24

Dans mon programme (voir plus haut) ce qui suit sert à afficher un carré blanc:
[color=#0048ff:e4454cd7e1][/color:e4454cd7e1]LD HL,0
LD (CURSOR_POS),HL
LD A,$20
ROM_CALL(TX_CHARPUT)
[color=#090000:e4454cd7e1][/color:e4454cd7e1]
Le problème ce que c'est plus simple de faire:
[color=#0051ff:e4454cd7e1][/color:e4454cd7e1]ROM_CALL(CLEARLCD)
[color=#000000:e4454cd7e1][/color:e4454cd7e1]C'est plus court mais ça ne marche pas pourtant l'effet devrai être le même non?

25

[quote:b398fe1577="pacha"]sinon pour le truc de -1 et 254 ca me semble bon
ata
1= %00000001
255 = %11111111
nan ?

donc 0=%00000000
et -1=%11111110=254

nan ?[/quote:b398fe1577]
tu te trompe pour la conversion je pense...a moins que ca soit moi mai je crois pas...

1=%00000001
on inverse les bits
%00000001 --> 11111110b
et maintenant on ajoute 1 au nombre...

%11111110
+ %00000001
--------------------
%11111111 ce qui est égal à 255 en décimal...si je ne me trompe...

[quote:b398fe1577="pacha"]au debut non je ne pigeais pas, faut dire avant je connaissais que le TI BASIC alors omprendre l'asm ca a été chaud au début
[/quote:b398fe1577]ah tu me rassure...
[quote:b398fe1577="pacha"]d'accors pour les pseudo instructions, masi je parlais pas des '#define', '.org' et divers equates...
[/quote:b398fe1577]ok...

26

[quote:ecff6868d4="ceasar"]Dans mon programme (voir plus haut) ce qui suit sert à afficher un carré blanc:
LD HL,0
LD (CURSOR_POS),HL
LD A,$20
ROM_CALL(TX_CHARPUT)

Le problème ce que c'est plus simple de faire:
ROM_CALL(CLEARLCD)
C'est plus court mais ça ne marche pas pourtant l'effet devrai être le même non?


[/quote:ecff6868d4]réaffiche le programme avec l'utilisation de efface ecran..parce que je ne vois pas pourquoi ca marche pas...