Logicielsmoto.com

Nous sommes le 08 Avr 2020, 07:04

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 192 messages ]  Aller à la page Précédente  1 ... 8, 9, 10, 11, 12, 13  Suivante
Auteur Message
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 20 Fév 2020, 16:06 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 211
merci pour ce retour,

Oui en effet y'a le vertical aussi, mais je cherche à mettre en place la bonne logique, ensuite je pourrais adapter et mettre tous ça dynamique.
Faut juste que je trouve le mécanisme, après je trouverais.

j'ai déjà ma routine d'affichage de sprite de taille dynamique qui fonctionne. C'est vrai j'ai pas pensé à la dupliquer pour la modifier !

ok, merci je vais étudier cela.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 21 Fév 2020, 19:40 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 211
Bonjour,

Bon je fais quelques pas en arrière pour résoudre un soucis sur la routine position (x,y) --> adresse écran (avec prise en charge de colonne ram A ou B) !!
et la routine d'affichage de sprite taille variable !!

- J'ai résolu l'adresse de début d'affichage (A,B --> adresse écran) : :bien:
- mais soucis sur l'affichage sur les coordonnées (2,6,10,14,etc..) :voyons:

Image
ps: bon je fais l'exercice sur le sprite de crazycars2 pour le fun !

Va me falloir quelques jours ! :voyons:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 21 Fév 2020, 22:14 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 211
Trop cool, ouf, j'ai résolu le soucis...
Déplacement tous les 2 pixels : OK
Image

Pour le déplacement tous les pixels, trop compliqué pour le moment pour moi !

je vais donc mettre à jour mes routines du pacman, car il est en déplacement tous les 4 px en x !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 22 Fév 2020, 00:49 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1206
Localisation: Brest
Il y a un truc possible tous les pixels: tu utilises 2 images. L'une est décalée de 1 pixel par rapport à l'autre. Avec le bon masque autour ca devrait marcher super.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 22 Fév 2020, 01:15 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 211
ha oui, bien !

Si je test la coordonnée de "x" après un LSRA, et que C = 1 alors j'affiche la version image du sprite décalé de 1 px (pour les coordonnées x impaire).

(je pensais un truc avec genre décaler de 4 bits les valeurs graphiques mais ça risque d'être lent !!)

faut que j'essaye !

Merci.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 25 Fév 2020, 15:11 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 211
bonjour,

Je bloque sur un problème, je sais pas comment l'aborder en assembleur !

Je dois écrire 2 petites routines d'affichage, "text" et "number"

1 - text
Comment récupérer le code ascii de chaque lettre d'un: FCC "mon texte ici"
(donc code ascii du "m", puis du "o", etc... de ma chaine de caractère)
OU 2eme solution serait de faire des FCB $xx,$xx,$xx où $xx serait les codes ascii de mes lettres directement , moins lisible mais plus rapide peut-être?

2 - number
Découper un nombre pour choper les codes ascii de chaque digit :
ex : LDX #15325 >>> get ascii de : 1, puis de 5, puis de 3 etc...

voila si quelqu'un à une technique, merci beaucoup!
sinon pour la conversion en fonte graphique je vois comment faire, pas de soucis pour l'affichage.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 25 Fév 2020, 18:41 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1206
Localisation: Brest
Pour le 1): FCC et FCB c'est pareil: FCC stocke les codes ASCII des lettres de la chaîne délimitée par ses deux marqueurs. Ainsi FCC "ABC" produit en mémoire 65,66,67 tout comme FCB 65,66,67 (65 = code ascii de A, 66 = de B, 67 = ascii de C). Chose importante en ASCII les chiffres sont consécutifs. Ainsi ASCII('0')=48, ASCII('1')=49 etc. Donc pour convertir une valeur numérique entre 0 et 9 en chiffres affichables il suffit d'ajouter 48 (ou '0).

Pour le 2) c'est un peu compliqué. La méthode scolaire est de faire des division par 10 et d'ajouter 48 (code ASCII de '0') au restes avant de les afficher en sens inverse.
Code:
  LDD  NUM    ; D=valeur a convertir
  LDY  #5     ; 5 chiffres maxi dans une valeur 16 bits
LOOP1
  LDX  #10    ; division par 10
  BSR  DIV    ; D=D/X X=reste de la division par 10
  PSHS X      ; sauve les restes successifs sur la pile
  LEAY -1,Y   ; décompte
  BNE  LOOP1  ; fini ? non => on reboucle

  LDY #5      ; 5 restes sur la pile à convertir
