[Asm] Mon système d'exploitation

Statut
N'est pas ouverte pour d'autres réponses.

null

ose();
Actifed a dit:
T'inquiète, sûrement un frustré...

Voilà un petit coeur pour tout ton boulot.

+1 :-D
 

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
 
1er
OP
neku

neku

Codeur roumain
hivenz a dit:
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
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.
 
1er
OP
neku

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 ^^ 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 ;)
 
1er
OP
neku

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
 

Froggy

fake geek
si tu pouvais mettre une petites définition/expliquations des différentes abréviation ... (GTD ITD et autre la ^^) je crois que ça aiderais :cool:
 
1er
OP
neku

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.
 

Angy

Elite
Quel courage, je galère déjà au début d'assembleur moi :p
 

Froggy

fake geek
dis ... petite question ... je rêve ou tu utilises jamais le compare en asm ? o_O
 
1er
OP
neku

neku

Codeur roumain
Voila, le driver clavier est casi terminé, voici le résultat avec un pseudo shell :cool:



Froggy a dit:
dis ... petite question ... je rêve ou tu utilises jamais le compare en asm ? o_O
C'est un fait que dans le boot sector et d'autre fonction écrite en ASM je n'ai jamais utilisé la comparaison (CMP).
 

Froggy

fake geek
neku a dit:
C'est un fait que dans le boot sector et d'autre fonction écrite en ASM je n'ai jamais utilisé la comparaison (CMP).
et il y a une raison particulière ? :)
 
1er
OP
neku

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
 

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 ;)
 
1er
OP
neku

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/
Pour savoir si AL=0, on peut faire "cmp al,0; jz @Saut", mais il est plus rapide de faire le test par "or". Celui-ci modifie le flag ZF : Si AL=0, ZF=1 (ZF = Zero Flag !); si AL<>0, ZF=0.
 

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 =]


neku a dit:
cmp al, 0
il faudrais vérifier le retour de cmp avec jz par exemple

et comme dis dans le cours ASM de http://asm.developpez.com/intro/
mais tu fais un cmp juste en dessous c'est pour ça que je me le demandais ;)
 
1er
OP
neku

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
 

Hahn Z

Elite
Courage à toi !

Chapeau en tout cas.

(c'est là que tu finis ton OS et boum ton HDD grille :cool: )
 
1er
OP
neku

neku

Codeur roumain
Hahn Z a dit:
Courage à toi !

Chapeau en tout cas.

(c'est là que tu finis ton OS et boum ton HDD grille :cool: )
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
 

Ahava

Revenant
quel pro de l'ASM :-D

Je t'admire :love:
 

Hahn Z

Elite
neku a dit:
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
Me doutais bien que tu faisais des sauvegardes ^^
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut