Logicielsmoto.com

Nous sommes le 19 Mar 2024, 04:26

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 53 messages ]  Aller à la page Précédente  1, 2, 3, 4  Suivante
Auteur Message
MessagePosté: 11 Avr 2019, 17:59 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
pour prouver que la méthode marche il faut aussi avoir un branchement court en avant et un en arrière dans le meme cas de test non? (idéalement il faudrait même formellement vérifier que toutes les variables évaluées sont correctes, ce qu'on doit pouvoir faire dans c6809, dans la cartouche asm c'est plus sportif)

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 16 Avr 2019, 14:46 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
En lisant une doc d'un autre assembleur 6809, j'ai vu qu'il y avait un IF de plus, à savoir IFP1 (et en fait aussi IFP2). Le contenu de ce If n'est évalué que pendant la passe 1 (la phase de macro-expansion). Avec ce type de IF, on pourrait peut-être se débrouiller dans le cas actuel. Y aurait-il une façon d'émuler cela avec c6809 ? (style une construction du macro processeur qui permette à une variable de valoir 0 en 1ere passe et autre chose sinon.)

Autre truc assez pratique: dans certains assembleurs 6809 on peut ajouter NOEXPAND à la définition d'une macro. Cela a l'effet de masquer son expansion dans les lignes du fichier généré équivalent au "codes.lst" produit. Pour moi qui utilise pas mal les macro instructions, c'est vrai que d'avoir NEGD (la macro) au lieu de 3 lignes avec NEGA NEGB SBCA#0 (la version expandée de NEGD) rendrait le fichier codes.lst plus lisible.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 16 Avr 2019, 16:47 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
Samuel Devulder a écrit:
En lisant une doc d'un autre assembleur 6809, j'ai vu qu'il y avait un IF de plus, à savoir IFP1 (et en fait aussi IFP2). Le contenu de ce If n'est évalué que pendant la passe 1 (la phase de macro-expansion). Avec ce type de IF, on pourrait peut-être se débrouiller dans le cas actuel. Y aurait-il une façon d'émuler cela avec c6809 ? (style une construction du macro processeur qui permette à une variable de valoir 0 en 1ere passe et autre chose sinon.).

Oui oui je suis dessus, et effectivement, il doit y avoir quelque chose comme ça :)
J'ai déjà dû revoir toute ma routine pour l'enregistrement des symboles, et la faire réagir au plus proche de MACROASSEMBLER.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 16 Avr 2019, 17:22 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
En fait, il y a même des petites astuces. Par exemple, pour les SET et EQU, l'opérande est évaluée avant le label, et le label ne sera enregistré dans la table des symboles que si l'opérande a pu être définie (donc si elle ne comporte que des éléments qui ont pu être définis) ou qu'il s'agit de la dernière passe.

Par exemple.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 17 Avr 2019, 22:27 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
Pour tout dire, MACROASSEMBLER a quand même ses limites. Quand on fait par exemple:

Code:
Z5     EQU    Z4
Z4     EQU    Z3
Z3     EQU    Z2
Z2     EQU    Z1
Z1     EQU    Z0
Z0     EQU    12


seuls Z1 et Z0 seront définis.
Pour bien faire, il faudrait autant de passes que de EQU non encore définis.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 17 Avr 2019, 23:15 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
En effet. Avec des SET il n'y a pas ce problème je suppose ? (le SET faisant toujours référence aux dernières valeurs)

Pour tout dire j'utilise (massivement) ce style de construction avec mon dernier jeu de macros:
Code:
* define a stack       
DOSTCK  MACRO
DO9\0   set     0
DO8\0   set     0
DO7\0   set     0
DO6\0   set     0
DO5\0   set     0
DO4\0   set     0
DO3\0   set     0
DO2\0   set     0
DO1\0   set     0
DO0\0   set     0
        ENDM

* default stack     
        DOSTCK

* push value on to a stack
DOPUSH  MACRO
        IFNE    DO9\1
STACK OVERFLOW
        ENDC
DO9\1   set     DO8\1
DO8\1   set     DO7\1
DO7\1   set     DO6\1
DO6\1   set     DO5\1
DO5\1   set     DO4\1
DO4\1   set     DO3\1
DO3\1   set     DO2\1
DO2\1   set     DO1\1
DO1\1   set     \0
        ENDM

* pop value out of a stack
DOPOP   MACRO
        IFEQ    DO1\1