LOOP2
  PULS D      ; dépile le dernier reste
  ADDB #'0    ; conversion en chiffre
  JSR  PUTC   ; affichage du caractère contenu dans B
  LEAY -1,Y   ; décompte
  BNE LOOP2   ; fini ? non => on repart pour un tour
avec DIV la routine donnée par Préhisto ici qui divise D par X: viewtopic.php?p=1097#p1097

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 25 Fév 2020, 19:00 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 211
Top, merci
je vais faire des tests avec tout ça.
:good:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 26 Fév 2020, 16:56 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 211
:bien:

Par contre quelle gymnastique ce ram A ramB à chaque fois :hum:

Image

j'ai dû faire ce genre de test ! ça va être long pour les lettres !! a,b,c,...

Code:
...
*** if code ascii= then Y= adresse memoire graphisme ***
             LDA   codeAsciiChar
             CMPA  #$30
             BEQ   ddf1_seldig_0
             CMPA  #$31
             BEQ   ddf1_seldig_1
             CMPA  #$32
             BEQ   ddf1_seldig_2
             CMPA  #$33
             BEQ   ddf1_seldig_3
             CMPA  #$34
             BEQ   ddf1_seldig_4
             CMPA  #$35
             BEQ   ddf1_seldig_5
             CMPA  #$36
             BEQ   ddf1_seldig_6
             CMPA  #$37
             BEQ   ddf1_seldig_7
             CMPA  #$38
             BEQ   ddf1_seldig_8
             CMPA  #$39
             BEQ   ddf1_seldig_9
ddf1_seldig_0   LDY   #$B360          * adresse debut graphisme chiffre
                BRA   ddf1_lit
ddf1_seldig_1   LDY   #$B361
                BRA   ddf1_lit
ddf1_seldig_2   LDY   #$B362
                BRA   ddf1_lit
ddf1_seldig_3   LDY   #$B363
                BRA   ddf1_lit
ddf1_seldig_4   LDY   #$B364
                BRA   ddf1_lit
ddf1_seldig_5   LDY   #$B365
                BRA   ddf1_lit
ddf1_seldig_6   LDY   #$B366
                BRA   ddf1_lit
ddf1_seldig_7   LDY   #$B367
                BRA   ddf1_lit
ddf1_seldig_8   LDY   #$B368
                BRA   ddf1_lit
ddf1_seldig_9   LDY   #$B369
            BRA   ddf1_lit
...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 26 Fév 2020, 21:49 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1206
Localisation: Brest
Tu peux plus rapidement de faire un tableau qui contient tous les octets pour une lettre les unes à la suite des autres. Si le tableau démarre à la lettre '0' en TAB et que chaque lettre occuppe disons N octets, tu peux récupérer l'adresse de la lettre contenue dans A avec la formule TAB + (A-$30)*N qui se traduit facilement en ASM:
Code:
LDY  #TAB   ; Y pointe sur les N octets de la lettre '0'
SUBA #$30
LDB  #N
MUL         ; D = (A-$30)*N
LEAY D,Y    ; Y = TAB + (A-$30)*N

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 26 Fév 2020, 23:46 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 211
merci, oui je vais voir si je peux optimiser avec un tableau, pour piocher directement sans faire des CMP !

Sinon voila les routines affichages "number" intégrées au pacman ! :bien:

Image

ça commence petit à petit à ralentir tout ça lol. hoo juste un 2eme petit Mhz en plus :W


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 27 Fév 2020, 00:43 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1206
Localisation: Brest
Hum... c'est vrai que la conversion nombre binaire en décimal est couteuse (beaucoup de divisions). On peut être plus malin. :voyons: Au lieu de représenter le score comme un entier 16 bits on peut le représenter comme N octets en mémoire, ces N octets ayant des valeurs entre 0 et 9.

Pour convertir un tel nombre en ascii il suffit d'ajouter '0' ($30) aux octets en mémoire. C'est très facile et très rapide.

Très bien, ca facilitera l'affichage, mais comment qu'on fait de l'arithmétique avec ca? En fait on a qu'une seule opération à réaliser: l'addition de deux tels nombres. La routine suivante fait NB0 = NB1 + NB2
Code:
 
  LDA #5     ; 5 octets (chiffres) par nombre
  LDY #NB0   ; resultat
  LDX #NB1   ; 1er nombre
  LDU #NB2   ; 2e nombre
  BSR ADD_NB
  BSR PRINT_NB_Y
  ...
