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 :

Erreur dans BosoKernel pour les interruptions ?


Sujet :

Autres architectures Assembleur

  1. #1
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut Erreur dans BosoKernel pour les interruptions ?
    Voila je me demandais si il n'yavait pas une erreur dans les tutoriaux de BosoKernel.

    http://inferno.cs.univ-paris8.fr/~am/tutorial/os/tutorial00.html

    L'IDT qui contient les descripteurs d'intérruption doit contenir dans les 32 premières entrées les descripteurs pour les 32 exceptions que peuvent lever les processeurs x86.
    De ce fait il s'agit d'interruptions qui n'ont aucun lien avec le PIC 8259A mais d'interruptions internes au processeur non ?
    Dans ce cas si j'ai raison, les 32 premières fonctions bas niveaux définies en assembleur ne devraient pas contenir ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mov al,0x20
    out 0x20,al
    qui correspond à l'envoit d'un EOI (End Of Interrupt) au PIC.

    J'ai raison ou j'ai rien compris ?

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Il me semble que tu as raison : il n'y a lieu d'envoyer un EOI au(x) 8259 que s'il s'agit d'une IRQ.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Merci pour la confirmation

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Salut,

    Logiquement, pareille, je confirme on acquite le 8259 que pour les 16 IRQ's !
    (arf les copier/coller du matin mal reveillé...)

    Moi ce qui me chiffonne le plus c'est que je ne vois pas la sauvgarde ou la reatribution du contexte.
    je pense qu'il n'y en à pas non ? c'est tres dangeureux non ?

    A++

  5. #5
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    En effet il n'y en a aucune ! C'est trés dangereux

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Salut,

    J'ai ajouté un bridge pour les exceptions et les irq avec sauvgarde du contexte et restitution. Cela marche bien, je vous encourrage a faire cette modif, car la gestion de base est tres dangeureuse.

    A++

    Hexanium

  7. #7
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    On pourrait voir ton code ?

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 19
    Points : 2
    Points
    2
    Par défaut [PIC 8259] Initialisation de ICW1
    Bonjour tout le Monde

    En maitre pour initialiser ICW1:

    mov al,0x11 ; initialisation de ICW1
    out 0x20,al
    jmp .1 ;temps d'attente

    .1:
    initialisation de ICW2

    initialisation de ICW3

    initialisation de ICW4

    démasquage des interruptions...


    Cordialement

  9. #9
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 440
    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 440
    Points : 43 082
    Points
    43 082
    Par défaut
    Pour initialiser correctement les pics et éventuellement les remapper :

    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
    /* reinitialize the PIC controllers, giving them specified vector offsets
       rather than 8h and 70h, as configured by default */
     
    #define ICW1_ICW4	0x01		/* ICW4 (not) needed */
    #define ICW1_SINGLE	0x02		/* Single (cascade) mode */
    #define ICW1_INTERVAL4	0x04		/* Call address interval 4 (8) */
    #define ICW1_LEVEL	0x08		/* Level triggered (edge) mode */
    #define ICW1_INIT	0x10		/* Initialization - required! */
     
    #define ICW4_8086	0x01		/* 8086/88 (MCS-80/85) mode */
    #define ICW4_AUTO	0x02		/* Auto (normal) EOI */
    #define ICW4_BUF_SLAVE	0x08		/* Buffered mode/slave */
    #define ICW4_BUF_MASTER	0x0C		/* Buffered mode/master */
    #define ICW4_SFNM	0x10		/* Special fully nested (not) */
     
    /*
    arguments:
    	offset1 - vector offset for master PIC
    		vectors on the master become offset1..offset1+7
    	offset2 - same for slave PIC: offset2..offset2+7
    */
    void PIC_remap(int offset1, int offset2)
    {
    	unsigned char a1, a2;
     
    	a1 = inb(PIC1_DATA);                        // save masks
    	a2 = inb(PIC2_DATA);
     
    	outb(PIC1_COMMAND, ICW1_INIT+ICW1_ICW4);  // starts the initialization sequence (in cascade mode)
    	io_wait();
    	outb(PIC2_COMMAND, ICW1_INIT+ICW1_ICW4);
    	io_wait();
    	outb(PIC1_DATA, offset1);                 // ICW2: Master PIC vector offset
    	io_wait();
    	outb(PIC2_DATA, offset2);                 // ICW2: Slave PIC vector offset
    	io_wait();
    	outb(PIC1_DATA, 4);                       // ICW3: tell Master PIC that there is a slave PIC at IRQ2 (0000 0100)
    	io_wait();
    	outb(PIC2_DATA, 2);                       // ICW3: tell Slave PIC its cascade identity (0000 0010)
    	io_wait();
     
    	outb(PIC1_DATA, ICW4_8086);
    	io_wait();
    	outb(PIC2_DATA, ICW4_8086);
    	io_wait();
     
    	outb(PIC1_DATA, a1);   // restore saved masks.
    	outb(PIC2_DATA, a2);
    voir :
    http://wiki.osdev.org/PIC
    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. Réponses: 3
    Dernier message: 04/03/2016, 10h16
  2. [JAX WS] Erreur de compilation pour les classes générées
    Par seigneur.viggen dans le forum Services Web
    Réponses: 2
    Dernier message: 07/08/2009, 12h52
  3. Réponses: 0
    Dernier message: 21/08/2008, 06h04
  4. Erreur Underfull hbox pour les figures
    Par xavhawk dans le forum Erreurs - Avertissements
    Réponses: 7
    Dernier message: 10/08/2007, 18h25

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