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

x86 32-bits / 64-bits Assembleur Discussion :

Envoyer/recevoir avec les bus USB, PCI, etc en Assembleur


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Lucas Panny
    Invité(e)
    Par défaut Envoyer/recevoir avec les bus USB, PCI, etc en Assembleur
    Bonjour,

    Je crois bien que c'est possible même si ce sera un vrai travail de titans.
    Mais ce que je veux savoir c'est comment faire cela ? Quels sont les jeux d'instructions ? En port série et port parallèle, il suffisait d'utiliser les instructions IN et OUT.
    Comment faire pour les bus ?

    En fait, quelle est la différence entre bus et port?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut aie, aie ...
    Bonjour,

    1/ sur quelle machine (un IBM-PC on suppose), avec quel système d'exploitation, et pourquoi faire ?

    2/ comme il a été dit sur d'autres forums ici tout dépend du système d'exploitation et de ce qu'il permet comme accès au matériel (de moins en moins par les temps qui courent !)

    3/ PCI ce n'est guère compliqué mais au fond assez peu utile puisqu'il faut connaître l'architecture de la carte que l'on veut adresser et bien souvent le fonctionnement des composants installés

    4/ USB, c'est une norme mélangeant matériel et logiciel donc il faut déjà savoir ce que l'on veut faire, s'il s'agit de récrire des pilotes pour tous les étages de la norme c'est carrément fastidieux, s'il s'agit de vouloir lire/écrire le port cela est simple, à condition de savoir ce que l'on doit lire et écrire !

    5/ différence entre bus et port ... un bus recouvre une réalité matérielle :un ensemble de pistes sur un C.I., des fils dans un câble ; ces conducteurs véhiculent des signaux électriques ayant une contre-partie logique : une autoroute est un bonne illustration. Un port c'est originellement une adresse dans l'espace mémoire accessible au processeur sur laquelle est "branché" un composant (coté composant le port se nomme "registre") ainsi lorsque le processeur (ou un composant annexe) lit ou écrit cet emplacement le composant reçoit ou présente une valeur ayant un sens (réglages, données, synchro ...). Dans le cas de certains bus séries industriels le port série du PC (à l'adresse 0x378 par exemple) sert de tête de bus.
    Avec le développement des communications (couches TCP IP par exemple) la notion de port a quitté le domaine exclusif du matériel).

  3. #3
    Lucas Panny
    Invité(e)
    Par défaut
    Je veux programmer de l'USB et du PCI sous un Pentium IV, sous Windows !! Mais ce que je me demande c'est si le programme assembleur se base autour des instructions IN/OUT ou à l'écriture/lecture à une plage d'adresses spécifique ??

    A propos du port, si je comprends bien, un port n'est qu'une adresse pour le processeur dont on peut envoyer des signaux définis !!!

  4. #4
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    les ports IO sont un espace d'addressage externe, cad qu'au lieu d'ecrire dans la ram, on ecrit dans les registres IO des peripheriques...

    pour le PCI et L'usb, c'est un travail de titans herculeens...
    il existe aussi des ports memoire, des addresse normales, qui, au lieu d'aboutir sur une memoire, aboutissent sur un port...

  5. #5
    Lucas Panny
    Invité(e)
    Par défaut
    Si je note bien, l'espace d'adressage par ex si c'est 64 bits n'est donc pas affectée totalement à la mémoire vive, il y a une partie pour le PCI, l'AGP, etc.

    Je ne comprends pas encore le port !!! Donc au lieu de faire IN/OUT en asm, on peut directement écrire ou lire une adresse : MOV [adresse_memo_port_par],eax

  6. #6
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Le plus "chiant" c'est que chaque constructeur gere ses peripheriques comme
    il l'entend.

    donc 2 convertisseurs USB -> RS232 (par exemple) de marque differente,
    et de fonctionnement identique (pour l'utilisateur)
    Ont bien des chances d'avoir des drivers totalement differents

    Du temps ou un PC n'avais qu'un port parallele et 2 ports serie, les
    choses etaient plus simples car tous etaient compatibles et la doc
    etait facile a trouver (meme sans internet)

    a+ Francois

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut XP ?
    IN/OUT avec XP c'est impossible sans pilote approprié, voir un fil ici-même, il faut utiliser "intpout32.dll", mais pour décoder ensuite de l'USB en attaquant directement le contrôleur c'est un travail très complexe. Je ne suis même pas sur qu'en "ring 3" l'on dispose d'une commutation assez rapide. Bref il me semble qu'il faut obligatoirement passer par pilote (voir divers fils ici-mêmes pour les documentations).
    Mais pourquoi est-ce faire ? est-ce que "CreateFile" ne peut pas suffire ?

  8. #8
    Lucas Panny
    Invité(e)
    Par défaut
    Bon, changeons alors de plate-forme, choisissons DOS 32 bits !!
    C'est toujours avec les instructions IN/OUT pour communiquer avec l'USB et le PCI ?
    On peut faire de l'IN/OUT sur XP avec des astuces comme le logiciel UserPort non ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    Hors XP IN/OUT fonctionnent, je ne connais pas "UserPort " mais "intpout32.dll" fonctionne très bien.
    Cependant le problème reste entier: décoder les paquets USB, programmer le contrôleur sont des tâches assez rudes. (cf http://acquier.ftp-developpez.com/usb/usb-protocole.pdf )

    Pour le PCI il faut d'abord détecter le mécanisme de lecture/écriture avec, par exemple, le code ci-après puis ensuite c'est assez simple :
    Code : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     ;>>>>>>>>>>>>>>>>>>>>>>> P C I <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
     
            mov     word [es:0x6010], 0    ; par défaut
            mov     ax, 0xB101             ; est-ce utile : machines sans PCI ?
            int     0x1A
            jc      .sansPci
            cmp     edx, 'PCI '
            jnz     .sansPci
     
    ; classe 1 = stockage de masse
    ; sous-classe 1 = controleur IDE
            mov     ax, 0xB103
            mov     ecx, 0x10180            ; test pour interface 0x80
            xor     si, si                  ; périphérique = 0
            int     0x1A
            jnc     @F
     
            mov     ax, 0xB103
            mov     ecx, 0x1018A            ; test pour interface 0x8A
            xor     si, si
            int     0x1A
            jnc     @F
     
            mov     ax, 0xB103
            mov     ecx, 0x10185            ; test pour interface 0x85
            xor     si, si
            int     0x1A
            jc      .sansPci
    ; initialisation
    @@:
            mov     ax, 0xB10A
            mov     di, 0x20                ; base de la mémoire registre 0x20
            int     0x1A
            jc      .sansPci
            and     cx, 0xFFF0              ; type à 0
            mov     [es:0x6010], cx         ; adresse de base stockée
     
            mov     eax, 0
            mov     es, ax
            mov     byte [es:0x6040], 1     ; système 1 par défaut
            mov     ax,0xB101
            int     0x1A
            cmp     ah, 0
            jne     @F
     
            mov     [es:0x6041], cl         ; dernier bus PCI du système
            mov     [es:0x6042], bx
            mov     [es:0x6044], edi
     
            bt      ax, 0                   ; b0 = système, b1 =système 2
            jc      @F
            bt      ax, 2
            jnc     @F
            mov     byte [es:0x6040], 2
    @@:
    .sansPci:

  10. #10
    Lucas Panny
    Invité(e)
    Par défaut
    Merci Stabia pour cet extrait de code !
    L'usb est-il un port ou un bus ? Si je retiens bien, c'est un bus utilisé comme un port !!!

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    Pardon d'avoir oublié les balises (je ne suis pas familier des forums)

    L'USB est un port (voir plusieurs parce que les cartes mères ou souvent 2 ou 4 contrôleurs) qui sert de tête de pont à un bus, lui-même subdivisable (5 étages maximum) en bus annexes.

Discussions similaires

  1. envoyer et recevoir les données avec les sockets
    Par thejavator dans le forum Langage
    Réponses: 8
    Dernier message: 11/02/2014, 22h29
  2. Java en web avec les interfaces USB ?
    Par keokaz dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 31/08/2011, 14h08
  3. Envoyer/Recevoir avec UdpSocket
    Par PatLam dans le forum Web & réseau
    Réponses: 9
    Dernier message: 20/11/2008, 16h50
  4. envoyer/recevoir avec client ftp
    Par eloman_75017 dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 27/06/2006, 22h50

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