Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMMENT PROGRAMMER UN OS SIMPLE EN C ET SOUS WINDOWS


Information sur la source

Catégorie :Tutoriaux Classé sous : os, kernel, bootloader, system, interruption Niveau : Expert Date de création : 19/08/2005 Date de mise à jour : 13/07/2006 17:21:24 Vu / téléchargé: 25 149 / 4 711

Note :
9,65 / 10 - par 34 personnes
9,65 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (186)
Ajouter un commentaire et/ou une note

Description

Voilà, tout est dans le titre, la source sur cppfrance n'(est plus à jour (je la laisse qd meme), mais j'ai fait ce site là http://gameos.fb.bz/  il s'adresse plus particulièrement aux gens qui sont sous linux (méthode de compilation)
 

Conclusion

[13/07/06] Liens vers nouveau site GOS
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Tutorial
    • Annexe A.mhtTélécharger ce fichier [Réservé aux membres club]174 272 octets
    • Annexe B.mhtTélécharger ce fichier [Réservé aux membres club]96 285 octets
    • Annexe C.mhtTélécharger ce fichier [Réservé aux membres club]102 565 octets
    • Chapitre 2.mhtTélécharger ce fichier [Réservé aux membres club]203 081 octets
    • Chapitre 3.mhtTélécharger ce fichier [Réservé aux membres club]243 351 octets
    • Chapitre 4.mhtTélécharger ce fichier [Réservé aux membres club]348 259 octets
    • Introduction.htmTélécharger ce fichier [Réservé aux membres club]Voir ce fichier9 974 octets
    • link.dl + ld.exe.zipTélécharger ce fichier [Réservé aux membres club]263 021 octets

Télécharger le zip

Historique

20 août 2005 16:26:30 :
Ajout de 1 annexe + 1 chap
21 août 2005 20:49:46 :
J'ai de gros problème d'ennonciation écrite en francais, si jamais vous comprenez pas dite le moi !
21 août 2005 21:13:53 :
J'ai de gros problème d'ennonciation écrite en francais, si jamais vous comprenez pas dite le moi !
21 août 2005 22:48:10 :
Correction d'un BUG ("")
22 août 2005 23:46:27 :
[22/8][modidification légère de quelques document : Annexe B + chap 2]
23 août 2005 23:09:31 :
Voilà le chapitre 4, si jamais vous comprenez pas un truc dans mon tutoriel, dit-le moi et je le réecirais dans la journée même.
23 août 2005 23:29:41 :
[...]
24 août 2005 15:19:05 :
[correction de bug du chapitre 4 : oublie du cli, erreur : mov eax, cro or ax, 1; mov eax, cr0>>faux
26 août 2005 00:32:35 :
corection de qques bug...pas bien méchant
26 août 2005 12:52:04 :
ajout de l'annexe C : cimpiler un kernel en C
26 novembre 2005 18:21:19 :
mise a jour du site de GOS : http://membres.lycos.fr/vinc1008881
13 juillet 2006 17:21:25 :
J'ai réécrit le début du tuto, le reste suivra, pour tout bug : vinc.caloone@wanadoo.fr

Commentaires et avis

signaler à un administrateur
Commentaire de BruNews le 19/08/2005 23:48:14 administrateur CS

OK c'est prometteur, upgrade régulièrement le zip de la source et tiens nous informé de l'avancement.
Bonne continuation.

signaler à un administrateur
Commentaire de thedestiny le 20/08/2005 00:21:58

Très interressant et très clair.
J'ai hate de voir le résultat final.

A bientot :)

signaler à un administrateur
Commentaire de Joky le 20/08/2005 00:42:19

En effet !!!
J'ai appris qu'un disquette avait 2 faces composées de 80 Disques concentriques composés de 18 Secteurs composés de 512 octets chacun
D'où la taille de la disquette 2*80*18*512 = 1474560 Octects
N'hésite pas à mettre des commentaires car lors d'une mise à jours, on est pas averti par email
J'attend le reste avec impatience :)
Mais va pas trop vite, faut que ça reste compréhensible ;)

signaler à un administrateur
Commentaire de dominion le 20/08/2005 01:02:24

Ca tombe bien, moi qui projettait de m'amuser à coder un kernel...

Merci ;-)

signaler à un administrateur
Commentaire de luhtor le 20/08/2005 01:27:39

Une question cependant, je le lis avec quoi ce fichier mht ?
D'accord pour ie, mais quand on ne l'a pas ?

L'ouvrir avec firefox ? apparemment impossible ou si quelqu'un peut m'expliquer, et avec Konqueror ? faut pas rever...

Donc est ce que ce serait possible d'avoir un format plus "lisible" :)
Bon ok, sur le titre, c'est marqué "pour windows", mais n'empeche :)

signaler à un administrateur
Commentaire de Urgo le 20/08/2005 01:31:04

"vaintaine de chapitre pour aprendre a"
AÏE MES YEUX !!! DE L'EAU !!!

Heuresement, il y a beaucoup moins de fautes dans tes fichier mht. D'ailleurs d'où t'es venue l'idée de faire un tutorial dans ce format? C'est la première fois que je le vois...

Sur ce travaille bien, et essaye de ne pas faire trop de fautes d'orthographe ou d'étourderies, car cela ne fait pas trop sérieux.

signaler à un administrateur
Commentaire de eRoZion le 20/08/2005 02:16:44

Très intéressant, merci de prendre le temps.
Je regarde ça avec patience dès que j'ai le temps.


eRoZion

signaler à un administrateur
Commentaire de DelphiCool le 20/08/2005 07:16:56 administrateur CS

Salut

J'attends aussi la suite

signaler à un administrateur
Commentaire de o0Leo0o le 20/08/2005 10:15:42

Dès le premier chapître, j'ai appris quelque chose.

Merci ;)

signaler à un administrateur
Commentaire de cashoverray le 20/08/2005 11:59:31

je trove sa super cool , ta souces
bonne continuation

signaler à un administrateur
Commentaire de vinc1008881 le 20/08/2005 12:14:10

le format mht, c'est le format de microsoft word pour les pages htlm quand on met des photos, moi j'arive a le lire avec firefox ,c'est un peu comme du pdf, sauf que c'est du mht

Ok, je vois que ce format ne met pas tt le monde d'accord, je vais essayer de faire ceci en .pdf

@+, vinc1008881...

signaler à un administrateur
Commentaire de BruNews le 20/08/2005 12:17:05 administrateur CS

Ah non pitié, pas de pdf, c'est trop la daube à consulter.
Fais don du html normal, Word les génère aussi et tout le monde peut les consulter confortablement.

signaler à un administrateur
Commentaire de Joky le 20/08/2005 12:18:24

Il existe un super soft pour faire du pdf :o
Pdf Creator
Il s'installe dans les imprimantes, et sous word tu fais un enregistré, tu choisis l'imprimante Adobe et voilà tu as un beau pdf, certes avec une pub en bas mais bon ;)
Moi j'trouve quand même que c'est bien le mht, que j'arrive également à lire avec Firefox ;)

signaler à un administrateur
Commentaire de Patrice99 le 20/08/2005 12:30:30

Question bete : un OS sous Windows, c'est une machine virtuelle, non ?

Pour info, Doc2Pdf : www.vbfrance.com/code.aspx?ID=29662

signaler à un administrateur
Commentaire de BruNews le 20/08/2005 12:44:23 administrateur CS

Ce n'est pas l'OS sous Windows mais le créer, écrire son code et le compiler.
Pdf est définitivement de la m***de, va bon juste pour imprimer sur papier. Si on fait un copier coller, il a inséré des retours charriots nimporte où, à bannir pour éditer du code.

signaler à un administrateur
Commentaire de abdoulax le 20/08/2005 13:31:47

Je suis d'accord le pdf c de la m***de, en plus avec mon pc ça rame à mort...

signaler à un administrateur
Commentaire de Patrice99 le 20/08/2005 14:20:31

Ok, et pour tester rapidement l'OS, la il faut une machine virtuelle, non ?

Pour Pdf, evitez à tout prix la version 6, elle rame trop. Les Pdf, c'est pratique justement pour éviter les modifications intempestives des autres ; si c'est pour modifier, mieux vaut choisir un autre format, puisque l'éditeur Pdf est payant.

signaler à un administrateur
Commentaire de juki_webmaster le 20/08/2005 16:53:57

Trés interessent!
J'attend la suite avec impatience, mon Compaq Presario 7106 va adorer.

