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 16-bits Assembleur Discussion :

Fonctionnement de la fonction 2Ch de l'interruption DOS 21h ?


Sujet :

x86 16-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 Fonctionnement de la fonction 2Ch de l'interruption DOS 21h ?
    Bonsoir à tous,

    J'aurais besoin de vos lumières.
    La fonction 2Ch de l'interruption 21h permet de récupérer l'heure système.
    En retour de cette interruption, nous avons :
    CH = Heures
    CL = Minutes
    DH = Secondes
    DL = 1/100 de secondes

    Et mon questionnement est au sujet de DL

    L'horloge interne (RTC) ne contient pas les 1/100 !
    D'ailleurs, la seule chose qui permet de mettre à jour l'horloge est visiblement
    le TIMER0 qui génère une interruption 18,2 fois par seconde...
    Donc comment MS-DOS peut-il renvoyer une information avec une précision au 1/100 ??

  2. #2
    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
    Arrêtez tout !!!
    Je suis un boulet !

    Je viens de faire des essais, et en fait la valeur de DL est incrémentée de 5.49 à chaque interruption du TIMER0

    Donc la précision n'est pas au 1/100 de seconde mais au 1/18,2 seconde

  3. #3
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Je m'était posais la même question sur DL justement

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    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 368
    Points : 23 620
    Points
    23 620
    Par défaut
    D'ailleurs, Cette valeur — approximative avec cela — de 18,2 Hz m'a toujours laissé perplexe. Pourquoi choisir une valeur aussi étrange, fabriquer des quartz étalonnés sur cette fréquence, et que faire ensuite, en tant que programmeur, avec un timer aligné sur elle ? On a bien vu que ça posait problème ne serait-ce que pour implémenter une simple horloge. Et pourquoi avoir embarqué un tel dispositif dans une machine grand public comme le PC ?

    Curieusement, on s'aperçoit que 65536 ÷ 3600 = 18,204444… avec un zéro à la deuxième décimale, et les suivantes qui s'arrondissent par défaut. Autrement dit, cela donnerait un compteur qui ferait le tour de seize bits en exactement une heure, à 0,44 % près, et même à 0 % si la valeur du quartz était bien celle-ci et qu'elle n'était arrondie que dans le langage courant.

    Et pourtant, il n'en est rien. Comme beaucoup d'ordinateurs de cette époque et comme beaucoup d'appareils analogiques avant eux, le timer est aligné sur les fréquences utilisées par le NTSC, et plus précisément sur le tiers de la fréquence de la sous-porteuse couleur de 3,579545 MHz, valeur qui elle-même correspondaient plus ou moins aux standards initiaux mais a été choisi pour pouvoir être produite facilement à partir d'oscillateurs de fréquence faibles et entière. Plus exactement 315/88, soit (5×7×9)/(8×11) MHz. On obtient alors 315 ÷ 88 ÷ 3 = 1,19318181… Mhz. Et quand on divise cette valeur par 65536, là encore, on obtient 18,206509677… soit presque la même valeur mais pas tout-à-fait. Ça veut également dire qu'à peu de choses près, cette valeur permettrait de faire le tour de 32 bits (et plus 16) en une heure.

    Accessoirement, c'est cette même fréquence qui, augmentée d'un facteur 4÷3 (rien à voir avec le format des images télé, pourtant utilisé entre autres par NTSC), permet d'atteindre 4,772727… MHz, c'est-à-dire la fréquence d'horloge des 8086 et 8088 des premiers PC, soit légèrement en dessous des 5 Mhz maximum spécifiés par la documentation desdits micro-processeurs.

  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
    Salut Obsidian,

    Il y a même une page wiki qui en parle : https://en.wikipedia.org/wiki/Intel_8253

    les PCs se traînent de véritables "boulets" au nom de la compatibilité

  6. #6
    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
    dans mon os perso je ne me suis pas embeté avec le timer bancale et je l'ai illico reprogrammé pour qu'il tourne a 400hz:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    mov dx,43h                  
    mov al,36h                  ;paramˆtres de comptage
    out dx,al
    jmp $+2
    mov dx,40h                 ;diviseur de fr‚quence de l'irq 0 (LSB en premier)
    mov ax,2983                ;1193200/f  ;11932: t=10ms  100Hz
    out dx,al                               ;5966: t=5ms    200Hz
    jmp $+2                                 ;2983: t=2.5ms  400Hz
    mov al,ah                  ;puis le MSB
    out dx,al
    sous dos j'imagine qu'il faut un peu bidouiller pour avoir une interruption qui fonctionne a une telle fréquence et garder la compatibilité avec les fonction utillisant la fréquence de 18.2hz

  7. #7
    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
    Sous DOS, les fonctions qui utilisent le TIMER0 sont essentiellement
    - les lecteurs de disquettes : temps pendant lequel le lecteur tourne après un accès
    - et l'heure système : DOS ne lit la RTC qu'au lancement, et l'actualise ensuite toutes les 18,2s

    Donc pas de plantage grave en cas de modification

    J'avais fait ça aussi (augmenter la vitesse de l'int 08h) dans un programme qui réagissait avec le son.

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    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 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Citation Envoyé par Forthman Voir le message
    les PCs se traînent de véritables "boulets" au nom de la compatibilité
    Sans vouloir troller d'aucune manière que ce soit, le PC était en soi, et à mon goût, une mauvaise machine. L'IBM PC est apparu en 1981 et toute la génération de huit bits lui ont emboîté le pas (avec le TO7 en 1982) suivi de près par les 16 bits de 1985 à 1994 et c'était tant mieux parce que cela a permis de développer tout un tas de concepts vraiment intéressants pour l'époque, et agréables à utiliser. Le PC, lui, était lourd, encombrant, extrêmement cher, a toujours nécessité un moniteur dédié (tout aussi lourd, cher et encombrant à l'époque). C'était le premier de son genre mais il était réellement le successeur des machines de bureau qui étaient le fer de lance de leur compagnie mère : un engin robuste destiné à une utilisation intensive en milieu de travail.

    Mais côté design, entre les cornières des cartes d'extension qu'on se trimbale encore aujourd'hui, les timers alignés sur les antiques oscillateurs analogiques du NTSC qui n'a pourtant jamais été réellement utilisé par le PC, le 8088 et ses segments qui ont tant fait souffrir les petits développeurs à l'époque, surtout quand on était habitué aux Motorola, la gestion du clavier, et la gratification d'une carte série RS/232 (bonne chose) pour masquer un défaut électrique sur le premier slot (dixit Wikipédia. Bon ok, ce genre d'incident affecte toutes les compagnies) puis, plus tard, la ligne A20, le port PS/2 où tout est fragile, depuis la fiche mini-DIN jusqu'au protocole utilisé, et la gestion de la mémoire avec l'EMS, l'XMS, EMM386 et autres bidouilles de ce genre, on ne peut franchement pas dire que ce soit les qualités techniques du PC qui aient fait son succès.

    Mais bon, après avoir été imposé d'emblée en standard notamment grâce à son architecture ouverture qui a donné naissances aux compatibles, celle-ci a ensuite été animée avec des moteurs de fusée (des micro-processeurs toujours plus rapides), ce qui était une bonne chose pour le consommateur. Par contre, ça rendait obsolète toute optimisation basée sur la connaissance d'une architecture fixe, ce qui est aussi une bonne chose en soi mais qui faisait tout de même une grande partie de l'intérêt de l'informatique des années 1980.

  9. #9
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    En faite Obsidian je rejoins tout a fait ton avis , pour cela que quand quelqu'un ici veut apprendre l'assembleur j'essaye toujours de le guider autre chose que sur le PC (et le x86).
    Pour ma part tu as oublier aussi la compatibilité du x86 qui rend le PC encore moins ludique (a mes yeux).
    La plupart des programmeurs assembleurs que j'ai pu rencontré /échangé ont tous était assez d'accord avec moi le x86 c'est moche (certes c'est subjective) , la plupart préfère allégrement un M68000 que un x86.

    Le succès du PC n'est pas du grâce a MS-Dos et ensuite a Windows ?

  10. #10
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 427
    Points : 43 047
    Points
    43 047
    Par défaut
    le PC était en soi, et à mon goût, une mauvaise machine.
    Je ne sais pas si on peux dire cela mais quand on compare ce qu'on pouvait faire avec un Atari ST ou un Amiga à l'époque...

    le 8088 et ses segments qui ont tant fait souffrir les petits développeurs à l'époque
    La segmentation existe sur d'autre CPU mais n'est quasi pas utilisé. (je crois qu"un mode segmenté existait sur le 68000 mais je suis pas sûr, c'est loin pour moi). Savoir l'utiliser est un bon exercice. Il est à noter que l'usage de la segmentation est dorénavant abandonné en mode 64 bits sur x86_64 (CS, DS, ES forcés à 0, FS et GS restent utilisables d'après ce que j'ai cru comprendre), il reste présent en 32 bits. Le x86 démarre toujours en mode réel au power on.

    En tout cas, passer du 68000 au x86, c'est galère de par l'inversion des opérandes : instruction destination, source pour Intel et instruction source, destination pour 68000 ; ce dernier mode semblant la norme en dehors d'Intel.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  11. #11
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Si on compare les deux me semble que Atari St est plus 'puissant' : IBM PC et Atari ST
    Apres c'est sur si on compare apres le PC est beaucoup plus puissant (j'imagine que dans les année 90 le PC était plus puissant qu'un atari ST ou amiga).

    Dans le 68000 tu peux très bien faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    move.w  #$9000,$100000 ;met la valeur $9000 a l'adresse $100000
    Donc pas besoin de segmentation.
    Après ils ont fait un vrai 32 bits avec le 68020/68030 et y'a pas tant de différence que ça niveau assembleur (mais la faut mieux y'aller en C perso coder en asm 32bits c'est fastidieux)
    Le 68000 c'est le processeur des années 80/90 pour ma part hors PC il était présent vraiment partout (arcade/console/ordinateur/embarquée).

    Après mon coup de coeur reste le 6502

  12. #12
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 427
    Points : 43 047
    Points
    43 047
    Par défaut
    Apres c'est sur si on compare apres le PC est beaucoup plus puissant (j'imagine que dans les année 90 le PC était plus puissant qu'un atari ST ou amiga).
    Au contraire, tu pouvais faire beaucoup plus avec un ST ou un Amiga qu’avec un PC.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

Discussions similaires

  1. Fonctionnement INT 21h fonction 2Ch
    Par Forthman dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 17/10/2012, 10h37
  2. Réponses: 1
    Dernier message: 12/12/2011, 10h42
  3. fonctionnement de la fonction codelock
    Par moncef357 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/08/2008, 13h46
  4. [TASM][Débutant] Fonction 0AH de l'interruption 21h
    Par Punkfloyd1967 dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 13/04/2008, 14h08
  5. [PHP-JS] fonctionnement de la fonction 'header'
    Par enguerran dans le forum Langage
    Réponses: 8
    Dernier message: 02/06/2006, 08h10

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