STACK UNDERFLOW
        ENDC
DO1\1   set     DO2\1
DO2\1   set     DO3\1
DO3\1   set     DO4\1
DO4\1   set     DO5\1
DO5\1   set     DO6\1
DO6\1   set     DO7\1
DO7\1   set     DO8\1
DO8\1   set     DO9\1
DO9\1   set     0
        ENDM
(j'en dirais plus à ce sujet plus tard, mais pour teaser je dirais que cela me permet de faire des trucs tout nouveaux qui m'amusent beaucoup.)

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 18 Avr 2019, 06:48 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
Samuel Devulder a écrit:
En effet. Avec des SET il n'y a pas ce problème je suppose ? (le SET faisant toujours référence aux dernières valeurs)

Même avec des SET, le problème est le même.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 30 Avr 2019, 14:09 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
Voici ci-joint des petites modifs que je me suis faite sur C6809 0.83 pour le rendre plus agréable à utiliser.

  1. Ajout d'un argument optionnel lors une déclaration de macro: QUIET. Quand il est présent, le fichier code.lst ne contient au niveau de l'expansion de cette macro que les lignes dont le "PC" avance. Ca permet de nettoyer ce fichier de milliers de lignes de directives IF/ELSE/SET/ENDC dont on sait qu'elle ne servent à rien pour l'utilisateur final dans cette macro. Exemple pour
    Code:
    fptst
      lda   ,u        ; get expo
      lsla            ; move sign-bit off
      DOIF  ne        ; f==0 ?
        rora          ; no => put sign back
      DONE
      rts             ; done
    avec des macros sans QUIET:
    Code:
        537        90BE               fptst
        538  4+0   90BE A6   C4         lda   ,u        ; get expo
        539  2     90C0 48              lsla            ; move sign-bit off
        216                  0008     DO0     set     DO0+1
        125                                   IFNE    DO9
        126                           STACK OVERFLOW
        127                                   ENDC
        128                  0000     DO9   set     DO8
        129                  0000     DO8   set     DO7
        130                  0000     DO7   set     DO6
        131                  0000     DO6   set     DO5
        132                  0000     DO5   set     DO4
        133                  0000     DO4   set     DO3
        134                  0000     DO3   set     DO2
        135                  0000     DO2   set     DO1
        136                  0008     DO1   set     DO0
        158                               IF  DO1
        159                                   IFEQ    (DO1&7)-0
        158                               IF  (DO1<-3)
        159                                   IFEQ    ((DO1<-3)&7)-0
        160                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        161                                   ENDC
        162                                   IFEQ    ((DO1<-3)&7)-1
        158                               IF  ((DO1<-3)<-3)
        159                                   IFEQ    (((DO1<-3)<-3)&7)-0
        160                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        161                                   ENDC
        162                                   IFEQ    (((DO1<-3)<-3)&7)-1
        163                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        164                                   ENDC
        165                                   IFEQ    (((DO1<-3)<-3)&7)-2
        166                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        167                                   ENDC
        168                                   IFEQ    (((DO1<-3)<-3)&7)-3
        169                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        170                                   ENDC
        171                                   IFEQ    (((DO1<-3)<-3)&7)-4
        172                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        173                                   ENDC
        174                                   IFEQ    (((DO1<-3)<-3)&7)-5
        175                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        176                                   ENDC
        177                                   IFEQ    (((DO1<-3)<-3)&7)-6
        178                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        179                                   ENDC
        180                                   IFEQ    (((DO1<-3)<-3)&7)-7
        181                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        182                                   ENDC
        183                               ELSE
        195                  90C1     DOENT01 set *
        185                               ENDC
        164                                   ENDC
        165                                   IFEQ    ((DO1<-3)&7)-2
        166                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        167                                   ENDC
        168                                   IFEQ    ((DO1<-3)&7)-3
        169                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        170                                   ENDC
        171                                   IFEQ    ((DO1<-3)&7)-4
        172                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        173                                   ENDC
        174                                   IFEQ    ((DO1<-3)&7)-5
        175                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        176                                   ENDC
        177                                   IFEQ    ((DO1<-3)&7)-6
        178                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        179                                   ENDC
        180                                   IFEQ    ((DO1<-3)&7)-7
        181                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        182                                   ENDC
        183                               ELSE
        184                                   DOSET2      *,DOENT0
        185                               ENDC
        161                                   ENDC
        162                                   IFEQ    (DO1&7)-1
        163                                   DOGEN   (DO1<-3),DOSET2,*,DOENT1
        164                                   ENDC
        165                                   IFEQ    (DO1&7)-2
        166                                   DOGEN   (DO1<-3),DOSET2,*,DOENT2
        167                                   ENDC
        168                                   IFEQ    (DO1&7)-3
        169                                   DOGEN   (DO1<-3),DOSET2,*,DOENT3
        170                                   ENDC
        171                                   IFEQ    (DO1&7)-4
        172                                   DOGEN   (DO1<-3),DOSET2,*,DOENT4
        173                                   ENDC
        174                                   IFEQ    (DO1&7)-5
        175                                   DOGEN   (DO1<-3),DOSET2,*,DOENT5
        176                                   ENDC
        177                                   IFEQ    (DO1&7)-6
        178                                   DOGEN   (DO1<-3),DOSET2,*,DOENT6
        179                                   ENDC
        180                                   IFEQ    (DO1&7)-7
        181                                   DOGEN   (DO1<-3),DOSET2,*,DOENT7
        182                                   ENDC
        183                               ELSE
        184                                   DOSET2      *,DOENT
        185                               ENDC
        200                                   IF      DO1
        158                               IF  DO1
        159                                   IFEQ    (DO1&7)-0
        158                               IF  (DO1<-3)
        159                                   IFEQ    ((DO1<-3)&7)-0
        160                                   DOGEN   ((DO1<-3)<-3),DOSET1,EXIT>>
        161                                   ENDC
        162                                   IFEQ    ((DO1<-3)&7)-1
        158                               IF  ((DO1<-3)<-3)
        159                                   IFEQ    (((DO1<-3)<-3)&7)-0
        160                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        161                                   ENDC
        162                                   IFEQ    (((DO1<-3)<-3)&7)-1
        163                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        164                                   ENDC
        165                                   IFEQ    (((DO1<-3)<-3)&7)-2
        166                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        167                                   ENDC
        168                                   IFEQ    (((DO1<-3)<-3)&7)-3
        169                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        170                                   ENDC
        171                                   IFEQ    (((DO1<-3)<-3)&7)-4
        172                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        173                                   ENDC
        174                                   IFEQ    (((DO1<-3)<-3)&7)-5
        175                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        176                                   ENDC
        177                                   IFEQ    (((DO1<-3)<-3)&7)-6
        178                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        179                                   ENDC
        180                                   IFEQ    (((DO1<-3)<-3)&7)-7
        181                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        182                                   ENDC
        183                               ELSE
        190                  90C4     EXIT set DOLVE01
        185                               ENDC
        164                                   ENDC
        165                                   IFEQ    ((DO1<-3)&7)-2
        166                                   DOGEN   ((DO1<-3)<-3),DOSET1,EXIT>>
        167                                   ENDC
        168                                   IFEQ    ((DO1<-3)&7)-3
        169                                   DOGEN   ((DO1<-3)<-3),DOSET1,EXIT>>
        170                                   ENDC
        171                                   IFEQ    ((DO1<-3)&7)-4
        172                                   DOGEN   ((DO1<-3)<-3),DOSET1,EXIT>>
        173                                   ENDC
        174                                   IFEQ    ((DO1<-3)&7)-5
        175                                   DOGEN   ((DO1<-3)<-3),DOSET1,EXIT>>
        176                                   ENDC
        177                                   IFEQ    ((DO1<-3)&7)-6
        178                                   DOGEN   ((DO1<-3)<-3),DOSET1,EXIT>>
        179                                   ENDC
        180                                   IFEQ    ((DO1<-3)&7)-7
        181                                   DOGEN   ((DO1<-3)<-3),DOSET1,EXIT>>
        182                                   ENDC
        183                               ELSE
        184                                   DOSET1      EXIT,DOLVE0
        185                               ENDC
        161                                   ENDC
        162                                   IFEQ    (DO1&7)-1
        163                                   DOGEN   (DO1<-3),DOSET1,EXIT,DOLV>>
        164                                   ENDC
        165                                   IFEQ    (DO1&7)-2
        166                                   DOGEN   (DO1<-3),DOSET1,EXIT,DOLV>>
        167                                   ENDC
        168                                   IFEQ    (DO1&7)-3
        169                                   DOGEN   (DO1<-3),DOSET1,EXIT,DOLV>>
        170                                   ENDC
        171                                   IFEQ    (DO1&7)-4
        172                                   DOGEN   (DO1<-3),DOSET1,EXIT,DOLV>>
        173                                   ENDC
        174                                   IFEQ    (DO1&7)-5
        175                                   DOGEN   (DO1<-3),DOSET1,EXIT,DOLV>>
        176                                   ENDC
        177                                   IFEQ    (DO1&7)-6
        178                                   DOGEN   (DO1<-3),DOSET1,EXIT,DOLV>>
        179                                   ENDC
        180                                   IFEQ    (DO1&7)-7
        181                                   DOGEN   (DO1<-3),DOSET1,EXIT,DOLV>>
        182                                   ENDC
        183                               ELSE
        184                                   DOSET1      EXIT,DOLVE
        185                               ENDC
        158                               IF  DO1
        159                                   IFEQ    (DO1&7)-0
        158                               IF  (DO1<-3)
        159                                   IFEQ    ((DO1<-3)&7)-0
        160                                   DOGEN   ((DO1<-3)<-3),DOSET1,REDO>>
        161                                   ENDC
        162                                   IFEQ    ((DO1<-3)&7)-1
        158                               IF  ((DO1<-3)<-3)
        159                                   IFEQ    (((DO1<-3)<-3)&7)-0
        160                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        161                                   ENDC
        162                                   IFEQ    (((DO1<-3)<-3)&7)-1
        163                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        164                                   ENDC
        165                                   IFEQ    (((DO1<-3)<-3)&7)-2
        166                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        167                                   ENDC
        168                                   IFEQ    (((DO1<-3)<-3)&7)-3
        169                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        170                                   ENDC
        171                                   IFEQ    (((DO1<-3)<-3)&7)-4
        172                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        173                                   ENDC
        174                                   IFEQ    (((DO1<-3)<-3)&7)-5
        175                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        176                                   ENDC
        177                                   IFEQ    (((DO1<-3)<-3)&7)-6
        178                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        179                                   ENDC
        180                                   IFEQ    (((DO1<-3)<-3)&7)-7
        181                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET1>>
        182                                   ENDC
        183                               ELSE
        190                  90C1     REDO set DOENT01
        185                               ENDC
        164                                   ENDC
        165                                   IFEQ    ((DO1<-3)&7)-2
        166                                   DOGEN   ((DO1<-3)<-3),DOSET1,REDO>>
        167                                   ENDC
        168                                   IFEQ    ((DO1<-3)&7)-3
        169                                   DOGEN   ((DO1<-3)<-3),DOSET1,REDO>>
        170                                   ENDC
        171                                   IFEQ    ((DO1<-3)&7)-4
        172                                   DOGEN   ((DO1<-3)<-3),DOSET1,REDO>>
        173                                   ENDC
        174                                   IFEQ    ((DO1<-3)&7)-5
        175                                   DOGEN   ((DO1<-3)<-3),DOSET1,REDO>>
        176                                   ENDC
        177                                   IFEQ    ((DO1<-3)&7)-6
        178                                   DOGEN   ((DO1<-3)<-3),DOSET1,REDO>>
        179                                   ENDC
        180                                   IFEQ    ((DO1<-3)&7)-7
        181                                   DOGEN   ((DO1<-3)<-3),DOSET1,REDO>>
        182                                   ENDC
        183                               ELSE
        184                                   DOSET1      REDO,DOENT0
        185                               ENDC
        161                                   ENDC
        162                                   IFEQ    (DO1&7)-1
        163                                   DOGEN   (DO1<-3),DOSET1,REDO,DOEN>>
        164                                   ENDC
        165                                   IFEQ    (DO1&7)-2
        166                                   DOGEN   (DO1<-3),DOSET1,REDO,DOEN>>
        167                                   ENDC
        168                                   IFEQ    (DO1&7)-3
        169                                   DOGEN   (DO1<-3),DOSET1,REDO,DOEN>>
        170                                   ENDC
        171                                   IFEQ    (DO1&7)-4
        172                                   DOGEN   (DO1<-3),DOSET1,REDO,DOEN>>
        173                                   ENDC
        174                                   IFEQ    (DO1&7)-5
        175                                   DOGEN   (DO1<-3),DOSET1,REDO,DOEN>>
        176                                   ENDC
        177                                   IFEQ    (DO1&7)-6
        178                                   DOGEN   (DO1<-3),DOSET1,REDO,DOEN>>
        179                                   ENDC
        180                                   IFEQ    (DO1&7)-7
        181                                   DOGEN   (DO1<-3),DOSET1,REDO,DOEN>>
        182                                   ENDC
        183                               ELSE
        184                                   DOSET1      REDO,DOENT
        185                               ENDC
        203                                   ENDC
        204                                   IF      DO2
        205                                   DOGEN   DO2,DOSET1,EXIT2,DOLVE
        206                                   DOGEN   DO2,DOSET1,REDO2,DOENT
        207                                   ENDC
        208                                   IF      DO3
        209                                   DOGEN   DO3,DOSET1,EXIT3,DOLVE
        210                                   DOGEN   DO3,DOSET1,REDO3,DOENT
        211                                   ENDC
        271                                   IFEQ    DO__ne-DO_ra
        272                                   IFNE    'l-'
        273                                   IFEQ    EXIT-*-4
        274                             bra EXIT  ; prefer SKIP2
        275                                   ELSE
        276                                   IFEQ    EXIT-*-3
        277                             bra EXIT  ; prefer SKIP1
        278                                   ELSE
        279                             bra EXIT
        280                                   ENDC
        281                                   ENDC
        282                                   ELSE
        283                             jmp EXIT      ; optim long bra
        284                                   ENDC
        285                                   ELSE
        266                                   IFEQ    DO__ne-DO_rn
        267                             brn EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_ne
        267                             bne EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_eq
        267  3     90C1 27   01         beq EXIT ; $90C4
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_lt
        267                             blt EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_ge
        267                             bge EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_gt
        267                             bgt EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_le
        267                             ble EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_mi
        267                             bmi EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_pl
        267                             bpl EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_vs
        267                             bvs EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_vc
        267                             bvc EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_cs
        267                             bcs EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_cc
        267                             bcc EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_hi
        267                             bhi EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_ls
        267                             bls EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_hs
        267                             bhs EXIT
        268                                   ENDC
        266                                   IFEQ    DO__ne-DO_lo
        267                             blo EXIT
        268                                   ENDC
        303                                   ENDC
        541  2     90C3 46                rora          ; no => put sign back
        158                               IF  DO1
        159                                   IFEQ    (DO1&7)-0
        158                               IF  (DO1<-3)
        159                                   IFEQ    ((DO1<-3)&7)-0
        160                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        161                                   ENDC
        162                                   IFEQ    ((DO1<-3)&7)-1
        158                               IF  ((DO1<-3)<-3)
        159                                   IFEQ    (((DO1<-3)<-3)&7)-0
        160                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        161                                   ENDC
        162                                   IFEQ    (((DO1<-3)<-3)&7)-1
        163                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        164                                   ENDC
        165                                   IFEQ    (((DO1<-3)<-3)&7)-2
        166                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        167                                   ENDC
        168                                   IFEQ    (((DO1<-3)<-3)&7)-3
        169                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        170                                   ENDC
        171                                   IFEQ    (((DO1<-3)<-3)&7)-4
        172                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        173                                   ENDC
        174                                   IFEQ    (((DO1<-3)<-3)&7)-5
        175                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        176                                   ENDC
        177                                   IFEQ    (((DO1<-3)<-3)&7)-6
        178                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        179                                   ENDC
        180                                   IFEQ    (((DO1<-3)<-3)&7)-7
        181                                   DOGEN   (((DO1<-3)<-3)<-3),DOSET2>>
        182                                   ENDC
        183                               ELSE
        195                  90C4     DOLVE01 set *
        185                               ENDC
        164                                   ENDC
        165                                   IFEQ    ((DO1<-3)&7)-2
        166                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        167                                   ENDC
        168                                   IFEQ    ((DO1<-3)&7)-3
        169                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        170                                   ENDC
        171                                   IFEQ    ((DO1<-3)&7)-4
        172                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        173                                   ENDC
        174                                   IFEQ    ((DO1<-3)&7)-5
        175                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        176                                   ENDC
        177                                   IFEQ    ((DO1<-3)&7)-6
        178                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        179                                   ENDC
        180                                   IFEQ    ((DO1<-3)&7)-7
        181                                   DOGEN   ((DO1<-3)<-3),DOSET2,*,DO>>
        182                                   ENDC
        183                               ELSE
        184                                   DOSET2      *,DOLVE0
        185                               ENDC
        161                                   ENDC
        162                                   IFEQ    (DO1&7)-1
        163                                   DOGEN   (DO1<-3),DOSET2,*,DOLVE1
        164                                   ENDC
        165                                   IFEQ    (DO1&7)-2
        166                                   DOGEN   (DO1<-3),DOSET2,*,DOLVE2
        167                                   ENDC
        168                                   IFEQ    (DO1&7)-3
        169                                   DOGEN   (DO1<-3),DOSET2,*,DOLVE3
        170                                   ENDC
        171                                   IFEQ    (DO1&7)-4
        172                                   DOGEN   (DO1<-3),DOSET2,*,DOLVE4
        173                                   ENDC
        174                                   IFEQ    (DO1&7)-5
        175                                   DOGEN   (DO1<-3),DOSET2,*,DOLVE5
        176                                   ENDC
        177                                   IFEQ    (DO1&7)-6
        178                                   DOGEN   (DO1<-3),DOSET2,*,DOLVE6
        179                                   ENDC
        180                                   IFEQ    (DO1&7)-7
        181                                   DOGEN   (DO1<-3),DOSET2,*,DOLVE7
        182                                   ENDC
        183                               ELSE
        184                                   DOSET2      *,DOLVE
        185                               ENDC
        141                                   IFEQ    DO1
        142                           STACK UNDERFLOW
        143                                   ENDC
        144                  0000     DO1   set     DO2
        145                  0000     DO2   set     DO3
        146                  0000     DO3   set     DO4
        147                  0000     DO4   set     DO5
        148                  0000     DO5   set     DO6
        149                  0000     DO6   set     DO7
        150                  0000     DO7   set     DO8
        151                  0000     DO8   set     DO9
        152                  0000     DO9   set     0
        200                                   IF      DO1
        201                                   DOGEN   DO1,DOSET1,EXIT,DOLVE
        202                                   DOGEN   DO1,DOSET1,REDO,DOENT
        203                                   ENDC
        204                                   IF      DO2
        205                                   DOGEN   DO2,DOSET1,EXIT2,DOLVE
        206                                   DOGEN   DO2,DOSET1,REDO2,DOENT
        207                                   ENDC
        208                                   IF      DO3
        209                                   DOGEN   DO3,DOSET1,EXIT3,DOLVE
        210                                   DOGEN   DO3,DOSET1,REDO3,DOENT
        211                                   ENDC
        543  5     90C4 39              rts             ; done
    Complètement illisible n'est-ce-pas? (le fichier codes.lst fait 5Mo et 100 000 lignes) La même chose avec QUIET sur ces macros hyper expansives donne pour le même code
    Code:
        537        90BE               fptst
        538  4+0   90BE A6   C4         lda   ,u        ; get expo
        539  2     90C0 48              lsla            ; move sign-bit off
        190                  90C4     EXIT set DOLVE01
        267  3     90C1 27   01         beq EXIT
        541  2     90C3 46                rora          ; no => put sign back
        195                  90C4     DOLVE01 set *
        543  5     90C4 39              rts             ; done
    C'est plus petit et surtout plus clair à lire je trouve :bien: (50ko et 3000 lignes pour le codes.lst)

    A noter que cet argument juste après la directive MACRO est ignorée par les anciennes versions de C6809 (et probablement par Assembleur v3, mais je n'ai pas vérifié) qui produit alors juste le codes.lst illisible dont on voit un extrait plus haut.

    Pour ceux qui se demandent d'où sortent ces macros expansibles, je prépare un message dans la partie programmation, mais disons que l'idée est de simplifier l'écriture et la maintenance des fichiers ASM en allégeant d'une tache fastidieuse pendant la mise au point d'un algo (en tout cas pour moi).
  2. ajout en commentaire dans le fichier codes.lst de l'adresse absolue quand un adressage relatif est utilisé. Ca rends la relecture du source plus simple quand un même symbole (ici: EXIT) est réutilisé pour indiquer plusieurs adresses dans le code. Exemple:
    Code:
        546        90C5               fpcmp
        547  4+1   90C5 A6   44         lda   4,u
        548  4+0   90C7 A8   C4         eora  ,u        ; sign(f)==sign(g) ?
        267  3     90C9 2A   06         bpl EXIT ; $90D1
        550  4+1   90CB A6   44           lda   4,u     ; no => get f expo
        551  3     90CD 20   F1           bra   fptst+2 ; sign(f-g)==sign(f) ; >>
        279  3     90CF 20   0C         bra EXIT ; $90DD
        553  7     90D1 8D   0B           bsr   cmpmag  ; compare by mag, but ;>>
        554  6     90D3 1F   A9           tfr   cc,b    ; inv order for neg.
        555  4+0   90D5 A6   C4           lda   ,u      ; f<0 ?
        267  3     90D7 2A   02         bpl EXIT ; $90DB
        557  2     90D9 C8   08           eorb  #$08    ; yes => inv N flag
        559  6     90DB 1F   9A           tfr   b,cc    ; no  => N unchanged
        561  5     90DD 39              rts
Moi je le trouve plus claire à lire aussi avec ces commentaires ajoutés. :good:

Le fichier c6809.c est dans le ZIP ci-joint avec son diff par rapport à la version officielle du site PULS (qui semble être passablement pas à jour au niveau des autres fix que j'ai trouvé en faisant le diff: utilisation de fstat, cycles de ORCC/ANDCC etc).


Fichiers joints:
diff.zip [30.71 Kio]
Téléchargé 1070 fois

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 30 Avr 2019, 14:30, édité 1 fois.
Haut
 Profil  
Répondre en citant le message  
MessagePosté: 30 Avr 2019, 14:29 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
Hé non, elle n'est pas à jour, parce que ça n'est plus celle sur laquelle je travaille, mais sur une version bien plus intéressante que je t'avais pourtant envoyée personnellement, si je me souviens bien, et que tu ne sembles pas utiliser pour autant.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 30 Avr 2019, 14:41 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
Humm il faut que je me replonge dans les archives mail alors. Je pense que je suis parti d'une de test versions interne étant donné le nombre de différences avec la version du site puls. Pour info j'ai mis un /* sam */ dans le source concernant mes modifs pour les retrouver facilement. Les changements sont très léger (3-4 endroits dans le code, pas plus.)

[EDIT] oui je confirme, j'utilise ta version du 8/3/2017. La différence entre les deux sources est toute petite: https://www.cjoint.com/doc/19_04/IDEn4Vl05Ar_diff.htm (à gauche la version 8/3/2017, à droite mes modifs surlignées en orange)

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 30 Avr 2019, 14:57, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 30 Avr 2019, 14:53 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
Je peux te renvoyer les sources en l'état, si tu veux. Elles sont beaucoup plus lisibles maintenant que je les ai retravaillées. Mais le problème des EQU vers l'avant n'est pas encore entièrement résolu.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 30 Avr 2019, 14:58 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
Oui je veux bien tes dernier sources. Je peux reporter les modifs sans soucis. Il n'y a pas 15 lignes de modifiées en tout je pense :)

D'ailleurs par rapport aux optims des sauts courts, j'ai vu qu'on pouvait aussi parfois remplacer des BRA *+2 par un FCB $8C (CMPX #nnnn, gain: 1 octet) et les BRA *+1 par un FCB $81 (CMPA #nn, grain: 1 octet et 1 cycle). Alors oui 1 octet c'est pas beaucoup, mais ca peut aider à garder le code dans la page directe le plus possible. Le jeu de macro que je me suis faite indique dans le commentaire qu'un BRA peut être optimisé par l'une des macro SKIP (à défaut de faire un vrai SKIP sous peine de voir les adresses suivantes décalées de 1 octet.)

Plus généralement parlant, je me questionne sur l'intéret d'un optimisateur avancé en ASM: un truc qui prends un code ASM, fait une analyse et le réécrit en optimisant les sauts. Ainsi un Bcc sur un autre BRA ou un JMP pourrait être recombiné en un seul (L)Bcc; les sauts de 1 ou 2 octets en avants remplacés par des SKIP. Dans l'idéal ca serait bien que le compilo ASM fasse cela (optimisation peep-hole), mais on a vu que la gestion des adresses était délicate dans son cadre.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 30 Avr 2019, 17:03 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1058
Localisation: France (24)
Samuel Devulder a écrit:
Oui je veux bien tes dernier sources. Je peux reporter les modifs sans soucis. Il n'y a pas 15 lignes de modifiées en tout je pense :)

Je viens de vérifier. Pour l'instant, elles sont trop buggées :L

Samuel Devulder a écrit:
D'ailleurs par rapport aux optims des sauts courts, j'ai vu qu'on pouvait aussi parfois remplacer des BRA *+2 par un FCB $8C (CMPX #nnnn, gain: 1 octet)

Oui, astuce de programmation antédiluvienne.

Samuel Devulder a écrit:
et les BRA *+1 par un FCB $81 (CMPA #nn, grain: 1 octet et 1 cycle).

Ou BRN, qui ne positionne aucun des flags de CC.
(CMPA est moins gourmand, c'est vrai)

Samuel Devulder a écrit:
Plus généralement parlant, je me questionne sur l'intéret d'un optimisateur avancé en ASM: un truc qui prends un code ASM, fait une analyse et le réécrit en optimisant les sauts. Ainsi un Bcc sur un autre BRA ou un JMP pourrait être recombiné en un seul (L)Bcc; les sauts de 1 ou 2 octets en avants remplacés par des SKIP. Dans l'idéal ca serait bien que le compilo ASM fasse cela (optimisation peep-hole), mais on a vu que la gestion des adresses était délicate dans son cadre.

Et la plupart du temps, en assembleur, l'optimisation est à l'initiative du programmeur. Et quand on veut faire une bonne optimisation, il faut voir plus loin que 2 instructions consécutives. Optimisation pour les débutants?

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 30 Avr 2019, 19:37 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
Oui je suis assez d'accord que les meilleurs optims viennent du codeur. En plus le peep-hole sur 6809 est assez faiblard car on écrit plutôt facilement un code pas trop mauvais sans y réfléchir avec un tout petit peu d’expérience. Seule exception: le code généré par un compilateur C.

Cette aprem j'ai regardé http://www.brouhaha.com/~eric/embedded/6809/ avec en particulier
Citation:
221_01.zip ( 87K) 6809 C compiler for Flex
A rewrite of Ron Cain's Small C targeted for 6809 processors running under the FLEX operating System. Dieter Flunker (Italy), has expanded slightly on the language subset implemented by Cain and includes a peephole code optimizer.
qui prétend avoir un peephole. Ben les exemples d'asm pour les routines des bibliothèques C sont hyper mauvais. Les séquences "pshs d" .. "bidule ,s++" sont nombreuses. Le peephole optim ne voit même pas l'optim consistant à virer le ++ et remplacer le pshs d par un "std ,s" (sans doute parce qu'ensuite le offsets sur la pile sont à recalculer.) Bref ce compilo est pas terrible.

Je sens que pour le fun, un jour je vais faire le miens. D'ailleurs j'ai trouvé la base avec >>c4<<. C'est un compilo C aussi puissant que ceux de FLEX (en gros il n'y a pas les bitsfields, ni les structs/union) mais tenant dans seulement 4 fonctions C. Plus de détails >>ici<<.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 07 Fév 2021, 14:53 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 432
Localisation: Var
Salut,

J'ai un comportement qui me parait étrange, mais peut-être que ça vient d'une mauvaise compréhension de ma part.
Dans le cas d'un STU DYN_U+2,PCR l'écriture se fait en +2 par rapport à l'étiquette tout va bien.
Par contre dans le cas d'un STY ou d'un STS DYN_S+2,PCR l'écriture se fait en +3 par rapport à l'étiquette donc un octet trop loin à mon sens.


Code:
/*--------------------------------------------------------------*
 * Compilé avec C6809 v0.83                                     *
 *--------------------------------------------------------------*
 * Fichier source      : .\tmp\test.asm
 * Fichier destination : test.BIN
 * Contenu :
 *     Main     0:TEST.ASM     317
 *--------------------------------------------------------------*/

Macro Pass
Pass1
Pass2
      2        6200                  org $6200
      3
      4  6+5   6200 10EF 8D 0003          STS DYN_S+2,PCR
      5        6205               DYN_S
      6  4     6205 10CE 0000             LDS   #$0000
----------------
15 cycle(s)
9 byte(s)
----------------
      8
      9  6+5   6209 10AF 8D 0003                STY DYN_Y+2,PCR
     10        620E               DYN_Y
     11  4     620E 10CE 0000             LDS   #$0000
----------------
15 cycle(s)
9 byte(s)
----------------
     13                           
     14  5+5   6212 EF   8D 0002          STU DYN_U+2,PCR
     15        6216               DYN_U
     16  4     6216 10CE 0000             LDS   #$0000
----------------
14 cycle(s)
8 byte(s)
----------------


Anomalie ou mauvaise compréhension ?


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 53 messages ]  Aller à la page Précédente  1, 2, 3, 4  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 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