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 :

1er Mo = 2eme Mo


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    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 1er Mo = 2eme Mo
    Bonjour à tous,

    Une question m'interroge sur la mémoire de mes PC.
    J'utilise dans mon boulot des PC pour gérer du matériel électro-mécanique
    (table à découper, appareil de mesure ...etc...)
    Les versions définitives se passent d'OS, mais la version en cours de
    développement se fait ... sous DOS (freedos plus exactement)

    Alors oui, j'utilise le processeur en mode REEL

    Pourquoi ? bien parce que je ne suis pas informaticien, et que j'ai lâché la
    programmation en même temps que mes études dans les années 90.
    Donc je fais avec ce que je connais.

    Bon, par contre, avec l'évolution des PC, j'ai quand-même eu envie de
    profiter de plus de 1Mo de RAM, et d'une résolution de plus de 320x200
    en 256 couleurs (VGA de base)

    J'ai donc commencé à me pencher sur le mode FLAT qui donne accès à toute
    la RAM, et au standard VESA qui permet d'utiliser des résolutions plus
    confortables.

    J'ai donc réalisé un petit TSR qui bascule en mode FLAT, et je me suis rendu
    compte que la mémoire des cartes vidéo se trouvait au bout de la mémoire,
    suivant les PC en D000:0000h E000:0000h ou F000:0000h
    Actuellement j'utilise sur une table à découper une résolution de 1280x1024
    (mais toujours en 8 bits pour garder mes anciens sprites )

    Et là, dernièrement j'ai été confronté à un problème. dès que je voulais
    stocker des données >1Mo sur certaines machines ça marchait pas pas sur d'autres

    Après un petit DUMP de la mémoire, je me suis rendu compte que sur
    certaines machines, le 1er Mo était copié/collé sur le 2eme Mo

    Alors j'ai contourné le problème en n’utilisant la mémoire qu'à partir du
    3eme Mo pour mes données, mais si quelqu'un avait une explication

    à plus
    François

    PS: pfffiiiou ! j'avais envie de parler moi ce matin

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    D'accord donc au lieu de n'être que sur le 1er mo, ça va se retrouve aussi sur le 2ème.
    Donc le 1er et le 2ème sont une copie identique.

    Bah si le code et les machines sont identique, c'est clair que c'est étrange.

  3. #3
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    sur certaine machine il y a un mécanisme de blocage des lignes d'adresse 20 et + au niveau de la puce 8042
    alors pourquoi? j'en sais rien mais pour le débloquer faut faire comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ;active la ligne A20 pour pouvoir ‚crire dns la zone memoire superieur
    mov al,0D1h          ;active A20
    out 64h,al           ;la prochaine ‚criture sur 60h sera pour le port de sortie
    call attporok
    mov al,0DFh
    out 60h,al           ;envoie de la configuration pour l'activation de l'A20
    call attporok
    mov al,0FFh          ;envoie une commande d'impulsion sur aucune des sorties
    out 64h,al            
    call attporok
    avec rangé quelque part cette petite sous fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    attporok:        ;attend la fin du traitement des donn‚es par la puce 8042
    in al,64h
    jmp $+2
    test al,1
    jz suit842
    in al,60h
    in al,64h
    suit842:
    and al,2
    jnz attporok
    ret
    c'est tiré du code source de ma tentative d'os en mode protégé, mais je l'avais découvert lors du codage d'un autre os mais en Flat (c'est vrais que c'est bieng pratique le flat)

    je suis bien curieux, qu'est ce que tu uttilise come intreface entre tes pc et ton materiel electromécanique?

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Hello,

    bifur t'a donné la bonne réponse, mais…

    Citation Envoyé par Forthman Voir le message
    Après un petit DUMP de la mémoire, je me suis rendu compte que sur certaines machines, le 1er Mo était copié/collé sur le 2eme Mo

    Alors j'ai contourné le problème en n’utilisant la mémoire qu'à partir du
    3eme Mo pour mes données, mais si quelqu'un avait une explication
    … des plages de données spontanément répliquées en mémoire avec des bornes multiples d'une puissance de 2 est typique d'un bit d'adresse ignoré. Le compteur d'adresse revient alors à zéro au lieu de passer au rang supérieur. Sur les petits systèmes bon marché, il est souvent plus facile de laisser ce phénomène se produire plutôt que forcer le reste du plan à passer à 00 ou FF si on ne s'en sert pas, car il suffit de connecter directement les lignes du bus d'adresse qui nous intéressent plutôt que mettre un décodeur logique qui va toutes les analyser et n'activer le périphérique que si on se trouve dans la bonne plage.

    Citation Envoyé par bifur Voir le message
    sur certaine machine il y a un mécanisme de blocage des lignes d'adresse 20 et + au niveau de la puce 8042
    alors pourquoi? j'en sais rien mais pour le débloquer faut faire comme ça:
    Effectivement, le cas de la ligne A20 était typique sur les PC exploités en mode et réel et, même aujourd'hui, il est encore émulé par compatibilité (enfin au moins sur des machines d'il y a 6 ou 7 ans). Le verrou a été introduit lorsque les PC sont passés du 8086 original au 286 (la première évolution processeur, donc) et donc de 20 bits d'adresse à 24.

    Les concepteurs du PC ont été obligés de le faire car certains logiciels utilisaient la congruence naturelle de l'adressage et plantaient sur les nouvelles machines. Même chez un mastodonte tel qu'IBM et sur un ordinateur comme le PC qui, de mon point de vue, est particulièrement mal conçu, ça a dû provoquer des suées chez les ingénieurs parce que le PC était encore naissant et les logiciels pas si nombreux. Introduire un tel workaround pour de mauvaises raisons et devoir le maintenir ensuite ad vitam m'aurait particulièrement mis en colère. :-)

  5. #5
    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
    Merci Obsidian pour ces explications (pas forcément très claires dans mon esprit )

    Les PC incriminés (ceux qui ont le 1er Mo copié sur le second) ne sont pas
    des PC "Chinois" mais des IBM thinkcentre
    Alors que tous mes autres PC (Chinois eux car de marque ASUS )
    ne me font pas ce ... "truc"

    Merci Bifur, j'ai inséré le bout de code que tu m'as donné, mais ça ne lui fait
    ni chaud ni froid

    Bon, je vais rester comme ça pour le moment, Ce n'est pas parce qu'il va me
    manquer 1Mo sur 1Go que je vais pleurer (surtout pour un programme 16 bits qui ne devrait pas dépasser les 10Mo )

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par Forthman Voir le message
    Les PC incriminés (ceux qui ont le 1er Mo copié sur le second) ne sont pas des PC "Chinois" mais des IBM thinkcentre Alors que tous mes autres PC (Chinois eux car de marque ASUS ) ne me font pas ce ... "truc"
    Et ce sont les IBM ThinkCentre qui ont raison ! Ce qui se comprend puisque ça vient de là. C'est un peu comme le fflush(stdin) : ce sont les systèmes qui émulent le comportement normal qui semblent buguer.

    Deux possibilités pour les ASUS : soit le bit A20 est automatiquement activé par le BIOS, soit sa gestion a purement et simplement disparu. C'est quand même censé être utilisé uniquement par une poignée de logiciels 16 bits produits entre 1981 et 1984.

    Merci Bifur, j'ai inséré le bout de code que tu m'as donné, mais ça ne lui fait
    ni chaud ni froid

    Bon, je vais rester comme ça pour le moment, Ce n'est pas parce qu'il va me
    manquer 1Mo sur 1Go que je vais pleurer (surtout pour un programme 16 bits qui ne devrait pas dépasser les 10Mo )
    Regarde aussi mon lien : il y a un code similaire et même une version alternative en trois lignes seulement. Le « jmp $+2 » du code de Bifur ne m'a pas l'air catholique… :-)

  7. #7
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    c'est normal que ce ne soit pas catholique vu que je suis athée, pour ce qui est du jmp $+2 je croie l'avoir inséré la pour ralentir la cadence des "in" sur le port 64h (je ne sait plus pourquoi d'ailleur...c'est si vieux)ou parce que j'avait bidouillé un truc avec du code pompé quel part (pas tapé j'était jeune a l'époque)

    quoi qu'il en soit mon code ne fonctionne pas chez forthman donc il va falloir que je révise ça, une fois je suis tombé sur un clavier récalcitrant qui n'acceptait pas mon code fait avec les pieds et qui m'avait aussi obligé a revoire ma copie

    par contre si il n'y a que le 2eme et le 1er Mo qui sont identique il ne s'agit peut être pas d'un problème de ligne A20 et la je sèche

  8. #8
    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
    J'avais pas vu le lien d'Obsidian

    Bon, alors j'ai testé tous les codes que j'ai pu trouvé, et rien n'a marché

    MAIS !. ...

    J'ai testé lINT 15h fonction 24h sous fonction 01h et là miracle !
    (enfin sur le lien il y avait juste indiqué de mettre 2401h dans ax )

    Du coup vous m'avez résolu DEUX problèmes
    Oui car depuis hier j'avais fait une croix sur le mode 1280x1024 (résolution native de mon moniteur) car je n'arrivais pas à adresser plus de 1Mo sur la
    carte graphique (je m'était rabattu sur le mode 1024x768 8 bits)

    Donc j'ai modifié mon programme pour basculer en mode FLAT pour qu'il
    teste A20 et qu'il valide le machin s'il ne l'est pas)

    Merci encore tout roule maintenant

    edit: je viens de tester sur mes 3 machines ASUS, et cette fonction n'est pas supportée. par contre, comme elle ne fait rien de mal, je vais la mettre dans mon programme de mise en place du FLAT

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Effectivement, on en trouve une documentation notamment ici. Apparemment, elle aurait été introduite avec le PS/2 et IBM la marque comme optionnelle.

    Bon nombre de fonctions de l'int 15h sont par nature spécifiques à un fabriquant et le PS/2 est considéré comme un spin-off du PC même si, surtout aujourd'hui, il n'y a pas beaucoup de différences. C'est bien dommage parce qu'il y a des fonctions optionnelles qui auraient dû être standardisées partout et en particulier pour la pérennité, « 15h 240xh» en est une.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insertion 2 tables (X records dans la 1er, 1 record pour la 2eme)
    Par cedric774 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 27/02/2013, 16h33
  2. Réponses: 2
    Dernier message: 10/09/2009, 20h54
  3. liste de la 2eme listebox selon choix de la 1er
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 29/08/2009, 14h55
  4. Passage d'un objet du 1er plan au 2eme plan
    Par kinouseb dans le forum C#
    Réponses: 1
    Dernier message: 26/01/2009, 12h53
  5. 1er formulaire reload 2eme formulaire
    Par themateo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/11/2007, 16h49

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