Bonne continuation.

PS: Si tu pouvais ajouter en fin de route, toutes les images en cas-ou ces images ne soit plus disponible sur le net.

signaler à un administrateur
Commentaire de juki_webmaster le 20/08/2005 17:19:07

A non desoler, je suis depasser par ce format!

signaler à un administrateur
Commentaire de Urgo le 20/08/2005 17:28:12

Info: Foxit PDF Reader c'est rapide et gratuit.

Par contre je suis également contre l'idée de mettre ce tutorial en pdf. html devrait largement faire l'affaire.

signaler à un administrateur
Commentaire de vinc1008881 le 20/08/2005 17:45:37

les images sont contenues à l'interieur du fichier mht, pas de problème donc, à l'avenir j'essairai de faire du htlm classique.

Si vous trouver que mon tuto est pas clair, mal organisé ...
fait le moi savoir et je ferai des modifications !

signaler à un administrateur
Commentaire de EMSIEN le 21/08/2005 01:47:00

Un grand merci pour ce tuto,moi qui voulait comprendre le KERNEL de linux mais en vain,je vois en ton tuto une opportunité pour démarrer.
je trouve deja ces débuts bien expliqué et bref aussi et je trouve que c'est bien,comme ça les gens ne vont pas s'ennuyer en lisant de tonnes de pages,bref mais efficace,continue comme ça ey merci d'avance.
GOS is caming.

signaler à un administrateur
Commentaire de algori le 21/08/2005 11:04:50

Tout simplement génial !
Vivement la suite !
@++

signaler à un administrateur
Commentaire de wina le 21/08/2005 11:57:29

Pas mal ton tuto $
Pas très avancé , mais très bien pour les débutants.
Ok ! J'attends la suite. :)
Ciao !

signaler à un administrateur
Commentaire de guignol71 le 21/08/2005 15:48:06

J'attends aussi la suite avec impatience!
Vraiment nickel pour les débutants (comme moi!)

signaler à un administrateur
Commentaire de vinc1008881 le 21/08/2005 20:47:42

voila le chapitre 3, certain diront que ma méthode c'est du bricolage, moi je trouve + simple comme sa. Vous verrez le code est provisoire...si jamais vous comprenez pas un truk (si c'est mal expliquer..., fait le moi savoir merci)

signaler à un administrateur
Commentaire de racpp le 21/08/2005 20:50:24 administrateur CS

vinc1008881 >> Excellent travail! Il faut juste corriger quelques rares fautes d'orthographe qui gênent la lecture un petit peu. Tout cela me rappelle l'époque où on faisait des trucs comme ça. Que de la joie!
Patrice99 >> Pour tester l'OS il faut démarrer l'ordinateur à partir d'une disquette contenant cet OS. Ca viendra surement dans les prochains chapitres. Windows et sa machine virtuelle DOS ne devront pas être chargés.

signaler à un administrateur
Commentaire de racpp le 21/08/2005 21:17:53 administrateur CS

vinc1008881 >> Je pense qu'il vaut mieux éviter les mots comme "malheureusement" et "cette partie est très compliquée". En fait dans un tutoriel tout doit être gai en encourageant. Moi je dirais plutôt "heureusement qu'il y'a l'assembleur pour arriver à notre fin." et "cette partie n'est pas très compliquée". Pour ceux qui n'ont pas d'expérience en assembleur, il est utile de leur fournir un lien qui donne des notions de bases. Idem pour les interruptions BIOS. Je trouve que tu expliques bien et avec de bons exemples.

signaler à un administrateur
Commentaire de vinc1008881 le 21/08/2005 21:25:25

ok, je prendrai tes remarques en compte.

Pour ceux qui ont des difficulté en assembleur, ds le chapitre 2, j'ai mit un lien vers un tutoriel...

Je vais pensez à écrire une annexe à propos des interruption en gereral (BIOS, DOS>>n'existe plus) en mode réel.

Merci de tes remarques, @+

signaler à un administrateur
Commentaire de juki_webmaster le 21/08/2005 21:49:27

Ya un petit probleme de syntaxe qui vient peut etre du format mht :

;Un secteur de boot plus complet

[BITS 16]
jmp start
db “GAMEOS01”


A propos des " "

signaler à un administrateur
Commentaire de vinc1008881 le 21/08/2005 22:05:18

arf, je v coriger sa en mm temps que les modif que ma demander RACPP

signaler à un administrateur
Commentaire de magic_Nono le 22/08/2005 01:26:05

ça me semble très bien ça,
bonne prog @ tous

magicalement
Nono

signaler à un administrateur
Commentaire de gomoz le 22/08/2005 02:55:48

à la vu des noubreux commentaire, je vais lire. J'apprendrai forcement quelque chose ;)

signaler à un administrateur
Commentaire de cosmobob le 22/08/2005 10:32:26

c'est très bien, jte mets 10/10 ce qui je l'espere t'encourage a continuer a mettre a jour ton tuto !!
bravo!!!!!

signaler à un administrateur
Commentaire de CyberP le 22/08/2005 10:35:32

ça a l'air super, vivement la suite :)
on dit pas "cette partie est très compliquée..." mais plutôt "cette partie est plus compliquée que les précédentes" (sinon ça donne la grosse tête à ceux qui arrivent à comprendre facilement)

signaler à un administrateur
Commentaire de CyberP le 22/08/2005 13:23:05

c'est bizarre il y a écrit que le zip contient "Annexe B.mht" mais il n'est pas dans celui-ci quand on le dl

signaler à un administrateur
Commentaire de inge06 le 22/08/2005 15:19:31

c'est super interressant!! vivement la suite!

signaler à un administrateur
Commentaire de Jarod1980 le 22/08/2005 17:05:15

Super génial. J'attends avec impatience moi aussi la suite. Encore Bravo. Juste une chose (Annexe B.mht n'est pas présent dans le zip)
Bonne continuation.

signaler à un administrateur
Commentaire de darkpoulpo le 23/08/2005 21:35:36

si ca peut interresser du monde, voila un site fait par mon hebergeur
http://boost.freezee.org/ (os sur x86)

signaler à un administrateur
Commentaire de vinc1008881 le 23/08/2005 21:59:13

il est déja bien avancé ton OS ! Mzis ce qui est regrettable c'est le manque de documentation, c'est pourquoi je fais ce tuto !

Dans quelques heure le chap 4 sera dispo...

signaler à un administrateur
Commentaire de vinc1008881 le 24/08/2005 12:20:42

La chapitre 4 contient des bug attention je le remettrai a jour !!

signaler à un administrateur
Commentaire de Kirua le 25/08/2005 06:17:13

Tres tres tres interessant, merci bcp pour cette perle :)

signaler à un administrateur
Commentaire de blasterantims le 25/08/2005 13:42:07

Pas mal pour les 3 premiers chapitres...
J'espere que tu sera aussi clair pour les autres, car la gestion de la memoire et des processus dans un kernel est qqch d'assez dur comparé à ce que tu nous as deja servis.

Dans tous les cas BRAVO :-) et bonne continuation.

signaler à un administrateur
Commentaire de junior300 le 25/08/2005 21:41:20

pour corriger le bug soit même et que le kernel du chapitre 4 fonctionne il suffit de remplacer la ligne :

mov byte [0xB8001], 01

par :

mov byte [0xB8001],0x57
c vraiment génial ce tutorial
merci et continu on attend la suite

signaler à un administrateur
Commentaire de vinc1008881 le 25/08/2005 22:08:10

???, pourquoi 0x57 ??

le bug du chapitre 4 est corriger javais fait 2 erreur :

oublie du cli
+
2 fois mov cr0, eax o lieu de 1 seule fois...

le 0x57 corespont à l'attribut couleur cela n'as rien à voir dsl
avec 01 --> on voit un K en bleu sur font noir
avec 0x57-> on voit un K gris sur font rose

signaler à un administrateur
Commentaire de junior300 le 25/08/2005 22:14:33

dsl pour le poste du dessu mais je voulais simplement dire qu'il fallait ajouter 0x devant 01 de la ligne en question et apres sa marche nikel

le valeur 57 change simplement la couleur de la lettre affiché

encore dsl

signaler à un administrateur
Commentaire de dan34 le 25/08/2005 23:30:19

Salut,

Ce tuto est super mais j'ai un petit soucis

NASM n'arrive pas à me compiler la ligne du kernel suivante :
mov byte[0xB8000],‘K’ ,je ne comprend pas pourquoi et contrairement au commentaire indiqué sur cette ligne j'aimerais bien comprendre ;)

