Logicielsmoto.com

Nous sommes le 28 Mar 2024, 11:54

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 19 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: GCC 6809 version 2009
MessagePosté: 24 Mar 2009, 17:05 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Juste pour info en passant, j'ai été surpris de voir que le 6809 était toujours supportée par GCC.. En particulier dans GCC4.3.0: http://www.oddchange.com/gcc6809/. Je ne sais pas si la chaine http://nostalgies.thomsonistes.org/article3/article3.html peut être adaptée à cette nouvelle version de gcc. Ca serait cool, car en lisant ce que fait GCC autour du 6809 pour du code C, j'y ai trouvé des trucs sympas:
    - un mode où B et X ne sont pas préservés sur la pile, et sont utilisés pour passer des valeurs aux fonctions (sympa pour économiser des cycles)
    - il sait étendre le nombre de registres en utilisant l'adressage direct via DP en fournissant potentiellement 256 nouveaux registres globaux (cool, c'était un vieux soucis avec l'ancien GCC qui plantait sur du code 6809e par manque de registre sur des expressions complexes)
    - il sait utiliser une notion de far pointer pour appeler des fonctions dans une autre bank mémoire et donc dépasser la limite des 64Ko (trop bien ce truc... mais ca serait encore mieux s'il ne fallait pas spécifier les banks des fonctions mais que le linker se débrouillait tout seul.. et aussi si ca pouvait marcher pour les structures de données)
Si j'étais moins flemmard, je regarderais bien de plus près le remplacement de gcc2.95.1 par gcc4.3 dans la chaine gcc pour thomson.

Est-ce que les autres pratiquants du C pour thomson (foolduplex?) ont un avis autour de cette version de GCC?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 26 Mar 2009, 14:48 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
Très intéressant ! J'ignorais l'existence de ce port. En fait, le 6809 n'est pas officiellement supporté par gcc, c'est un patch pour gcc. Il y a en eu plusieurs ces 15 dernieres annees, dont celui réalisé par Eric Botcazou, mais aucun n'etait reellement satisfaisant, notamment a cause de la limitation sur les registres.

Cette nouvelle version pourrait resoudre mes problemes de compilation de la pile TCP/IP sous OS9 ...

Il manque sans aucun doute le packager pour Thomson, mais ca c'est super-facile a faire.

Il faut en parler a Eric !

Fool


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 26 Mar 2009, 16:03 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Fool-DupleX a écrit:
Il manque sans aucun doute le packager pour Thomson, mais ca c'est super-facile a faire.
Ah? tant mieux, parce que perso j'ai essayé une compilation telle qu'indiquée dans la doc.. et pour laquelle tout doit bien se passer (en principe) et.... bien finalement ca échoue avec un truc super moche:
Code:
Installing libgcc cache...
ar (m6809): no such directory /usr/local/lib/gcc/m6809-unknown-none/4.3.3
/usr/local/m6809/bin/ar: line 42: cd: /usr/local/lib/gcc/m6809-unknown-none/4.3.3: No such file or directory

Error: cannot open ../libgcc.a.
ls: cannot access ./libgcc-cache/*.o: No such file or directory
:( Bon au final je récupère quand même des trucs utilisables:
Code:
$ ls -l /usr/local/bin/m68*.exe
-rwxr-xr-x 1 devulder Aucun 232402 Mar 26 12:26 /usr/local/bin/m6809-unknown-none-cpp.exe
-rwxr-xr-x 2 devulder Aucun 230284 Mar 26 12:26 /usr/local/bin/m6809-unknown-none-gcc-4.3.1.exe
-rwxr-xr-x 2 devulder Aucun 230284 Mar 26 12:26 /usr/local/bin/m6809-unknown-none-gcc.exe
-rwxr-xr-x 1 devulder Aucun  42030 Mar 26 12:26 /usr/local/bin/m6809-unknown-none-gcov.exe

$ ls -l /usr/local/libexec/gcc/m6809-unknown-none/4.3.1/cc1.exe
-rwxr-xr-x 1 devulder Aucun 5148893 Mar 26 12:26 /usr/local/libexec/gcc/m6809-unknown-none/4.3.1/cc1.exe
J'ai pu faire quelques tests rapide de compile C vers ASM.. Apparemment -O3 donne un code bien plus moche que -O ou -O2 tout court. On dirait que le -O3 des derniers GCC a vraiment besoin de beaucoup de registres pour optimiser, et on voit vite que GCC4 a du mal avec le peu de registres du 6809e. (mais bon j'ai pas regardé dans le détail).
Citation:
Il faut en parler a Eric !

Effectivement, ca serait bien qu'il passe par ici et qu'il nous donne son avis sur ce GCC.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 26 Mar 2009, 17:53 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
mais c'est normal qu'il gueule sur la libgcc, c'est une librairie de routines natives pour traiter des choses que gcc ne peut pas compiler en inline, par exemple des calculs floating point, une multiplication 64 bits, que sais-je ... par definition, elle n'existe pas encore pour nos Thomson. C'est different encore de la libc, qui contient l'implementation native des fonctions standard style getchar ou printf.

Mais il y en a peut-etre une reutilisable dans le patch libc propose sur le meme site ?

Concernant l'optimisation, t'a essaye en forcant les soft registers ? peut-etre que ca aide ... c'est clair que le -O3 est utile plutot sur les processeurs genre ARM avec des tonnes de registres :)

J'ai envoye un mail a Eric, j'attends une reponse.

Fool


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 26 Mar 2009, 18:33 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Fool-DupleX a écrit:
mais c'est normal qu'il gueule sur la libgcc, c'est une librairie de routines natives pour traiter des choses que gcc ne peut pas compiler en inline, par exemple des calculs floating point, une multiplication 64 bits, que sais-je ... par definition, elle n'existe pas encore pour nos Thomson. C'est different encore de la libc, qui contient l'implementation native des fonctions standard style getchar ou printf.

Oui c'est ce que je me suis dit, mais en fait il grogne sur l'absence d'une directory.. A croire qu'un mkdir a été oublié. Surtout que la page web dit qu'on doit bien trouver un libgcc.a au final:
Citation:
The main files installed by GCC are:
* '/usr/local/m6809/bin/gcc,' which is the frontend driver to the compiler
* '/usr/local/libexec/gcc/m6809/version/cc1,' which is the actual compiler
* '/usr/local/libexec/gcc/m6809/version/collect2,' a frontend to the linker
* '/usr/local/lib/gcc/m6809/version/libgcc.a,' a library of helper functions that is used for certain complex expressions that don't translate easily to 6809 instructions.
Bon c'est pas grave. J'ai bien cc1, collect2, le frontend.. C'est tout ce qu'il me fallait pour tester rapidement.
Citation:
Mais il y en a peut-etre une reutilisable dans le patch libc propose sur le meme site ?

Oui peut être... Mais la libc thomson de l'ancien gcc est pas mal remplie.
Citation:
Concernant l'optimisation, t'a essaye en forcant les soft registers ? peut-etre que ca aide ... c'est clair que le -O3 est utile plutot sur les processeurs genre ARM avec des tonnes de registres :)
Ben ca donne ceci sur le code suivant
Code:
int bit_count(int val) {
  char c = 0;
  while(val) {val &= val-1; ++c;}
  return c;
}
GCC sans optim, int 16bits:
Code:
$ /usr/local/bin/m6809-unknown-none-gcc -S -msoft-reg-count=0 -mint16 -o - t.c
;;; gcc for m6809 : Mar 26 2009 11:32:20 [no tag]
;;; 4.3.1 (gcc6809)
;;; ABI version 1
;;; -mint16
        .module t.c
        .area .text
        .globl _bit_count
_bit_count:
        pshs    u       ;push register set
        leas    -5,s
        leau    ,s
        stx     2,u
        clr     4,u     ;movqi: ZERO -> R:4,u
        bra     L2
L3:
        ldd     2,u
        addd    #-1
        ldx     2,u
        pshs    x       ;movhi_push: R:x
        anda    ,s+     ;andqi: R:a &= ,s+
        andb    ,s+     ;andqi: R:b &= ,s+
        std     2,u
        inc     4,u     ;addqi: 4,u ++
L2:
        ldx     2,u
        cmpx    #0
        bne     L3
        ldb     4,u     ;movqi: 4,u -> R:b
        clra            ;zero_extendqihi: R:b -> R:d
        std     ,u
        ldx     ,u
        leas    5,s
        puls    u,pc    ;pop register set
                ;return is in puls
Idem en -O:
Code:
$ /usr/local/bin/m6809-unknown-none-gcc -S -msoft-reg-count=0 -mint16 -o - t.c -O
(..cut..)
_bit_count:
        pshs    u       ;push register set
        leas    -1,s
        tfr     x,d
        cmpx    #0
        bne     L2
        clr     ,s      ;movqi: ZERO -> R:,s
        bra     L3
L2:     clr     ,s      ;movqi: ZERO -> R:,s
L4:     ldu     #-1
        leax    d,u
        pshs    x       ;movhi_push: R:x
        anda    ,s+     ;andqi: R:a &= ,s+
        andb    ,s+     ;andqi: R:b &= ,s+
        inc     ,s      ;addqi: ,s ++
        cmpd    #0
        bne     L4
L3:     ldb     ,s      ;movqi: ,s -> R:b
        clra            ;zero_extendqihi: R:b -> R:d
        tfr     d,x
        leas    1,s
        puls    u,pc    ;pop register set
                ;return is in puls

En -O3 (le c*n! il bouffe une place de plus sur la pile):
Code:
$ /usr/local/bin/m6809-unknown-none-gcc -S -msoft-reg-count=0 -mint16 -o - t.c -O3
_bit_count:
        pshs    u       ;push register set
        leas    -3,s
        tfr     x,d
        cmpx    #0
        beq     L8
        clr     2,s     ;movqi: ZERO -> R:2,s
L4:     ldu     #-1
        leax    d,u
        pshs    x       ;movhi_push: R:x
        anda    ,s+     ;andqi: R:a &= ,s+
        andb    ,s+     ;andqi: R:b &= ,s+
        inc     2,s     ;addqi: 2,s ++
        cmpd    #0
        bne     L4
        ldb     2,s     ;movqi: 2,s -> R:b
        clra            ;zero_extendqihi: R:b -> R:d
        std     ,s
        tfr     d,x
L3:     leas    3,s
        puls    u,pc    ;pop register set
                ;return is in puls
L8:     ldx     #0
        stx     ,s
        bra     L3
Avec les soft-registers sans -O ca ne change rien, mais avec ca donne:
Code:
$ /usr/local/bin/m6809-unknown-none-gcc -S -msoft-reg-count=4 -mint16 -o - t.c -O
_bit_count:
        pshs    u       ;push register set
        tfr     x,d
        cmpx    #0
        bne     L2
        clr     *m1     ;movqi: ZERO -> R:*m1
        bra     L3
L2:     clr     *m1     ;movqi: ZERO -> R:*m1
L4:     ldu     #-1
        leax    d,u
        pshs    x       ;movhi_push: R:x
        anda    ,s+     ;andqi: R:a &= ,s+
        andb    ,s+     ;andqi: R:b &= ,s+
        inc     *m1     ;addqi: *m1 ++
        cmpd    #0
        bne     L4
L3:     ldb     *m1     ;movqi: *m1 -> R:b
        clra            ;zero_extendqihi: R:b -> R:d
        tfr     d,x
        puls    u,pc    ;pop register set
                ;return is in puls
et en optim -O3:
Code:
$ /usr/local/bin/m6809-unknown-none-gcc -S -msoft-reg-count=4 -mint16 -o - t.c -O3
_bit_count:
        pshs    u       ;push register set
        tfr     x,d
        cmpx    #0
        beq     L8
        clr     *m1     ;movqi: ZERO -> R:*m1
L4:
        ldu     #-1
        leax    d,u
        pshs    x       ;movhi_push: R:x
        anda    ,s+     ;andqi: R:a &= ,s+
        andb    ,s+     ;andqi: R:b &= ,s+
        inc     *m1     ;addqi: *m1 ++
        cmpd    #0
        bne     L4
        ldb     *m1     ;movqi: *m1 -> R:b
        clra            ;zero_extendqihi: R:b -> R:d
        std     *m1
L3:     ldx     *m1
        puls    u,pc    ;pop register set
                ;return is in puls
L8:     ldd     #0
        std     *m1
        bra     L3

Je le trouve pas top en -O3, même avec les soft-regs.. mais peut être que sur du vrai code interressant ca change des trucs.

Par ailleurs l'auteur du portager gcc4 dit qu'en fait il vaut mieux considérer le 6809 comme un 8 bit (donc sizeeof(int)==1) ce qui limite les problemes de "no spilled registers" lié aux expressions arithmétiques sur 16 bits qui bloquent D. En tout cas, avec -mint8 (entier 8bits), les soft regs changent pas mal de trucs: on empiette plus sur la pile mais on passe par un addressage direct-page bien plus efficace:
Code:
$ /usr/local/bin/m6809-unknown-none-gcc -S -msoft-reg-count=0 -mint8 -o - t.c -O
_bit_count:
        leas    -2,s
        stb     ,s      ;movqi: R:b -> ,s
        bne     L2
        clr     1,s     ;movqi: ZERO -> R:1,s
        bra     L3
L2:     clr     1,s     ;movqi: ZERO -> R:1,s
L4:     ldb     ,s      ;movqi: ,s -> R:b
        decb            ;addqi: R:b --
        andb    ,s      ;andqi: R:b &= ,s
        stb     ,s      ;movqi: R:b -> ,s
        inc     1,s     ;addqi: 1,s ++
        tstb
        bne     L4
L3:     ldb     1,s     ;movqi: 1,s -> R:b
        leas    2,s
        rts
vs
Code:
$ /usr/local/bin/m6809-unknown-none-gcc -S -msoft-reg-count=4 -mint8 -o - t.c -O
_bit_count:
        stb     *m3     ;movqi: R:b -> *m3
        tstb
        bne     L2
        clr     *m2     ;movqi: ZERO -> R:*m2
        bra     L3
L2:     clr     *m2     ;movqi: ZERO -> R:*m2
L4:     ldb     *m3     ;movqi: *m3 -> R:b
        decb            ;addqi: R:b --
        stb     *m1     ;movqi: R:b -> *m1
        ldb     *m3     ;movqi: *m3 -> R:b
        andb    *m1     ;andqi: R:b &= *m1
        stb     *m3     ;movqi: R:b -> *m3
        inc     *m2     ;addqi: *m2 ++
        tstb
        bne     L4
L3:     ldb     *m2     ;movqi: *m2 -> R:b
        rts


Bon dans tous les cas on se rend compte qu'il n'utilise pas assez le registre A ou qu'il manque une passe de peephole pour virer un "tstb" juste après un "stb *m3" ou de réorganiser les opcodes pour qu'un "stx Memoire.. trucs sans X...cmpx #O; bne label" devienne "..trucs sans X.. stx Memoire; bne label". Le codage à la main est quand même meilleurs là dessus.

Sinon question optim je trouve que "-O" avec des soft-regs est pas completement mauvais.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 26 Mar 2009, 19:35 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
J'ai trouvé des binaires précompilés ici avec gcc3.4.6 au lieu de GCC4: http://tlindner.macmess.org/?page_id=168

Le code produit par cette version est un peu différent de celui venant de gcc4 avec les mêmes options:
Code:
$ /usr/local/m6809-unknown-none/bin/gcc-3.exe -S -msoft-reg-count=4 -mint16 -o - t.c  -O3
_bit_count:
        pshs    u       ;push register set
        tfr     x,d
        clr     *m0     ;movqi: ZERO -> R:*m0
        bra     L9
L11:
        ldu     #-1
        leax    d,u     ;addhi: R:x = R:u + R:d
        pshs    x       ;movhi_push: R:x
        anda    ,s+     ;andqi: R:a &= ,s+
        andb    ,s+     ;andqi: R:b &= ,s+
        inc     *m0     ;addqi: *m0 ++
L9:
        cmpd    #0
        bne     L11
        ldb     *m0     ;movqi: *m0 -> R:b
        clra            ;zero_extendqihi: R:b -> R:d
        tfr     d,x
        puls    u,pc    ;pop register set
Mais bon c'est pas extraordinaire non plus. Il a complétement loupé l'optim concernant u:
Code:
        ldu     #-1
        leax    d,u     ;u est mort pour la suite
devient:
Code:
        ldx     #-1
        leax    d,x     ;u économisé!
ce qui retire le besoin d'utiliser u. Il n'a même pas déplacé le "ldu #-1" à l'exterieur de la boucle... C'est pas top celà quand même :(


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 27 Juil 2010, 16:07 
Hors ligne

Inscription: 27 Juil 2010, 14:46
Messages: 38
gcc est optimiser pour des CPU avec beaucoup de registre et des registres identique, donc la forcement il a un peu de mal :)

Sinon concernant les int8, c'est quand même mieux de le faire explicitement dans le code source plutôt que de forcer int à 8 bits. La norme C définit int comme étant 16 bits minimum et malheureusement déjà beaucoup de gens l'utilise dans des algos comme des 32 bits :/
L'idéal c'est d'utilise stdint.h (celui de la newlib par exemple, à copier dans /usr/local/m6809-unknown-none/include/) et d'utilisé les type posix (uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t)

Mais au final il ce débrouille pas si mal, par rapport aux différent compilateur C pour Z80 :/

Sinon c'est indiqué dans la doc, le registre A n'est pas utilisé comme registre par gcc, il est seulement utilisé par des séquence d'instruction préprogrammé.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 05 Aoû 2010, 18:16 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
J'ai refait le test avec l'un des CodeWarrior pour s12x au boulot. Il produire le code ASM suivant sans optimisation:
Code:
  0000 3b           [2]     PSHD       ; pshs d
   19:    char c = 0;
   20:    while(val) {val &= val-1; ++c;}
  0001 c7           [1]     CLRB 
  0002 200e         [3]     BRA   *+16 ;abs = 0012
  0004 37           [2]     PSHB       ; pshs b
  0005 ec81         [3]     LDD   1,SP
  0007 830001       [2]     SUBD  #1
  000a e482         [3]     ANDB  2,SP
  000c a481         [3]     ANDA  1,SP
  000e 6c81         [2]     STD   1,SP
  0010 33           [3]     PULB       ; puls b
  0011 52           [1]     INCB 
  0012 ee80         [3]     LDX   0,SP
  0014 26ee         [3/1]   BNE   *-16 ;abs = 0004
   21:    return c;
  0016 b714         [1]     SEX   B,D  ; sex
   22:  }
  0018 30           [3]     PULX       ; puls x
  0019 3d           [5]     RTS   

C'est pas mal. On lit presque naturellement l'asm S12x qui est proche du 6809. Le total 40 cycles pour 1 passe. Avec les optims:
Code:
  0000 36           [2]     PSHA         ; pshs a
   19:    char c = 0;
   20:    while(val) {val &= val-1; ++c;}
  0001 b745         [1]     TFR   D,X
  0003 c7           [1]     CLRB 
  0004 2012         [3]     BRA   *+20 ;abs = 0018
  0006 191f         [2]     LEAY  -1,X
  0008 34           [2]     PSHX         ; pshs x
  0009 6b82         [2]     STAB  2,SP   ; stb
  000b b764         [1]     TFR   Y,D
  000d e481         [3]     ANDB  1,SP
  000f a4b1         [3]     ANDA  2,SP+  ; existe pas sur 6809
  0011 b745         [1]     TFR   D,X
  0013 a680         [3]     LDAA  0,SP   ; lda
  0015 42           [1]     INCA 
  0016 b701         [1]     TFR   A,B
  0018 0475eb       [3]     TBNE  X,*-18 ;abs = 0006 existe pas sur 6809
   21:    return c;
  001b b714         [1]     SEX   B,D
   22:  }
  001d 1b81         [2]     LEAS  1,SP
  001f 3d           [5]     RTS   

Bizarrement le code optimisé a l'air plus crado, mais il ne prend que 37 cycles.. Mais c'est parce que sur S12X le TFR ne coute rien contrairement au 6809. Avec le tfr En tout cas le tfr à 1 cycle serait super sur 6809 où il est 6 fois plus lent.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 31 Mar 2011, 14:24 
Hors ligne

Inscription: 24 Juil 2010, 16:08
Messages: 454
Localisation: France
Bon, j'ai fait quelques essais avec gcc et je viens de réussir à compiler complètement un Hello World, à partir de bouts de code fournis par Gilles et de la dernière version de gcc-6809.

J'ai du bricoler un peu le script wrapper "ld" pour avoir un truc compatible thomson. Il faudrait faire ça proprement et créer une nouvelle cible de compilation, mais bon on fera avec pour le moment.

La ligne de commande à utiliser :
m6809-unknown-none-ld -o test.bin ../../lib/crt0_to8.o test.o -lgcc --map

La libgcc utilisée doit être celle du kit de développement de Gilles, je crois (j'ai fait plusieurs tests...)

L'option --map permet d'avoir un résumé de l'occupation mémoire

La partie la plus délicate se cache en fait dans le script ld. Le fichiers m6809-unknown-none-ld est en fait un script qui appelle aslink.

Il y a a un endroit un "case $0 in" qui permet de faire des trucs différents en fonction du nom du programme. On peut voir qu'il y a une version pour le CoCo de chez Tandy. Pour ma part j'ai choisi de modifier l'entrée "*)" dans cette liste, mais on peut aussi renommer le script pour avoir une entrée *m6809-thomson*), par exemple.

Les choses à mettre là dedans :
Code:
    options="-b .text=0xA000" #définit l'adresse de début du code. Pour une raison qui m'échappe le fichier binaire commencera en fait en A800.
    # Les autres segments qui peuvent être déplacés sont .bss (variables non initialisées), .data (variables initialisées), .ctors, .dtors (je sais pas à quoi ça sert), et vector (quand il est positionné, le linker fait une erreur...)
    # Ces réglages peuvent être modifiés lors de l'exécution du script, par exemple -Tbss=0xB000
    aslink_options="-nwxst" # Le "t" choisit le format binaire avec en-têtes du CoCo. C'est le même format que sur Thomson.
    exe_suffix=.bin # les exécutables générés ont l'extension .bin.


Avec ça on obtient un code exécutable sur Thomson :)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 31 Mar 2011, 15:41 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
PulkoMandy a écrit:
.ctors, .dtors (je sais pas à quoi ça sert), et vector (quand il est positionné, le linker fait une erreur...)


- ".ctors" et ".dtors" sont les entrées des fonctions d'initialisation et destruction qui sont appelées avant l'entrée dans le main() http://www.delorie.com/gnu/docs/gcc/gccint_149.html

- vector ca doit être la table des vecteurs d'interruption. (http://www.oddchange.com/gcc6809/manual.html#Interrupts). Sur thomson on ne peut pas changer son contenu. Ca peux expliquer le fait qu'on ne doit pas le spécifier au linker. En fait si on veut changer la table d'interruption il faut allez tripatouiller des entrées de la page zéro du moniteur (TIMEPT ($6027-$6028), IRQPT ($6020-$6021), FIRQPT ($6023-$6024), SWI1, 2, 3) et surtout ne pas terminer par RTI pour IRQPT et TIMEPT mais par JMP $E830.

sam.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 31 Mar 2011, 16:42 
Hors ligne

Inscription: 24 Juil 2010, 16:08
Messages: 454
Localisation: France
En effet. Je ne pense pas me lancer dans des trucs avec des interruptions en C pour le moment.

Pour ctor et dtor, j'ai l'impression que ce n'est utilisé qu'en C++, donc ça ne devrait pas poser trop de problèmes...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 31 Mar 2011, 21:59 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
en fait mes quelques essais avec gcc pour 6809 m'ont un peu calmé... complexe à mettre en oeuvre pour difficilement compiler quelques dizaines de lignes
le binaire en A800 ca me rappelle un truc... un truc pas forcement propre dans un fichier de conf perdu dans un coin...

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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 31 Mar 2011, 23:38 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
gilles a écrit:
en fait mes quelques essais avec gcc pour 6809 m'ont un peu calmé... complexe à mettre en oeuvre pour difficilement compiler quelques dizaines de lignes

10 lignes, voir plus. Mais quand on y arrive, on est vraiment content de soi: voir source. Au final ca fait des softs rigolos qu'on aurait jamais mené à terme en ASM pur: mt.sap ([edit] link broken, use the link below instead)

Image

sam.


Fichiers joints:
mt.zip [22.4 Kio]
Téléchargé 738 fois


Dernière édition par Samuel Devulder le 17 Juil 2017, 20:39, édité 2 fois.
Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 01 Avr 2011, 10:23 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
effet sympatique en effet. Je ne l'ai pas vu sur le disque d'essais sur les voxels, c'est la suite?

@pulko
pour A800 si tu a repris des morceaux sur ma page :
dans crt0_to8.s il y a :
Code:
        .module  main
        .area    __header (ABS)
        .org     0HA800

        .globl  start
start:
        .globl  ___main
        jmp     _main
___main:
        rts
        .globl  ___header_end
___header_end:
        .area __data
        .area __code


il y a sans doute moyen de remplacer cette constante par une variable de gcc (en supposant que ta chaine de compil reprenne ce fichier)

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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 01 Avr 2011, 19:32 
Hors ligne

Inscription: 24 Juil 2010, 16:08
Messages: 454
Localisation: France
Oui en effet j'ai utilisé ton crt0. J'vais me renseigner et jeter un oeuil aux fichiers pour le CoCo.


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

Heures au format UTC + 1 heure


Qui est en ligne

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