begin process at 2008 05 12 02:50:46
1 170 129 membres
34 nouveaux aujourd'hui
13 956 membres club

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é: 20 356 / 4 404

Note :
9,64 / 10 - par 33 personnes
9,64 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (176)
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
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

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
  • 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