Donc si tu a une idée je suis preneur

Merci et continu c'est super, je l'attendais depuis longtemps ce tuto.

Dan34

signaler à un administrateur
Commentaire de juki_webmaster le 25/08/2005 23:44:28

DAN34, c'est au sujet des guillements qui passe mal.

signaler à un administrateur
Commentaire de dan34 le 26/08/2005 00:18:53

ok merci

signaler à un administrateur
Commentaire de junior300 le 26/08/2005 00:25:13

pour que nasm le compil ajoute simplement sur la ligne
mov byte [0xB8001], 01
un x entre le 0 et le 1 et l'assemblage se fait tres bien

signaler à un administrateur
Commentaire de vinc1008881 le 26/08/2005 00:30:36

voilà, encore des petite erreur de frappe corigé (le '  ' et le 01)
-------> mis a jour

ce n'est rien pour le 0x57

demain je poste l'annexe qui montre la compilation d'un kernel ecrit en C...+ un chapitre sur le driver console

signaler à un administrateur
Commentaire de dan34 le 26/08/2005 00:42:53

heu maintenant ça compille bien mais quand je le teste (j'eteind et ralume le PC) ça reset en boucle :-(

J'ai pu noté que dans le boot il y avait 2 CLI et un seul STI donc je suppose que la gestion des interruptions n'est pas réactivée en sortant du boot.

Est-ce normal ??

signaler à un administrateur
Commentaire de vinc1008881 le 26/08/2005 00:43:34

ne tinkiete pas dan34, dem1 je poste un chapitre qui va t'epliquer le sens de cette ligne mov byte[0xB8000],'K'...

signaler à un administrateur
Commentaire de vinc1008881 le 26/08/2005 00:45:16

oui, c'est normal : il faut laisser le cli, en effet les interruption sont dereglée à cause du passage en Pmode, il faut donc les iniber jusqu'à nouvelle ordre : pas de sti.

signaler à un administrateur
Commentaire de dan34 le 26/08/2005 00:46:08

m'inqiète pas
mais je voudrais bien que ça marche quand c'est simple parce que quand ce sera plus compliqué oulala

signaler à un administrateur
Commentaire de vinc1008881 le 26/08/2005 00:59:18

si tu as rajouté un sti, c'est normal que ça reboot, sinon je comprend pas : je viens de telecharger la source et je lé tester sous BOCHS et sous machine réelle cela marche...assure toi d'avoir télécharger la dervière ersion du chapitre 4 (yas 2 jours il y avais des bug...

signaler à un administrateur
Commentaire de CyberP le 26/08/2005 08:40:20

le "mov byte[0xB8000],'K'" ça écrit 'K' dans la mémoire vidéo, je me trompe ?

ce qui est aussi possible c'est que tu aies changé le nom du kernel pour je ne sais quelle raison et que tu as supprimé l'ancien (buggé) alors il faut formater la disquette sinon ça exécutera encore l'ancien même s'il est en théorie supprimé

signaler à un administrateur
Commentaire de CsM Skate le 26/08/2005 09:38:06

Tout simplement génial, :)
10/10 tout ça non ?

Nico

signaler à un administrateur
Commentaire de vinc1008881 le 26/08/2005 12:49:37

le fichier est trop gros mais voulus, j'ai donc du virer qques parties.., le tutoriel sera present en integralité procainement sur mon site...

signaler à un administrateur
Commentaire de dan34 le 26/08/2005 13:09:03

Mon pb est résolu
Le copié/merdé a encore frappé j'avais oublié la boucle infini à la fin du kernel.
Donc normal que ça reboote en permanence.

Merci à tous ceux qui se sont penchés sur mon pb.

signaler à un administrateur
Commentaire de vinc1008881 le 26/08/2005 13:44:03

oui en effet, sans boucle infinie, le processeur execute nimporte quoi, des octets totalement aléeatoires ce qui finit par le faire planter...

mon site est là : http://membres.lycos.fr/vinc1008881/index.htm



signaler à un administrateur
Commentaire de virlix le 26/08/2005 14:44:00

Heu... je reste bluffé. Faux deja avoir des connaissances poussées au niveau ASM et H/W pour faire cela alors moi je dit chapeau vinc1008881. Je vais suivre tout cela de près car c'est non seulement instructif mais aussi utile. Et en plus tu n'as que 18ans... je suis bluffé

signaler à un administrateur
Commentaire de vinc1008881 le 26/08/2005 15:45:35

merci bcp ça fais plaisir !
Voilà, j'ai fait un ptit site où il y a toutes les pages htm de mon tutorial (j'ai virer le mht). Dans la rubrique download, il y a les outils que j'utilise. je suis obliger de créer ce site car mon zip finir par devenir trop gros à la longue

en cas de pépin (problème de compilation, qqchose pas cler) => un petit message

signaler à un administrateur
Commentaire de CyberP le 26/08/2005 17:00:15

une question : le pong va être programmé en modifiant les couleurs d'arrière plan des espèces de gros pixels (où on écrit les caractères) ?

signaler à un administrateur
Commentaire de CyberP le 26/08/2005 17:00:36

tetris pardon

signaler à un administrateur
Commentaire de vinc1008881 le 26/08/2005 17:18:58

on sa faire sa en mode graphique tu verras...c ce sera a la fin les jeux

signaler à un administrateur
Commentaire de vinc1008881 le 27/08/2005 11:07:45

quelqu'un m'as demander : comment je peut connaitre la capacité de la mèmoire quand je passe en mode P. On mode P, on a fais des segment d'une taille de 128 Mo, mais j'orais bien pu mettre 4 Go à la place, de toute facon pour le moment je ne connais pas la capacité mémoire. Je qui m'interrese dans le mode protégé, c'est que les instructions sont 32 bits, donc je vais pouvoir executer un kernel en C. Par contre comme je ne connais pas la taille de la RAM, pour l'instant tout mes programme sont situé dans le premier Mo de mémoire.

J'espere que cela repond a ta question...

voilà, @+, vinc1008881

signaler à un administrateur
Commentaire de ghostahjay le 28/08/2005 13:42:18

Moi aussi je projetai de créer un 'mini os' et je suis tombé sur ta source, tout à fait géniale!
Bonne continuation pour la suite

signaler à un administrateur
Commentaire de virlix le 29/08/2005 08:28:54

A quand la suite?

signaler à un administrateur
Commentaire de vinc1008881 le 29/08/2005 12:21:18

comme il n'y a plus de place dans le zip de cppfrance, je poste le chapitre 5 sur mon site

http://membres.lycos.fr/vinc1008881/index.htm

signaler à un administrateur
Commentaire de dd1840x le 29/08/2005 13:48:37

J'espere que tu mettras comment reactiver les interruptions genre 13h (lecture/écriture).
Sinon pour le moment joli travail !!!

signaler à un administrateur
Commentaire de vinc1008881 le 29/08/2005 14:01:49

J'espere que tu mettras comment reactiver les interruptions genre 13h (lecture/écriture)>> impossible : je suis d'accord peut peut réactiver tt les interruptions, mais il faur créer nous meme nos propres drivers ...

signaler à un administrateur
Commentaire de CyberP le 29/08/2005 15:09:21

euh tu saurais pas s'il est possible de linker le kernel avec visual studio, parce que je sais pas pourquoi mais si je mets une ligne de commande trop longue il me dit "impossible d'exécuter la commande" (crois moi j'ai testé des dizaines de fois)

(ou alors tu m'expliques pourquoi ça dit impossible d'exécuter la commande)

le problème est que j'ai voulu créer des fonctions (affichage à l'écran, modification de la palette et tout ça, j'ai pris un peu d'avance en regardant sur d'autres sites) dans d'autres fichiers .c et comme ça m'en fait plusieurs, l'instruction pour linker devient assez longue

signaler à un administrateur
Commentaire de satellite34 le 29/08/2005 15:14:02

c' est vraiment super ! merci beacoup, je vais suivre ce tuto avec beaucoup d' interet 10/10

signaler à un administrateur
Commentaire de vinc1008881 le 29/08/2005 15:25:17

si je me souvient bien, la ligne de commande DOS ne doit pas dépasser 255 caractères...ou un truc dans le genre...

il faut compiler tout tes fichier .c en meme temps

pour cela tu fé un fichier main.c qui contient

#include "file.c"
#include".....c/h"
tu compile main.c