*================================================
* calcule nb(Y) = nb(X) + nb(U) avec A=N=nb de chiffres des nombres
ADD_NB
  PSHS  D
  LEAX A,X   ; ajuste X pour aller en fin de nombre
  LEAU A,U   ; idem pour U
  LEAY A,Y   ; idem pour Y
  CLR  CARRY ; effacement de la retenue
LOOP1
  LDB  ,-X   ; charge chiffre nb1
  ADDB ,-U   ; ajoute chiffre nb2
  ADDB CARRY ; ajoute retenue
  CLR  CARRY ; effacement retenue
  CMPB #10   ; chiffre du résultat plus grand que 10 ?
  BCS PAS_RETENUE ; non => on saute à la suite
  SUBB #10   ; OUI => on ramène entre 0 et 9
  INC  CARRY ; et on met la retenue à 1 pour le chiffre suivant
PAS_RETENUE
  STB ,-Y    ; on écrit le chiffre du résultat dans nb0
  DECA       ; décompte
  BNE LOOP1  ; pas fini ? => on reboucle pour un nouveau chiffre (octet)
  PULS D,PC
*================================================
* affiche nb(Y) par la routine PUTC du moniteur
PRINT_NB_Y
  PSHS D,Y
LOOP2
  LDB ,Y+    ; charge chiffre 0 à 9
  ADDB #$30  ; converti en ascii
  JSR  $E803 ; PUTC affiche le chiffre ascii '0' à '9'
  DECA       ; décompte chiffres restants
  BNE  LOOP2 ; pas fini? => c'est reparti pour un nouveau chiffre à afficher.
  PULS D,Y,PC
*================================================ 
CARRY
  FCB 0           ; retenue
NB0
  FCB 0,0,0,0,0   ; 0
NB1
  FCB 1,2,3,4,5   ; 12345
NB2
  FCB 0,0,1,6,5   ;   165
NB3
  FCB 9,9,9,9,9   ; -1

Ce code est donnée en exemple et peut être rendu à la fois plus petit et plus rapide. Mais je pense que ca nuirait à la compréhension de son fonctionnement. En fait il réalise l'addition exactement comme on l'a apprise à l'école, chiffre par chiffre, en commençant par la droite (LEA du début). Je te laisse expérimenter avec lui. Tu va voir c'est rigolo cette arithmétique chiffre par chiffre (et en plus c'est super facile à convertir en ASCII du coup, cf la routine PRINT_NB_Y qui affiche nb(Y)).

Heu ajouter c'est bien ... mais comment je fais décroître le score alors? Et bien c'est facile tu ajoutes 10000-N si tu veux soustraire N. Par exemple soustraire 1 revient à ajouter 9,9,9,9,9 (NB3 plus haut). Soustraire 2 revient à ajouter 9,9,9,9,8... c'est facile! C'est ce qu'on appelle de l'arithmétique complément à 9 + 1. Pour trouver l'opposé additif d'un nombre on fait "chiffre <- 9-chiffre" et on ajoute l'entier 1 au nombre dont les chiffres viennent d'être inversés.

A noter: Le complément à 2 du binaire est en fait un complément à 1 + 1 (=2): on remplace tous les bits (chiffres) "b" par leur opposé: "1-b" et on ajoute 1 au résultat. Tout cela marche sur le même principe général.

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 27 Fév 2020, 09:11, édité 5 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 27 Fév 2020, 01:12 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 211
ouula oui attend laisse moi relire ça :langue:

merci :voyons:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 06 Mar 2020, 02:42 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 211
salut,

J'aurais besoin d'aide pour gagner du temp SVP.

Y'a t-il un savant qui voudrait bien me décoder en ASM cette suite que voilà ?
C'est le début d'un fichier binaire.

Code:
00 00 01 e7 c3 65 00 1f 80 a0 00


Merci.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Debut en asm sur TO8
MessagePosté: 06 Mar 2020, 08:32 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1206
Localisation: Brest
Le format BIN se décompose en blocs. Chaque bloc a un type indiqué par son 1er octet ($00=code, $FF=fin code), suivit par sa longueur (16bits), puis par une adresse (16bits) et par ses données. Voyons ce que ca donne dans ton cas:
Code:
00    ==> bloc binaire
00 01 ==> de 1 octet
e7 c3 ==> à charger à partir de $E7C3
65    ==> on écrit donc $65 en $E7C3
00    ==> nouveau bloc binaire
1f 80 ==> de longueur $1F80=8000
a0 00 ==> à charger en $A000
.. .. ==> 8000 octets à suivre

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 192 messages ]  Aller à la page Précédente  1 ... 8, 9, 10, 11, 12, 13  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com