Inscription: 21 Aoû 2006, 09:06 Messages: 1804 Localisation: Brest
|
Voici ci-joint des petites modifs que je me suis faite sur C6809 0.83 pour le rendre plus agréable à utiliser. - 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 codeCode: 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 (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).
- 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. 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é 1128 fois
|
Dernière édition par Samuel Devulder le 30 Avr 2019, 14:30, édité 1 fois.
|
|