tu aura un seul fichier objet dans ce cas là. Donc se sera plus facil à linker...

signaler à un administrateur
Commentaire de CyberP le 29/08/2005 15:34:27

oui ça résoud le problème (enfin je pense, j'ai pas testé) mais le but de créer plusieurs fichiers .c est justement de pouvoir les compiler séparément

sinon si j'en ai que 3 (le kernel, la petite partie en asm et un autre) ça fonctionne sauf que si j'appelle une fonction de l'autre fichier .obj à partir du kernel, ça reset (je ne sais pas exactement pourquoi, bochs ne le précise même pas)

signaler à un administrateur
Commentaire de vinc1008881 le 29/08/2005 21:22:32

tu veut charger tes fichiers dynamiquement, c'est sa ?
.obj >>C'est pas 16 bits sa ?, si tu execute ça apres que tu passe en Pmode, pas étonnant que sa foire...une triple faute et hop reset...
sinon passe moi la partie qui foire, je vais essayer d'analyser sa...

signaler à un administrateur
Commentaire de CyberP le 30/08/2005 08:18:41

non c'est pas 16 bits, on peut pas faire de 16 bits avec visual studio je pense

si je mets la fonction que j'appelle dans le même fichier .c (donc le même .obj au final) ça fonctionne
si je la mets dans un autre .obj (et que je rajoute le nom de cet .obj dans la ligne de commande pour linker), le linkage se passe bien sauf que ça reset

comment tu veux que je te le passe ?

signaler à un administrateur
Commentaire de vinc1008881 le 30/08/2005 09:34:31

fais des break point et regarde ou sa foire...

sinon je ve bien jeter un coup d'oeil sur le code qui semblerai ne pas marcher
sa peut venir de minporte ou...montre moi aussi comment tu compile tu link et tu charge

signaler à un administrateur
Commentaire de CyberP le 30/08/2005 10:05:53

ben si j'enlève l'appel à la fonction tout marche (sauf qu'il y a rien à l'écran puisque c'est la fonction qui s'en occupe)

kernel.cpp (je programme en C++, mais j'ai essayé en C, c'est pareil) :

#include "include/video.h"

extern "C" void kernel_start() {
int i = 0, j = 0;
while (i < 320) {
while (j < 200) {
setPixelColor(i, j, 255 * i / 320);
++j;
}
++i;
j = 0;
}

while(1);
}

video.h :
void setPixelColor(unsigned int x, unsigned int y, unsigned char color);

video.cpp :
#include "include/video.h"

void video::setPixelColor(unsigned int x, unsigned int y, unsigned char color) {
unsigned char* video = (unsigned char*)0xA0000 + x + 320 * y;
video[0] = color;
}

j'ai essayé inline, extern "C" devant, etc. et ça fonctionne que si le corps de la fonction est dans le même fichier .obj que là d'où on l'appelle

si je mets "setPixelColor(i, j, 255 * i / 320);" en commentaire, ça marche (écran noir mais au moins ça reset pas)

je compile avec visual studio (d'ailleurs on peut tout faire à partir de visual studio, même formater la disquette et assembler les .asm) et voilà le .bat de linkage :

cd ..\ld
ld.exe -Ttext 0x20000 link.ld -o A:\kernel.bin --oformat binary ..\temp\start.o ..\temp\kernel.obj ..\temp\video.obj
link.ld c'est le même que sur ton site

signaler à un administrateur
Commentaire de CyberP le 30/08/2005 10:09:29

euh petite connerie :

le
void video::setPixelColor(unsigned int x, unsigned int y, unsigned char color) {

c'est
void setPixelColor(unsigned int x, unsigned int y, unsigned char color) {

j'avais fait un test avec les namespaces et j'ai oublié d'enlever complètement

signaler à un administrateur
Commentaire de vinc1008881 le 30/08/2005 12:38:35

voilà quelques "betises pas bien méchante que je vois au premier coup d'oeil"

--> un while avec un variable++ à l'interrieur, pour moi c'est un for
--> dans ta fonction setpixelcolor, pourquoi s'emmerder à créer une variable "video", ((unsigned char*)(0xA0000 + x + 320 * y)) = color;
--> thériquement ta fonction setpixelcolor doit etre déclaré externe car elle appartient bien à un autre fichier *.obj (extern void Set...)
-->  int i = 0, j = 0;
while (i < 320) {
while (j < 200) {
setPixelColor(i, j, 255 * i / 320);
++j;
}
++i;
j = 0;
}
>>crad

short i = 0;/*un short est suffisant*/
static unsigned char j = 0;/*un char est suffisant*/
for (;j<=200;j++)
{
for (i=0;i<=320;i++)setPixelColor (i,j,0x50);/*==>0x50 = couleur*/
}
>>plus propre non ?

signaler à un administrateur
Commentaire de BruNews le 30/08/2005 13:01:57 administrateur CS

mais moins bon que si tu places la vérif du j en bas, le mettant à 0 en haut c'est inutile de le controler illico.
do {

} while(...);

signaler à un administrateur
Commentaire de CyberP le 30/08/2005 13:10:16

j'avais un bug avec le for mais je sais plus quoi (en tout cas j'avais mis un for et après je l'ai remplacé par un while)
sinon mon (255 * i / 320) fait un joli dégradé de couleurs

sinon le "((unsigned char*)(0xA0000 + x + 320 * y)) = color;"
créé de toutes manières des variables de manière temporaire comme je le fais

par contre mettre short et unsigned char pour moi c'est un bel exemple d'un bug qui se produira quand j'augmenterai la résolution de l'écran (ça fera peut être un petit warning à la compilation et c'est tout) parce que j'oublierai surement
de modifier le type des variables (mais bon c'est vrai qu'un unsigned short suffit)

sinon même avec extern ça ne fonctionne pas (j'avais déjà testé)
au final mon problème n'est pas reglé

signaler à un administrateur
Commentaire de CyberP le 30/08/2005 13:32:50

il commence à m'énerver ce programme x_x
maintenant ça ne fonctionne même plus avec la fonction dans le même fichier :

void setPixelColor(unsigned int x, unsigned int y, unsigned char color) {
*((unsigned char*)0xA0000 + x + 320 * y) = color;
}

extern "C" void kernel_start() {
for (unsigned short i = 0; i < 320; ++i)
for (unsigned short j = 0; j < 200; ++j)
setPixelColor(i, j, 255 * i / 320);
//*((unsigned char*)0xA0000 + i + 320 * j) = 255 * i / 320;

while(1);
}

si j'enlève le commentaire dans la fonction kernel_start et que je commente à la place la ligne "setPixelColor(i, j, 255 * i / 320);" ça marche !
si je laisse comme c'est écrit là écran noir (mais pas de reset)
si je mets inline devant la fonction, reset

en plus le débuggeur de bochs me met des instructions en boucle, toutes au segment 0xf000, à se demander si ce sont bien les trucs qui se passent réellement

signaler à un administrateur
Commentaire de vinc1008881 le 30/08/2005 14:13:45

moi il compile tres bien le for !?
"((unsigned char*)(0xA0000 + x + 320 * y)) = color;">>nan ce sera une instruction asm de type mov memoire, constante.Pas de variables temporaire, d'ailleur sa existe meme pas en C.
ok pour la résolution de l'ecran je savais pas deviner...

>>kernel start n'est pas extern

voilà, apres un petit desassemblage, j'ai trouver le problème :(merci asm)

ld link mal mes fichier, il doi y avoir un problème...dassemble le binaire final pour t'en rendre compte (c'est au niveau des call, les adresse sont fausses)
il faut que tu link un fichier obj + un fichier o pas + car il doit certainement y avoir du problème...

signaler à un administrateur
Commentaire de CyberP le 30/08/2005 14:19:20

ah d'accord merci
je pensais que les .obj et les .o était exactement les mêmes
enfin faut voir

je vais essayer de compiler tout ça avec gcc (je crois que je vais laisser tomber visual studio et faire des .bat du coup)

signaler à un administrateur
Commentaire de vinc1008881 le 30/08/2005 14:34:58

bah en fait les .obj, c'est pas le problème,

.o + .obj >marche (enfin je crois)
.o + .o   >marche
.obj + obj>sa devrait marchait

des qu'il y a plus de 3 fichier objet>>foire

signaler à un administrateur
Commentaire de CyberP le 30/08/2005 15:30:16

CA MARCHE !!!
en fait je compile et linke avec visual studio
sauf que je rajoute une commande "post-linkage" :

objcopy -R .note -R .comment -S -O binary ..\temp\kernel.exe A:\kernel.bin

objcopy.exe c'est avec gcc

et ça appelle bien la fonction apparemment

signaler à un administrateur
Commentaire de dd1840x le 31/08/2005 13:11:01

MOI PAR CONTRE CA BLOQUE !!!

J'ai compilé exactement le meme code (sur une machine d'epoque), ça reboote tt seul au niveau de la lecture des secteurs (pour savoir qd ça bloquait,j'ai fait une petite fonction "affichage").Je travaille sur un PC 486SX (Windows 3.11 et MS-DOS 6.2,NO COMMENT !).

Merci d'avance pour votre aide !

signaler à un administrateur
Commentaire de vinc1008881 le 31/08/2005 13:19:11

essaye avant la lecture des secteur de mettre ceci :

xor ax, ax ; ax = 0
int 13h    ; reset du lecteur disquette

signaler à un administrateur
Commentaire de dd1840x le 31/08/2005 13:47:11

deja fait.Je n'ai aucune idée de ce que ça peut être (Ca fait l'interrupt 13h, fonction 02h avec ts les arguments et ça reset).

signaler à un administrateur
Commentaire de dd1840x le 31/08/2005 13:50:00

Je vais essayer en n'utilisant pas le int mais les ports...
C'est pas sur que ca marche !

signaler à un administrateur
Commentaire de virlix le 31/08/2005 14:41:09

Alors moi je comprends pas le 0XA0000 de CyberP
Je croyais qu'il fallait mettre 0xB8000?

Moi j'ai compilé le code suivant dans kernel.c et ca fonctionne nickel:

void setPixelColor(unsigned int x, unsigned char color) {
  unsigned char* video = (unsigned char*)0xB8000 + x ;
  video[0] = color;
}
void kernel_start (void)
{
  int i = 0;
  unsigned char color = 0x00;

  for(i=0;i<4000;i++){
    setPixelColor (i,177);
    i++;
    setPixelColor (i,color);
    color++;
  }
  while(1);
}

signaler à un administrateur
Commentaire de virlix le 31/08/2005 14:42:48

Alors moi je comprends pas le 0XA0000 de CyberP
Je croyais qu'il fallait mettre 0xB8000?

signaler à un administrateur
Commentaire de vinc1008881 le 31/08/2005 15:11:56

A0000 > mémoire graph en mode graph (en clait tu affiche des pixel)
B8000 > mémoire graf en mode TEXTE (affichage de caractères directement à l'écran)

c'est vraiment bizarre que l'int 13h n'est pas compatible avec ton lecteur disquette ? decompile un coup le secteur de boot de MS-DOS pour voir comment il s'y prend....

signaler à un administrateur
Commentaire de CyberP le 31/08/2005 16:16:25

oui je suis passé en mode graphique

sinon je comprends pas dans le chapitre 4 tu dis que la limite du segment de 128 Mo (en fait 64 Mo, tu te contredis un peu plus loin) c'est :
0100 0000 0000 0000
jusque là je suis d'accord

mais après pour coder ça dans la gdt, les 16 premiers bit tu mets :
0x0, 0x0 et les 4 derniers tu mets 0001 (je parle des trucs que tu mets en violet clair)
pour moi les 16 premiers bits de "0100 0000 0000 0000" c'est "0100 0000 0000 0000" et les 4 derniers ce serait 0x0

signaler à un administrateur
Commentaire de vinc1008881 le 31/08/2005 16:24:19

oops, j'ai du faire une boulette d'inatention, le 64 Mo, c'est pas un 64 Mo mais un 128 Mo, je v corriger sa...

signaler à un administrateur
Commentaire de vinc1008881 le 31/08/2005 16:29:35

cela represente donc 0100 0000 0000 0000

seulement dans la GDT tout est mélangé,

on a donc les douze dernier bits de la limite = 0000 0000 0000
suivit par des autre truk
suivit par les 4 premier bits = 0100

reregarde lz shéma pour verifier tu verras les entrée de la GDT c'est pire qu'un puzzle...

signaler à un administrateur
Commentaire de CyberP le 31/08/2005 17:10:31

pourquoi 12 ?
dans ton tableau on voit que ce sont les 16 premiers bits en théorie ; si on fait le total des bits ça fait bien 64 bits (8 octets)
donc ça peut pas être 12 à la place de 16 sinon ça ferait 60 bits seulement

signaler à un administrateur
Commentaire de vinc1008881 le 31/08/2005 17:32:51

je voulais dire les 16 premier bits = 0000 0000 0000 0000 (qui sont en fait les 16 dernier de la base)
puis des autres bits
puis les 4 premier bits de la base

enfin le schéma l'indique clairement non ?

signaler à un administrateur
Commentaire de CyberP le 31/08/2005 17:54:52

mais la limite (tu as dit base je pense que tu voulais dire limite) fait 20 bits

l'adresse complète c'est donc :
0000 0100 0000 0000 0000 (20 bits)

les 16 premiers, c'est :
soit 0000 0100 0000 0000 (en commençant par la gauche)
soit 0100 0000 0000 0000 (en commençant par la droite)

et quoiqu'il en soit, les 4 derniers sont 0000
ce qui contredit ce que tu as écrit dans le tuto

signaler à un administrateur
Commentaire de clem0338 le 02/09/2005 12:27:07

Franchement, je te dis chapeau, meme voir chapiteau

rappel des débuts ....

@+ et continue comme ca

signaler à un administrateur
Commentaire de dd1840x le 02/09/2005 12:27:34

Pour mon problème c'est réglé !!!
J'ai copié le kernel au secteur 2, et c'est tt bon...

Sinon, qd est-ce que tu vas faire la mise a jour ?...

signaler à un administrateur
Commentaire de vinc1008881 le 02/09/2005 17:47:55

bah la en ce momentj'ai pas tro le tps >>je doit enmanagé ms sa viendra

signaler à un administrateur
Commentaire de zippro4012 le 03/09/2005 18:31:45

Très bon travail, très interressant. J'attend la suite avec impatience.^^

signaler à un administrateur
Commentaire de virlix le 09/09/2005 09:10:44

bon la suite...

signaler à un administrateur
Commentaire de thedestiny le 16/09/2005 19:23:28

Il est vrai que la on attend toujours la suite :/

signaler à un administrateur
Commentaire de vinc1008881 le 16/09/2005 20:06:01

Voilà, bah dimanche je vais poster un chapitre qui m'as pris pas mal de temps...Comme je fais une prepa mat sup/mat spé, j'ai peu de temps de libre (et je n'ai pas de PC ds ma chambre en +)

signaler à un administrateur
Commentaire de CyberP le 19/09/2005 09:14:41

euh bah alors ? :o
je pensais que tu avais déjà fini et qu'il restait plus qu'à le mettre en ligne

signaler à un administrateur
Commentaire de DelphiCool le 19/09/2005 12:30:18 administrateur CS

Laissez le respirer le pauvre,
Il se décarcasse assez comme ça.

signaler à un administrateur
Commentaire de CyberP le 19/09/2005 22:03:39

bah perso j'ai continué tout seul et j'ai déjà un petit shell là (en fait il prend que la commande "reboot" :p mais au moins ça marche)
mais j'attends quand même ton tuto parce que tu expliques quand même mieux que tout ce que j'ai pu trouver pour l'instant (sans compter les trucs qui se contredisent parfois)

signaler à un administrateur
Commentaire de Pingouin57 le 26/09/2005 22:34:03

Hmmm, le tuto serait-il mort ? Nous attendons la suite avec impatience :)

signaler à un administrateur
Commentaire de boun85 le 27/09/2005 13:57:01

Vachement ce tuto moi j'attend plus que la suite.
Tres bon boulot vinc1008881 !!

signaler à un administrateur
Commentaire de abdoulax le 06/10/2005 15:28:12

Bonjours, j'essaie de comprendre l'interruption 10h cependant j'ai qlq soucis :

mov ax, 0003h             ;ah contient le numero de fonction, al le paramètre
int 10h

tu dit ah contient le numero de fonction et al le paramètre mais on ne voit ni ah et al dans ces deux lignes...
Qlq1 peut m'aider un peu...

Mci

signaler à un administrateur
Commentaire de BruNews le 06/10/2005 15:41:14 administrateur CS

AX est le 16 bits bas de EAX.
AH est le 8 bits haut de AX et AL est son 8 bits bas, donc quand tu affectes AX ça affecte implicitement AH et AL.

signaler à un administrateur
Commentaire de abdoulax le 06/10/2005 15:48:21

Donc si j'ai bien compris :

mov ax, 0003h             ;ah contient le numero de fonction, al le paramètre
int 10h

revien à :

mov al, 00h
mov ah, 03h
int 10h

Ou un truc dans ce genre...

signaler à un administrateur
Commentaire de BruNews le 06/10/2005 15:57:45 administrateur CS

L'inverse, on y était presque:
mov al, 03h
mov ah, 00h

signaler à un administrateur
Commentaire de abdoulax le 06/10/2005 15:59:47

Oki merci...

signaler à un administrateur
Commentaire de abdoulax le 06/10/2005 16:21:20

En fait j'avais une autre question que j'ai oublié de posé :

Pourquoi le secteur de boot doit créer une nouvelle pile ??

Je tiens aussi à dire que ce tuto m'a permis de comprendre bcp de choses... Un grand merci

signaler à un administrateur
Commentaire de CyberP le 07/10/2005 16:25:24

Si tu parles de :
mov ax, 0x6000
mov ss, ax
mov sp, 0xFFFF

il ne créé pas une nouvelle pile car il n'y en avait tout simplement pas avant, à mon avis si tu fais un "push" ou "pop" avant ces instructions, le système redémarre

Si tu parles de :
mov ax, 16
...
mov ss, ax
mov esp, 0x6FFFF

alors il n'en créé pas non plus une nouvelle mais met juste le segment de la pile à jour avec la GDT (si tu le laisses à 0x6000 il va te dire que l'offset 0x1800 de la GDT n'existe pas) et pour esp, c'est tout simplement le registre 32 bits correspondant à sp (comme eax correspond à ax) et il pointe vers 0x6FFFF, l'équivalent de l'adresse 0x6000:0xFFFF en mode réel (c'est la même adresse que précédemment)

signaler à un administrateur
Commentaire de anonyme_man_in_this_world le 08/10/2005 19:59:49

un superbe tutorial .cepandant j'ai des question a vous poser :

puisqu'un OS est forcement un programme Dos , il faut qu'il ne

se serve pas des librairies standard du C.comment peut on le

programmer avec ce langage ?n'est il pas ça impossible sans ASM ?

si j'ai bien compris lors la reecriture des fonctions systemes on

doit les definir en assembleur ? enfin n'est il pas gcc ou Borland

C++ plus convenable que Dev-Cpp ?

merçi d'avance .

signaler à un administrateur
Commentaire de CyberP le 08/10/2005 20:58:55

Un OS n'est pas un programme du DOS. La preuve : DOS est un OS !
Mais le C gère de toutes manières lui-même toutes les structures de contrôle et les types par défaut (il ne gère pas les bool et les nombres à virgule je crois).

signaler à un administrateur
Commentaire de anonyme_man_in_this_world le 15/10/2005 21:03:15

meme si le C est plus simple que l'assembleur mais

tu vois pas que de toute façon ,on peut pas utiliser

les fonctions traditionnel par exemple printf

donc il faut les redefinir en ASM ?

merçi d'avance

signaler à un administrateur
Commentaire de zippro4012 le 16/10/2005 09:40:48

Exactement... (enfin, je crois).

A ce propos, comment faut-il faire pour appeler une interruption et accéder au segment et a la mémoire en C ?

signaler à un administrateur
Commentaire de CyberP le 17/10/2005 17:35:49

Pas forcément en asm, on peut très bien écrire dans la mémoire vidéo en C par exemple (il suffit de créer un pointeur vers la mémoire vidéo et d'accéder aux différents offsets).

Pour appeler interruptions, etc. on peut mettre de l'assembleur dans du C (il sera alors ajouté directement lors de la compilation). On peut même y mettre des noms de variable par exemple.
Personnelement, je trouve l'inclusion de l'asm plus facile et pratique avec visual studio qu'avec gcc. Avec gcc, pour appeler l'interruption 40 par exemple, il faut taper : asm("int $40"); comme si c'était une instruction en C (notez le dollar complètement stupide).
Avec Visual Studio, un petit _asm { int 40 } avec la possibilitée de mettre plusieurs instructions à la suite entre les accolades (avec un retour à la ligne  à chaque fois comme dans un assembleur normal). De plus, on peut écrire directement le nom des variables sans avoir à mettre %0 et tout ça comme dans gcc.

Par ailleurs, avec gcc, on ne peut pas appeler d'interruption par l'intermédiaire du préprocesseur (par exemple faire "#define interrupt 40" et après "asm("int $interrupt");" car ça ne marche pas [au linkage il dit ne pas trouver le symbole $interrupt] même si on enlève le dollar). D'ailleurs si quelqu'un sait tout de même comment faire, j'aimerais bien le savoir...

signaler à un administrateur
Commentaire de junior300 le 17/10/2005 20:53:36

dans le tutorial on est apsser en pmode donc il faudrait réécrire le gestionnaire d'interruption je crois. Si quelqu'un sait comment faire se serai une grande avancé. merci d'avance

signaler à un administrateur
Commentaire de CyberP le 18/10/2005 17:38:30

C'est un peu plus compliqué : il te faut une idt (interruption descriptors table) cad une liste des interruptions, un peu comme pour la gdt.
Par exemple, pour l'interruption numéro 2, il ira chercher l'entrée n°2 de l'idt et lancera l'interruption vers l'offset spécifié.
Chaque entrée de l'idt fait 8 octets, pour plus d'infos cherche sur internet (je crois que du plus haut au plus bas, ie de gauche à droite, c'est 16 bits haut de l'offset, 16 bits du segment, un petit descripteur de 16 bits à mettre à 0x8E00 pour un truc normal, et 16 bits bas de l'offset)

Pour initialiser tout ça c'est un peu comme pour la gdt : un petit truc de 48 bits avec limite et base et à la fin l'instruction "lidt" à la place de "lgdt"

Vu que le tuto est mort il vaut mieux chercher sur internet pour l'instant

signaler à un administrateur
Commentaire de zippro4012 le 19/10/2005 18:30:44

C écrit dans le chapitre 5 :
<< Notre kernel ne doit pas dépasser pour l’instant 1,5 Ko sinon le secteur de boot ne le chargeras pas en entier...(on verras pourquoi après) >>
Comment peut on faire pour charger le kernel complet ???
Sinon merci pour ces explications CyberP, j'ai enfin réussi a écrire une fonction pour écrire une chaine complète à l'écran, en c.

signaler à un administrateur
Commentaire de victorcoasne le 20/10/2005 19:33:39

Bonjour,

Je tiens à te féliciter pour ta superbe source !
Comment utiliser par exemple prinft() ?
Comment utiliser du C++ ?

Merci
10/10 !

signaler à un administrateur
Commentaire de CyberP le 21/10/2005 06:38:05

pour charger le kernel en entier il faut changer le nombre de secteurs chargés quand on fait l'interruption 13 du bios (ça doit être 3 puisque chaque secteur fait 512 octets) donc pour 5 ko par exemple, il faut mettre 10 secteurs

sinon le C++ c'est plus compliqué à mettre en place, il faut écrire plein de fonctions spéciales je crois

signaler à un administrateur
Commentaire de victorcoasne le 21/10/2005 23:07:09

OK mais je voulais savoir comment faire pour afficher un message à l'écran en C avec une fonction du genre printf() ?

signaler à un administrateur
Commentaire de CyberP le 22/10/2005 08:16:00

on en a parlé plus haut...

sinon il suffit de recréer la fonction printf qui prend un char* en paramètre par exemple et qui, avec un petit for, prend chaque caractère de la phrase et l'écrit dans la mémoire vidéo, jusqu'à arriver à un 0

après il vaut mieux avoir d'autres fonctions déjà prévues comme par exemple pour faire défiler l'écran (comme ça s'il y a un retour chariot dans la phrase et qu'on est tout en bas de l'écran on peut défiler l'écran sans problème)

signaler à un administrateur
Commentaire de zippro4012 le 22/10/2005 11:50:55

//Pour écrire une lettre
void printc(char cLetter, int iXPos, int iYPos)
{
     char * pWriteAdress;
     pWriteAdress = (char *) (0xB8000 + (iXPos * 2) + (iYPos * 160));
     *pWriteAdress = cLetter;
}

//Pour écrire une chaine complète
void printl(char *pString,int iXPos, int iYPos)
{
     int iIndex = 0;
     while (pString[iIndex] != 0)
     {
           printc(pString[iIndex],iXPos + iIndex , iYPos);
           iIndex++;
     }
}

signaler à un administrateur
Commentaire de victorcoasne le 22/10/2005 12:02:41

Comment on peut par exemple inclure la libraire libconio.a pour la compilation/linkage ?

signaler à un administrateur
Commentaire de victorcoasne le 22/10/2005 21:39:48

Bonjour,

Comment fais-tu pour trouver les fonctions qui sont "indépendantes" zippro4012 ?

Pourrais tu faire en C le getch() car j'arrive pas à l'avoir

Merci !

signaler à un administrateur
Commentaire de CyberP le 23/10/2005 08:30:32

on ne peut pas utiliser de librairie toute faite tout simplement parce que c'est fait pour windows/msdos et que ce sera pas compatible avec un autre o/s (il y a sûrement des fonctions en plus sous msdos par exemple que la librairie appelle et qu'elle ne trouvera pas autrement)

recréer le getch c'est beaucoup plus compliqué car pour gérer le clavier il faut programmer les interruptions, puis le PIC, et après chaque fois qu'on appuie sur une touche du clavier, le PIC génèrera une interruption
c'est que après cette interruption qu'on peut lire sur un port quelle touche a été enfoncée/relâchée

signaler à un administrateur
Commentaire de ana_adil le 24/10/2005 16:00:13

Bonjour,

joli travail continue comme ca.
J'attend la suite avec impatience.

;)

signaler à un administrateur
Commentaire de anonyme_man_in_this_world le 03/11/2005 10:28:00

superbe merçi pour tes explications CyberP :)).j'ai une nouvelle

petite remarque : tu crois pas qu'il est impossible de faire un

kernel avec Visual Studio puisque tous les types de projets qui

sont proposés au debut sont des projets Windows donc ....?

merçi d'avance,@++.

signaler à un administrateur
Commentaire de junior300 le 03/11/2005 17:45:41

quelqu'un connaitrait il des site où sont expliqué les lidt ?

merci d'avance

signaler à un administrateur
Commentaire de CyberP le 04/11/2005 20:12:47

pour anonyme_man_in_this_world:

ce n'est pas impossible : déjà Visual Studio ne propose pas que des Windows mais aussi pour le mode console, qui équivaut à MS-DOS
le problème de cela est que les exécutables (le programme final) créé est dans un format reconnu par windows (ou ms-dos) alors qu'il faudrait du binaire plat (premier octet du fichier = première instruction et ainsi de suite)
il y a un petit utilitaire founis avec gcc qui est objcpy et qui permet de transformer ces fichiers vers le binaire plat (en fait c'est pas pour ça qu'il a été conçu mais en théorie ça marche tout aussi bien)

de toutes manières si tu prends Dev-C++ qui utilise le compilateur MinGW (pas sûr du nom mais c'est quelque chose qui ressemble) il a un petit bug qui fait que quand on essaye de linker en binaire plat, il met une erreur (j'ai regardé sur plusieurs forum et personne n'a trouvé de solution, ou plutôt tout le monde dit que c'est un bug du compilateur)


sinon sur mon site AAP (regardez dans mon profil ça évitera de toutes manières de faire un lien mort ici au cas où) j'ai mis des tutos faits par moi-même sur comment créer son o/s, vu que je suis allé un peu plus loin dans le sujet
mais à partir d'un moment ça devient très compliqué (un moment où je ne suis pas encore arrivé dans les tutoriaux mais dans le développement de mon o/s)

signaler à un administrateur
Commentaire de CyberP le 04/11/2005 20:16:40

pour continuer sur mes compilateurs : la seule possibilitée, à part prendre objcpy, est d'utiliser cygwin par exemple, sauf que je me suis énervé sur ce truc au bout de 30 secondes et que je n'ai plus jamais essayé de le faire marcher

sinon sur mon site c'est rubrique "Votre O/S" dans "Autres" directement dans le menu à gauche

signaler à un administrateur
Commentaire de georges023 le 30/12/2005 14:58:09

si tu fais le tutoriel en pdf tu peux aussi le convertir facilement en html avec pdf995 .http://site4.pdf995.com/download.html

signaler à un administrateur
Commentaire de bloom1 le 22/01/2006 03:52:26

Hey merci hein ca m'a beaucoup aidé :)

signaler à un administrateur
Commentaire de DragonHeart le 03/02/2006 20:19:47

Je vais jeter un oeil a ce tuto ca ma l'air fort interessant dommage que sur le site beaucoup de lien ne marche pas ...

La suite du tuto est-elle prévu?

signaler à un administrateur
Commentaire de goutbouyo le 05/02/2006 20:51:39

Salut,
Le tuto est très intéressant, mais comment faire si je n'ai pas de lecteur de disquette ???

signaler à un administrateur
Commentaire de bloom1 le 05/02/2006 20:53:01

Teste avec Bochs !!! Moi aussi j'ai le même problème lol!

signaler à un administrateur
Commentaire de goutbouyo le 06/02/2006 00:20:25

J'ai réussi à booter depuis une clé USB mais maintenant quand j'essaye de charger le kernel ça me met une erreur : CS limit

signaler à un administrateur
Commentaire de DragonHeart le 06/02/2006 11:55:03

Je dis ca un peu sans trop savoir j'apprend tous comme toi :P .Mais il me semble que cela vien de la taille des Segments qui est trop grande(pour une clé USB à mons avis) CS étant me semble t'il le Code Segment (Dans le tuto les segments ont une taille de 128 Mo chacun si je ne me trompe pas!)

signaler à un administrateur
Commentaire de CyberP le 06/02/2006 19:57:49

CS veut bien dire Code Segment mais ça n'a rien à voir avec la clé USB, c'est en rapport avec la RAM
peut être que c'est un problème de compilation
personnelement je suis passé sous linux pour continuer à programmer mon o/s parce que sous windows entre les compilateurs qui compilent pas bien, le rawwrite qui a parfois aussi des problèmes d'écriture....

signaler à un administrateur
Commentaire de Misterover le 07/02/2006 22:37:12

Quel est l'adresse du bon site ?
Celle qui est donnée me dit que la page n'existe plus quand je clique sur tutoriaux,pareil pour les autres lien.

signaler à un administrateur
Commentaire de CyberP le 08/02/2006 14:55:32

En anglais il y a http://www.mega-tokyo.com/osfaq2/
En français pas grand chose....

signaler à un administrateur
Commentaire de Ulmo le 17/02/2006 12:21:20

Excellent tuto !! J'attend avec impatience la suite !!!

signaler à un administrateur
Commentaire de vangeurmasker le 04/03/2006 10:33:47

Le site marche plus. On a "la page n'existe pas" sur toutes les pages.
Sinon t'a avancé le tutorial en HTML ?

signaler à un administrateur
Commentaire de mannou22 le 13/03/2006 13:55:48

je n'ai pas pu accéder au tutorial, il m'affiche toujours même erreur impossible d'extraire les fichiers, please est ce que quelqu'un peut m'aider?

signaler à un administrateur
Commentaire de charlyb29 le 21/03/2006 16:49:42

Bravo pour cette source dommage que le site ne marche plus si quelqu'un avait les dernier source en date pourait-il me les passé ?

signaler à un administrateur
Commentaire de Parad0x le 03/04/2006 18:16:10

Il manque le chapitre 1 dans le dernier ZIP :-((

signaler à un administrateur
Commentaire de Parad0x le 03/04/2006 18:17:08

Il manque le chapitre 1 dans le dernier ZIP :-((

signaler à un administrateur
Commentaire de Ulmo le 03/04/2006 19:32:02

le chapitre 1 c'est l'introduction :)
enjoy !

signaler à un administrateur
Commentaire de daqwpm le 27/05/2006 14:08:53

On fait comment pour lire le tutorial ?

signaler à un administrateur
Commentaire de DragonHeart le 08/06/2006 15:35:18

C'est dommage que ce tutorial soit tombé à l'abandon ...
En espérant une suite un de ces Quatres !

signaler à un administrateur
Commentaire de Misterover le 08/06/2006 18:41:27

si vous etes interessé il existe le bosokernel, tapez ce nom dans google et vous trouverez votre bonheur...

signaler à un administrateur
Commentaire de CyberP le 19/06/2006 11:01:12

oui mais ils s'arrête un peu vite le bosokernel c'est ça le problème (et pas très précis vers la fin)

signaler à un administrateur
Commentaire de samana le 02/08/2006 01:01:35

Cours de BTS Info identiques...l'OS ou programmation système reste qqchose de complexe ms accessible pr qui maîtrise le C. Beaucoup de théorie aussi pr comprendre la gestion de la mémoire (physique et virtuelle) du boot jusqu'au chargement du système en mémoire. Bonne continuation et achetez un bon bouquin de théorie des OS pr maîtriser ts les différents aspects de la gestion mémoire, des interruptions systèmes/logicielles, des sémaphores...très intéressant.

signaler à un administrateur
Commentaire de jack_ryan le 26/09/2006 20:25:25

salut,
Avant tu avais mis un chapitre traitant rapidement de l'affichage à l'ecran...
peut tu les remettre quelque part car il contenait certaines informations utiles.
merci d'avance.

signaler à un administrateur
Commentaire de RPGman le 24/12/2006 17:58:06

euh pourquoi ça commence au chapitre 2

signaler à un administrateur
Commentaire de Misterover le 26/12/2006 18:16:10

ben personne ne sait en fait

signaler à un administrateur
Commentaire de Kirua le 26/12/2006 18:17:52

L'intro constitue sans doute le chapitre 1. Quand je pense au nombre de gens qui ont reçu 3 mails pour ça ... rahlala.

signaler à un administrateur
Commentaire de Misterover le 26/12/2006 20:40:42

lol

signaler à un administrateur
Commentaire de yoshito le 30/12/2006 17:03:29

Vous sauriez pas où est ce qu'on peut avoir les chapitres manquants (vu qu'ici ca n'est plus a jour), ce serait bien :)

signaler à un administrateur
Commentaire de crazy lapinou le 21/02/2007 19:01:25

Pourquoi le site http://gameos.fb.bz/ ne marche pas? J'essai depuis plusieurs jours mais ça ne marche pas!!!

signaler à un administrateur
Commentaire de gamemonde le 20/10/2007 02:21:38

je sais ce suject est mort mais je voudrais juste le chapitre 4 pour le kernel en c car le reste j'ai reussir a faire mais je comprend pas comment faire un kernel en c

signaler à un administrateur
Commentaire de Monyisageek le 05/01/2008 14:45:18

S'il vous plait la suite !!

signaler à un administrateur
Commentaire de smasher81 le 23/02/2008 23:33:08

S'il vous plait la suite !!--Monyisageek

Je ne pourrais pas mieu dire ;) La suite !C'est vraiment le seul tutorial compréhensibile que j'ai trouvé ;)..

smasher81@hotmail.com

signaler à un administrateur
Commentaire de Picsou9 le 26/02/2008 19:31:12

Impossible d'exécuter le programme chez moi :(

signaler à un administrateur
Commentaire de Monyisageek le 29/02/2008 15:33:44

Tu l'utilise dans les bonnes conditions ?
Les répertoires sont crées et les fichiers existes, etc... ?

signaler à un administrateur
Commentaire de Monyisageek le 12/07/2008 17:54:27

J'ai trouvé ce site, qui semble correspondre assez bien http://a.michelizza.free.fr/PmWiki/pmwiki.php?n=TutoOS.TutoOS

signaler à un administrateur
Commentaire de crazy lapinou le 12/07/2008 19:03:17

Si je ne me trompe pas, il y a un lien vers ce site dans le tuto

signaler à un administrateur
Commentaire de lucky84 le 12/11/2008 14:54:13 10/10

Oui je crois

signaler à un administrateur
Commentaire de mitsh666 le 05/12/2008 11:44:29

Hello,

Suis un peu débutant, mais envie de me former surtout que maintenant j'ai un but. J'aimerai faire un OS qui démarre en 1 seconde. Un OS avec le minimum de programmes vitaux. Le but : ecouter rapidement musique, film, ... sans avoir à attendre 2min le démarrage de Windows.

Dans un premier temps, je veux pas de connexion internet, mais juste pouvoir mettre des fichiers depuis un autre pc (disque en documents partagés).

J'imagine donc que je dois m'orienté sur la programmation d'un OS. Qu'en pensez-vous? Ton tutorial est fait pour...

signaler à un administrateur
Commentaire de abdoulax le 05/12/2008 11:52:43

Je pense que "Cloud" va te permettre de faire ce genre de chose et en plus de te connecter à internet!

signaler à un administrateur
Commentaire de victorcoasne le 05/12/2008 12:06:19

Salut,
Si t'as envie de passer ta vie à écrire des "drivers" pour tous tes périphériques (écran, clavier, souris, enceintes), réécrire des libraires vidéos, audio utiliser les interuptions correctement afin d'afficher point par point sur ton écran des graphiques pas évolué, vas-y.
Un OS demande de TOUT réinventer.
Si c'était aussi facile tout le monde aurait son propre OS et on se baserait pas sur un DOS ou un UNIX pour en un créer un nouveau.
Bonne chance et bonne prog,
@++,
Victor

signaler à un administrateur
Commentaire de abdoulax le 05/12/2008 12:13:27

D'ailleur si tu veux comprendre le fonctionnement d'un système Linux, essaye LFS. C'est un peu hard mais si tu y arrives tu pourras réaliser ton mini OS.

Have fun

signaler à un administrateur
Commentaire de mitsh666 le 05/12/2008 14:08:02

hello,

Merci pour toutes ces précisions.

Je pensais pas qu'il fallait réinventer TOUT SUR TOUT. Ce n'est donc pas ce que je recherche(ou du moins pour l'instant). Je pensais qu'on pouvait faire son OS en assemblant des composants déjà existants et ses propres composants, pour arriver à une vitesse de démarrage de l'ordre de la seconde. hum.

LFS... ça m'a l'air intéressant... vais creuser dans ce sens.

Merci.

A+
Angel


signaler à un administrateur
Commentaire de abdoulax le 05/12/2008 15:57:28

Regarde aussi cloud gOS de google, c'est vraiment ce que tu recherches, enfin au niveau du concept. Cette OS démarre en 1 seconde et te donne accès à des outils. Après tu peu directement lancer Windows ou Linux sans redémarrer la machine.

Have fun

signaler à un administrateur
Commentaire de abdoulax le 05/12/2008 16:04:13

Quand j'ai dis de google, j'ai abusé, ptite correction de ma part :p

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

J'aimerai avoir votre avis... [ par vinc1008881 ] voila, j'ai envi de poster un tuto sur se site en plusieurs parties, voila mes motivations (extrait de l'intro) Pourquoi ce tutorial&nbsp;? &nbsp; Recherche programmeur pour un OS [ par yoman64 ] Bonjour a tous,J'ai commencer a dévellopper un os en langage c (bien sur il y a un peu d'assembleur :P).J'ai fais la base du systeme (print , detectio system() [ par LordBob ] Bonjour a tous,voilla j'essai de lancer un programme externe au miens, qui est un programme console et qui a me besoin d'argument supplementaire pour interruption et VC++ [ par louatiamin ] mon programme necessites des interruption et je veut ke ca marche en32bits mais je sais ke win controle les interruptionya til un moyen de le faireexe coment faire un serveur un c# ? et comment utiliser system(); en c# ? [ par gomoz ] bonjour,je souterai faire un serveur en c#(de preférence) ou c++. Mais je débute et je ne vois pas comment implémenter une fonction -pour lister un do timer et interruption sur 68k [ par Bandit_world2 ] Voilà. Je suis actuellement en stage et un de mes tuteurs m'a demandé de programmer un 68376. J'ai créé une fonction C qui doit se faire toutes les t system() - redirection [ par fcbouan ] bonjour,je voudrais savoir s'il y a un moyen pour rediriger le 'flux' avec system(" tar -czvf fichierdest fichiersource") vers un socket ( vers un création d'un os [ par VIRUS444 ] bonjour je voudrais créé un os.Je recherche des gens s'y connaissan bien en C++ ou CEt pourkoi pas en assembleur pour se projetsi sa vous interesse interruption sur le port parrallele [ par nico3712 ] salut à tous, j'ai des problèmes au niveau de codage de mon application, c'est à dire que je recherche à faire des interruption avec mon port parralèl Projet d'OS Alternatif [ par SystemOfAXav ] Salut, Microbes est un projet d'OS alternatif que j'ai démarré il ya quelques semaines . Dont le but est d'apprendre le fonctionnement du PC et d'un s


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 16,677 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.