[Asm] Mon système d'exploitation

Discussion dans 'Web, design' créé par neku, 5 Octobre 2006.

Statut de la discussion:
Fermée.
  1. Offline
    null ose();

    +1 :-D
    null, 11 Octobre 2006
    #41
  2. Offline
    ailless Asimov, Sagan, Carlin, Hitchens
    lol franchement... quand j'ai vu le titre j'ai eu peur je me suis dit mais quel maso haha
    heureusement que tu ne fais pas tout ton OS en assembler ;D

    gl quand même
    ailless, 11 Octobre 2006
    #42
  3. Offline
    neku Codeur roumain
    Au debut c'était le but, mais vu que j'ai trop galeré sur le Boot sector j'ai préfèré faire le kernel en C.
    neku, 11 Octobre 2006
    #43
  4. Offline
    neku Codeur roumain
    Les dernières modifications / évolutions :

    - Modification du secteur de boot (nouvelle GDT)
    - Initialisation d'une nouvelle GDT par le Kernel
    - Initialisation du PIC.

    La GDT maintenant sépare le segment de code et le segment de données.

    L'initialisation du PIC nous permettra d'utiliser les interruption plutard, pas exemple pour faire notre drivers clavier :love:

    Pour ceux que cela interresse le code source est disponible directement (chaque modification prise en compte directement vu que je travaille sur mon serveur ;) )

    http://www.nekuz0r.net/neku/os/

    Edit :

    Des nouveauté depuis ce matin :p et oui même en cours je programme :-9

    - Initialisation de l'IDT
    - Un debut de driver clavier

    J'ai toute fois un problème mais intérruptions sont décalées.
    IRQ 0 recue sur l'intérruption 8
    et IRQ 1 sur l'intérruption 9
    Je ne sais pas si cela viens de l'émulteur ou d'une erreur de conception de ma gestion des interruptions, je remet en cause en premier lieu mon gestionnaire, mais je vais quand même essayer de booter sur mon PC pour voir ;)
    neku, 12 Octobre 2006
    #44
  5. Offline
    neku Codeur roumain
    Voila, mon problèmes avec mon gestionnaire d'interruptions est règlé :-D
    Maintenant, je vais commencer l'écriture du driver clavier AZERTY.

    Alors voici un récapitulatif de ce que l'os fournit/fait déjà :

    - Démarrage de la machine
    - Activation de la porte A20
    - Passe en mode protégé
    - Initialise une GDT (segment code et segment de données séparés)
    - Initialise une IDT
    - Initialise le PIC
    - Detect la présence d'une carte VESA
    - Detect la quantité de RAM disponible
    - Démasque l'IRQ 1 et 0 (1 = Clavier, 0 = Timer)

    A venir (dans l'ordre de priorité):

    - Driver Clavier
    - Debut de Shell
    - Driver FAT 12
    - Driver FAT 32
    neku, 12 Octobre 2006
    #45
  6. Offline
    Froggy fake geek
    si tu pouvais mettre une petites définition/expliquations des différentes abréviation ... (GTD ITD et autre la :p) je crois que ça aiderais :cool:
    Froggy, 12 Octobre 2006
    #46
  7. Offline
    neku Codeur roumain
    GDT

    Les segments sont decrits par des structures de 64 bits appelees descripteurs de segments et stockes dans un tableau appele GDT (Global Descriptor Table). Un descripteur precise l'endroit en memoire ou commence un segment, ou il finit, son type (code, donnees, pile, etc.) ainsi que d'autres informations.
    Pour adresser un endroit particulier de la memoire, il faut indiquer dans quel segment on travaille. Le selecteur, directement manipule par le programmeur, peut etre assimile a un pointeur sur un descripteur de segment dans la GDT. Le descripteur donne l'adresse ou commence le segment (la base) et ou il finit (la limite). L'adresse lineaire est obtenue en ajoutant l'offset a la base.

    IDT

    Une table permet d'associer a chaque interruption une routine a executer, c'est la table IDT (Interrupt Descriptor Table). A chaque interruption est associe un "vecteur" qui est un index dans cette table afin de declencher la bonne procedure.
    La table IDT contient des descripteurs systemes appeles 'gates'. Il y a plusieurs types de gates, mais pour traiter les interruptions materielles et les exceptions, ont utilise classiquement les 'interrupt gate'. Un gate est une structure qui pointe sur une routine.

    PIC

    Les interruptions materielles sont les sonnettes que tirent les peripheriques pour dire au processeur que quelque chose se passe. Mais si chaque peripherique pouvait envoier directement un signal au processeur, il faudrait sur celui-ci autant de broche (jouant le role de cordons de sonnette) que de peripheriques. Pour eviter cela, les peripheriques envoient leur requete d'interruption a un chipset auquel ils sont connectes, le 8259A, appele aussi "Programmable interrupt controler" (PIC). C'est ce chipset qui va envoyer a leur place une interruption au processeur.
    Chaque 8259A peut gerer les interruptions de 8 peripheriques mais la plupart des PC ont deux controleurs cascades entre eux, ce qui leur permet de gerer jusqu'a 14 peripheriques. Le second controleur (l'esclave) est chaine au premier (le maitre).
    Les requetes faites par le controleur sont appelees IRQ (Interrupt Request).
    Quand un peripherique transmet au 8259A une requete pour une interruption, celle-ci subit un traitement complexe :
    - la requete passe au travers d'un masque (Interrupt Mask Register). Si l'interruption est masquee, son traitement finit ici.
    - le registre IRR est charge de gerer les priorites entre interruptions. La requete avec la plus haute priorite est evaluee.
    - le 8259A signale au processeur la demande d'interruption.
    - Le processeur acquitte ce signal puis demande au controleur, par un autre signal, le numero de l'interruption demandee afin de declencher la bonne routine.
    - le controleur depose sur le bus de donnees un octet, le vecteur d'interruptions.
    - Une fois la routine terminee, le processeur doit envoyer au controleur un signal pour l'avertir que tout est fini et que tout peut recommencer.

    Un controleur peut ainsi realiser des fonctions plus complexes que la simple transmission d'interruptions. Il est possible de masquer des interruptions, de definir des priorites, etc. Ce fonctionnement est librement parametrable. La partie suivante explique comment il est possible de parametrer un controleur.
    neku, 12 Octobre 2006
    #47
  8. Offline
    Angy \o/
    Quel courage, je galère déjà au début d'assembleur moi :p
    Angy, 13 Octobre 2006
    #48
  9. Offline
    Froggy fake geek
    dis ... petite question ... je rêve ou tu utilises jamais le compare en asm ? o_O
    Froggy, 13 Octobre 2006
    #49
  10. Offline
    neku Codeur roumain
    Voila, le driver clavier est casi terminé, voici le résultat avec un pseudo shell :cool:

    [IMG]

    C'est un fait que dans le boot sector et d'autre fonction écrite en ASM je n'ai jamais utilisé la comparaison (CMP).
    neku, 14 Octobre 2006
    #50
  11. Offline
    Froggy fake geek
    et il y a une raison particulière ? :)
    Froggy, 14 Octobre 2006
    #51
  12. Offline
    neku Codeur roumain
    Non aucune, j'en ai pas eu l'utilité tout simplement.
    J'ai eu nullement besoin de comparer 2 valeur, seulement de tester des retours
    neku, 14 Octobre 2006
    #52
  13. Offline
    Froggy fake geek
    pourtant il me semble plus clair de faire un cmp que un :

    Code:
    	or al, al	;Si al = 0
    (fonction print)

    non ?

    c'est juste pour la clareté du code hein ;)
    Froggy, 14 Octobre 2006
    #53
  14. Offline
    neku Codeur roumain
    Ici c'est un OU logique que j'éffectue.
    0 OR 0 -> 0
    0 OR 1 -> 1
    1 OR 0 -> 1
    1 OR 1 -> 1

    Ce qui est beaucoup plus rapide de traitement que faire une comparaison.

    Et faut pas oublier que cela modifie la Destination

    OR {destination}, {masque} : Applique un "OU logique" à {destination} par {masque}. Tout bit de {destination} est mis à 1 si le bit correspondant de {masque} vaut 1, et laissé inchangé si le bit correspondant vaut 0.

    Exemple :
    AL = 0

    or al, al
    AL sera égale après opération à 0

    Maintenant avec CMP

    cmp al, 0

    et comme dis dans le cours ASM de http://asm.developpez.com/intro/
    neku, 14 Octobre 2006
    #54
  15. Offline
    Froggy fake geek
    oui oui je sais ... j'fais un peu d'asm. ce que je ne savais pas c'était que le OR était plus économe que le CMP. Ce qui est logique d'ailleurs =]


    mais tu fais un cmp juste en dessous c'est pour ça que je me le demandais ;)
    Froggy, 14 Octobre 2006
    #55
  16. Offline
    neku Codeur roumain
    Non excuse moi j'ai dis une connerie la, faut quand même vérifier les flags ;)
    Mais le temps d'execution de OR par rapport à CMP est moindre
    neku, 14 Octobre 2006
    #56
  17. Offline
    Hahn Z Elite
    Courage à toi !

    Chapeau en tout cas.

    (c'est là que tu finis ton OS et boum ton HDD grille :cool: )
    Hahn Z, 14 Octobre 2006
    #57
  18. Offline
    neku Codeur roumain
    C'est pour ca que j'ai de multiple copie :

    - HDD Macbook
    - Mon serveur OVH
    - Un DVD-RW
    - Mon serveur de fichiers local (SCSI)
    - HDD de mon pc (Dans ma chambre)

    Et vu que je met tous les emplacement à jour régulièrement il faudrais vraiment que je n'ai pas de chance :p
    neku, 14 Octobre 2006
    #58
  19. Offline
    Ahava Revenant
    quel pro de l'ASM :-D

    Je t'admire :love:
    Ahava, 14 Octobre 2006
    #59
  20. Offline
    Hahn Z Elite
    Me doutais bien que tu faisais des sauvegardes :p
    Hahn Z, 14 Octobre 2006
    #60
Statut de la discussion:
Fermée.