IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres architectures Assembleur Discussion :

[6803] Assistance pour commencer le désassemblage


Sujet :

Autres architectures Assembleur

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut [6803] Assistance pour commencer le désassemblage
    Bonjour à tous,

    J'ai un projet qui me tient à cœur et qui est de désassembler un programme qui gère l'injection de ma (vieille) voiture pour en comprendre le fonctionnement. C'est un calculateur à base de Motorola 6803, avec une EPROM 27C128.

    J'ai à ma disposition pas mal d'outils de désassemblage, d'édition, etc. J'ai une bonne partie des adresses des tableaux de données, etc. J'ai réussi à obtenir des fichiers désassemblés d'une bonne qualité et je voudrais me lancer dans l'interprétation du code, maintenant.

    Étant plus orienté « info de gestion » et bases de données, je n'ai pas beaucoup de connaissances dans la programmation de micro-contrôleurs et, du coup, je piétine, et je n'obtiens pas de résultat probant. Qui pourrait m'aider un peu sur un exemple, ce qui me permettrait de commencer le travail ?

    Exemple de ce que j aimerais obtenir :

    Code 6803 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    OCR2_H	=	$001A
    OCR2_L	=	$001B
    OCR3_H	=	$001C
    OCR3_L	=	$001D
    ICR2_H	=	$001E
    ICR2_L	=	$001F
    L0040	=	$0040
    L0041	=	$0041
    L0042	=	$0042
    L0043	=	$0043
    L0045	=	$0045
    L0046	=	$0046
    L0047	=	$0047
    L0048	=	$0048
    adc_raw_tps =	$0049
    adc_raw_airtemp =	$004A
    adc_raw_enginetemp =	$004B
    inj_time_4us =	$004C
    L004E	=	$004E
    L004F	=	$004F
    L0050	=	$0050
    L0051	=	$0051
    L0052	=	$0052
    L0053	=	$0053
    adc_raw_co2pot =	$0054

    ou encore :

    Code 6803 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FBC6	                	db	$60, $60, $60, $40, $40, $40, $20, $20, $20, $20
    FBD0	                airtemp_table:
    FBD0	                	db	$F0, $F0, $F0, $BF, $B3, $A6, $A1, $9E, $98, $94
    FBDA	                	db	$8E, $88, $7F, $72, $5A, $00

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 780
    Points
    23 780
    Par défaut
    Il nous faudrait la référence exacte de ton 6803 car la plupart des micro-contrôleurs sont déclinés en plusieurs variantes, notamment au niveau du câblage, et cela peut avoir une importance par rapport à ce qu'il doit piloter. Ensuite, il te faut la datasheet de ton micro-contrôleur.

    Attention, toutefois : le 6803 embarque de la ROM et de la RAM interne au circuit qu'il faudra lire si tu ne l'as pas fait. Je ne sais pas a priori comment, mais la plupart des micro-contrôleurs permettent de le faire SAUF bit de protection explicite. À côté de cela, ce micro-contrôleur peut fonctionner dans différents modes (ex : ROM externe ou non, etc.) qui sont définis en applicant des niveaux haut ou bas sur trois ports du circuit à la mise sous tension.

    Après, le désassemblage, c'est comme faire des mots croisés : plus tu progresses, plus c'est facile, car les infos accumulées au fur et à mesure se recoupent. J'ai fait, il y a quelques années, le désassemblage pour mon intérêt personnel des ROMs de mon vieux huit-bits, pour des raisons de documentation manquante et d'interopérabilité, soit environ 40000 lignes d'assembleur brut sans espace. Pour cela, la fonction de « chercher-remplacer » de ton éditeur de texte est d'un grand secours : chaque fois que tu identifies la fonction d'une routine, tu recherches dans ton fichier désassemblé toutes les occurrences de l'adresse de son point d'entrée, et tu le remplaces par lui-même, suivi d'un commentaire qui le décrit. Au bout d'un moment, ton code finit par se commenter tout seul ! :-)

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Il nous faudrait la référence exacte de ton 6803 car la plupart des micro-contrôleurs sont déclinés en plusieurs variantes, notamment au niveau du câblage, et cela peut avoir une importance par rapport à ce qu'il doit piloter. Ensuite, il te faut la datasheet de ton micro-contrôleur.

    Attention, toutefois : le 6803 embarque de la ROM et de la RAM interne au circuit qu'il faudra lire si tu ne l'as pas fait. Je ne sais pas a priori comment, mais la plupart des micro-contrôleurs permettent de le faire SAUF bit de protection explicite. À côté de cela, ce micro-contrôleur peut fonctionner dans différents modes (ex : ROM externe ou non, etc.) qui sont définis en applicant des niveaux haut ou bas sur trois ports du circuit à la mise sous tension.

    Après, le désassemblage, c'est comme faire des mots croisés : plus tu progresses, plus c'est facile, car les infos accumulées au fur et à mesure se recoupent. J'ai fait, il y a quelques années, le désassemblage pour mon intérêt personnel des ROMs de mon vieux huit-bits, pour des raisons de documentation manquante et d'interopérabilité, soit environ 40000 lignes d'assembleur brut sans espace. Pour cela, la fonction de « chercher-remplacer » de ton éditeur de texte est d'un grand secours : chaque fois que tu identifies la fonction d'une routine, tu recherches dans ton fichier désassemblé toutes les occurrences de l'adresse de son point d'entrée, et tu le remplaces par lui-même, suivi d'un commentaire qui le décrit. Au bout d'un moment, ton code finit par se commenter tout seul ! :-)
    merci pour ta réponse

    le microprocesseur est un 6803 U4, il me semble qu'il fonctionne en mode 2.

    j'ai joint la description .

    voici un lien vers la datasheet
    http://forzavx.com/gecu/hw/MC6803U4-...et-Archive.pdf

    j'utilise pour le desassemblage l'utilitaire suivant :

    http://www.techedge.com.au/utils/dhc11.htm

    Je sais qu il y a une routine style watchdog qui scrute en permanence les defaut des capteurs et si une est detecté, un signal d'erreur codé est envoyé sur une prise de diag.

    et enfin, le lien d'une personne qui a deja fait ce travail, je ne sais pas encore si il acceptera de m'aider, j'attend sa réponse :
    http://www.bigturbo.co.uk/
    Images attachées Images attachées  

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 780
    Points
    23 780
    Par défaut
    Ok, je vois donc que tu en es déjà à un stade relativement avancé. Sur ce genre d'architecture, surtout dans l'embarqué, on joue beaucoup sur la durée en cycles des instructions elles-mêmes. Cela permet de faire des temporisations très précises, et c'est fort probablement le cas aussi dans une centrale d'injection.

    Maintenant, à ce stade, impossible de t'en dire plus sans voir le code proprement dit.

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    voici un fichier tout chaud

    j ai deja mis 2 ou 3 labels que je connais deja comme le regime de coupure de l injection
    Fichiers attachés Fichiers attachés

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 780
    Points
    23 780
    Par défaut
    Personnellement, je commente ligne à ligne, comme suit :

    Code 6803 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    C000    8E 00 FF                ldS     #$00FF          Place le pointeur de pile au sommet de la RAM
    C003    0F                      di                      Désactive les interruptions (travail temps réel)
    C004    DC 15                   ldD     L0015           | Lit le compteur (en $15-$16), ajoute 20 en décimal
    C006    C3 00 14                addD    #$0014          | et place le tout dans le 3ème Compare Register.
    C009    DD 1C                   stD     L001C           | autrement dit : réveille-nous à t + 20 cycles (1 cycle = 1 µs).
     --
    C00B    86 84                   ldaA    #$84            | Règle le Timer Control Register 1 (TCR1)
    C00D    97 17                   staA    L0017           | OLVL3=1, OE3=Fais sortir l'état du timer sur la broche P12.
     --
    C00F    86 2E                   ldaA    #$2E            | "00101110" dans le Data Register du port 1. Chaque bit correspond
    C011    97 02                   staA    L0002           | à l'état d'une broche, sous reserve de l'état du Direction Register.
     --
    C013    86 FE                   ldaA    #$FE            | "11111110" : toutes les broches du port 1 en sortie, sauf la
    C015    97 00                   staA    L0000           | premiere. P10.
     --
    C017    86 10                   ldaA    #$10
    C019    97 03                   staA    L0003
    C01B    86 14                   ldaA    #$14
    C01D    97 01                   staA    L0001
     
    …

    Après, cela prend tout son sens quand on connaît le câblage de chaque broche Pxx de ton 6803 avec son environnement. En l'occurence, P12 semble être conçue pour envoyer soit des impulsions régulières, soit, à tout le moins, un signal monostable avec 20 µs de retard.

  7. #7
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    tu es matinal

    oulla, je n'aurais déjà pas trouver tout ca ....

    tu crois qu'il faut essayer de decoder du début à la fin ? ou bien partir d'un point plus ou moins connu et de remonter dans les fonctions ?

    merci pour ton aide

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 780
    Points
    23 780
    Par défaut
    Citation Envoyé par newcos Voir le message
    tu crois qu'il faut essayer de decoder du début à la fin ? ou bien partir d'un point plus ou moins connu et de remonter dans les fonctions ?
    Il vaut mieux commencer par le début, à mon avis, ne serait-ce que parce que ton programme commence par toutes les phases d'initialisation, qui te seront nécessaires pour connaître l'état de ton circuit lorsque lesdites fonctions l'utiliseront.

    Toutefois, il y a 109 « CALL » et « CALLR » dans ton listing, mais seulement 31 différents, soit autant de sous-routines. Les routines les plus appelées sont :

    Code 6803 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         23 call    LE495
         14 call    LE5E9
          8 call    LE544
          5 call    LE57D

    Tu peux commencer par celles-ci si tu le souhaites mais moi, j'attendrais de tomber dessus pour la première fois. Lorsque c'est le cas, tu la commentes en entier et, lorsque tu as compris à quoi elle sert, tu fais un chercher-remplacer comme dit ci-dessus pour coller automatiquement un commentaire en face de tous les CALL correspondants.

    Edit : j'ai eu du mal, par contre, parce que sur 68xx, CALL et CALLR sont censés s'appeler JSR et BSR. C'est pareil sur 6809, par exemple, et c'est confirmé par ta datasheet, codes-opérations à l'appui. Je ne sais pas pourquoi ton désassembleur s'amuse à les renommer.

  9. #9
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Personnellement, je commente ligne à ligne, comme suit :

    Code 6803 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    C000    8E 00 FF                ldS     #$00FF          Place le pointeur de pile au sommet de la RAM
    C003    0F                      di                      Désactive les interruptions (travail temps réel)
    C004    DC 15                   ldD     L0015           | Lit le compteur (en $15-$16), ajoute 20 en décimal
    C006    C3 00 14                addD    #$0014          | et place le tout dans le 3ème Compare Register.
    C009    DD 1C                   stD     L001C           | autrement dit : réveille-nous à t + 20 cycles (1 cycle = 1 µs).
     --
    C00B    86 84                   ldaA    #$84            | Règle le Timer Control Register 1 (TCR1)
    C00D    97 17                   staA    L0017           | OLVL3=1, OE3=Fais sortir l'état du timer sur la broche P12.
     --
    C00F    86 2E                   ldaA    #$2E            | "00101110" dans le Data Register du port 1. Chaque bit correspond
    C011    97 02                   staA    L0002           | à l'état d'une broche, sous reserve de l'état du Direction Register.
     --
    C013    86 FE                   ldaA    #$FE            | "11111110" : toutes les broches du port 1 en sortie, sauf la
    C015    97 00                   staA    L0000           | premiere. P10.
     --
    C017    86 10                   ldaA    #$10
    C019    97 03                   staA    L0003
    C01B    86 14                   ldaA    #$14
    C01D    97 01                   staA    L0001
     
    …

    Après, cela prend tout son sens quand on connaît le câblage de chaque broche Pxx de ton 6803 avec son environnement. En l'occurence, P12 semble être conçue pour envoyer soit des impulsions régulières, soit, à tout le moins, un signal monostable avec 20 µs de retard.
    merci pour ca, je trouve ce genre d'info dans le datasheet ?
    pourrais tu me conseiller des lectures pour m aider à interpreter le code ?

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 780
    Points
    23 780
    Par défaut
    Citation Envoyé par newcos Voir le message
    merci pour ca, je trouve ce genre d'info dans le datasheet ? pourrais tu me conseiller des lectures pour m aider à interpreter le code ?
    Oui, tout ce que tu as besoin de savoir se trouve dans la datasheet. Évidemment, c'est plus simple quand on a un peu l'habitude de l'architecture des 68xx. J'ai personnellement beaucoup bossé sur 6809.

    Sur la première page, tu vois le brochage du 6803. On s'aperçoit assez vite qu'il est principalement occupé par les quatre ports 8 bits P[1-4][0-7].

    Ces ports peuvent fonctionnent normalement en mode données indépendantes, c'est-à-dire que tu définis pour chaque ligne si elle doit fonctionner en entrée ou en sortie et, dans ce dernier cas, l'état de chaque ligne en écrivant dans le registre correspondant, comme sur un port parallèle d'imprimante. C'est aussi simple que puissant. Mais ils peuvent également servir de bus pour lire une mémoire externe (c'est ton cas), ou alors être asservis à d'autres parties de ton circuit.

    Par exemple, le compteur est un compteur libre incrémenté à chaque coup d'horloge. Mais tu disposes de trois registres 16 bits de comparaison qui sont confrontés en permanence à la valeur de ce compteur et qui font passer un bit à un quand cette valeur est atteinte. Tu peux donc te servir de chacun d'eux comme timer, pour te signaler que l'heure attendue est atteinte, mais aussi comme générateur d'impulsion si tu remets le compteur à zéro à chaque fois (ou mets à jour le registre de comparaison), etc. Or, l'état du bit en question peut être directement répété sur une des broches externes (P12 en l'occurence). Le timer peut donc être utilisé pour piloter un équipement externe.

    Donc, ce qu'il faut faire, c'est :
    • Voir page 1 le brochage et repérer sur ta platine la destination de chaque port, surtout ceux qui viennent de tes capteurs ou vont éventuellement piloter tes injecteurs. S'il en manque, on pourra éventuellement essayer de les déduire, mais pas à partir de rien ;
    • Voir page 17 la signification de chaque registre : les adresses de 0000 à 00FF servent à piloter ton micro-contrôleur. Ensuite, tu peux faire la correspondance dans ton code. Par exemple, on voit que $0015-$0016 est la réplique en lecture seule du compteur, ce qui m'a permis d'en déduire le rôle des lignes C004 et suivantes dans ton code ;
    • Voir dans les pages suivantes la description exacte du rôle de chaque port ;
    • Voir encore un peu plus loin le fonctionnement des instructions que tu ne connais pas ;
    • Voir vers la fin la table des cycles pour chaque instruction, ce afin que tu puisses mesurer la durée exacte d'une boucle. C'est très précis, et c'est nécessaire pour gérer proprement ton moteur.


    Avec ces cinq points, tu devrais être en mesure d'y arriver.

  11. #11
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    merci pour ta patience

    tu as raison , je vais essayé de reperer les broche.... avec un multimetre sur le circuit ?

  12. #12
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 780
    Points
    23 780
    Par défaut
    Si tu veux faire ton repérage avec un testeur de continuité (à l'ohmmètre), il faut d'abord retirer la platine de son environnement et les mesures risquent de ne pas être fiables (liaisons par semi-conducteurs, inductances, diodes, etc.). Tu n'as pas la possibilité de le faire visuellement, en suivant les pistes ?

  13. #13
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Si tu veux faire ton repérage avec un testeur de continuité (à l'ohmmètre), il faut d'abord retirer la platine de son environnement et les mesures risquent de ne pas être fiables (liaisons par semi-conducteurs, inductances, diodes, etc.). Tu n'as pas la possibilité de le faire visuellement, en suivant les pistes ?
    je viens de faire un test en suivant les pistes, je n'arrive pas à grand chose en essayant de suivre les pistes.

    je vais commencer déjà par affiner mon fichier desassemblé par rapport aux registre du 6803

    voici le shema



    et une photo du circuit si ca vous parle


  14. #14
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 780
    Points
    23 780
    Par défaut
    En fait, la majorité du travail a déjà été faite par le site en question.

    Il y a une liste des tables en tous genres qui se trouvent dans ta ROM, il y a un synoptique qui t'emmène vers le brochage externe … bref, tout ce qui n'est pas dans la datasheet.

    Donc, en gros, commente ton code linéairement comme je l'ai fait et à chaque fois que tu ne comprends pas quelque chose ou ne sait pas à quoi elle sert, regarde d'abord dans la datasheet, puis sur le site. L'info s'y trouvera forcément.

    En gros, il y a deux choses qui peuvent te bloquer à chaque ligne : l'instruction proprement dite et son opérande. Dans le deuxième cas, il faut d'abord identifier à quoi correspond le port dans lequel le programme écrit, et ensuite être sûr d'avoir compris pourquoi il le fait. Il se peut que la réponse à cette dernière question se trouve dans les lignes suivantes mais, surtout, veille à ne jamais laisser trop longtemps cette question en suspens.

  15. #15
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    ok, je comprends.

    J'ai fini mon fichier de définition, là. Du coup, lors du désassemblage, j'ai déjà des labels, des tables qui se remplacent, ça devrait m'aider.

    Mais bon. Je me demande dans quoi je me suis lancé.

  16. #16
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 780
    Points
    23 780
    Par défaut
    Citation Envoyé par newcos Voir le message
    Mais bon. Je me demande dans quoi je me suis lancé.
    Le désassemblage en lui-même ne devrait pas poser de problème. Par contre, le pilotage des injecteurs en soi réclame à mon avis d'être initié. À mon avis, même si le site donne beaucoup d'informations, il faut au minimum savoir ce à quoi il faut s'attendre en sortie pour pouvoir le reconnaître en lisant le code.

Discussions similaires

  1. Langage pour commencer avant de passer au C++
    Par wolfjeremy dans le forum Débuter
    Réponses: 25
    Dernier message: 18/09/2005, 11h37
  2. Réponses: 13
    Dernier message: 13/09/2005, 09h41
  3. [JDBC] Exemple d'application pour commencer
    Par Le Pharaon dans le forum JDBC
    Réponses: 15
    Dernier message: 08/09/2005, 18h43
  4. [CR] Quel livre pour commencer Crystal en FR ?
    Par AYITE dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 17/01/2005, 16h39
  5. Assistance pour un projet logiciel perso
    Par sincère dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/11/2004, 13h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo