Bonjour,
Voila ça fait quelque temps que j'essaye de crée un OS pour le "fun" on va dire ... Cependant ca fait plus d'une semaine que je suis bloqué sur la ligne de départ car je n'arrive pas à créer une fonction qui écrit dans la mémoire video.
Le C étant mon langage de prédilection je pensais le maitriser ... visiblement c'est pas du tout le cas mdrrr.
Je suis 2 tutos pour la création de l'os : https://michelizza.developpez.com/re...ropre-systeme/ et https://systeme.developpez.com/tutor...eloppement-OS/
Pour en revenir au sujet si je fais en asm :
pas de soucie, tout ce passe pour le mieux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 mov byte [0xB8000], 'H' mov byte [0xB8000], 0x57
Mes problèmes commencent quand je passe au C.
Si je fais :
BOOOM ca fonctionne plus, il m'affiche W (code hexa en ascii : 0x57) et pas H (si j'inverse il m'affiche H mais pas le bon background). Mais si je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 char *tt = (char *)0xB8000; tt[0] = 'H' tt[1] = 0x57
et bien ça fonctionne, donc je me suis dit que peut etre qu'il fallait ajouté 1 a l'adresse 0xB8000 (soit 0xB8001)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 char *tt = (char *)0xB8000; tt[1] = 'H' tt[2] = 0x57
Mais plus si je fais :
ben ca marche pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 char *tt = (char *)0xB8001; tt[0] = 'H' tt[1] = 0x57
Du coup j'ai testé d'autres choses :
ça ne fonctionne pas, mais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 char *tt = (char *)0xB8000; *tt = 'H'; *(tt + 1) = 0x57;
ben ça fonctionne ... mais si je fais une boucle dans ma fonction putcar pour faire le fameux ++tt, ca fonctionne plus non plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 char *tt = (char *)0xB8000; *tt = 'H' ++tt; *tt = 0x57;
Du coup j'avoue ne pas tout saisir mais je ne me suis pas découragé et j'ai trouvé une autre méthode avec des short à la place des char ... or les memes problemes apparaissent a peut pres.
Bref du coup ca me décourage car j'ai deja passé des dizaines d'heures et j'ai jamais reussi à passer la ligne de départ ...
Pour le moment ma fonction putcar ressemble à ça (elle ne marche pas et a été modifié au moins 150000000000fois mdrr)
cette fonction affiche (a priori) le bon background, au bon endroit mais met toujours le char '?' à la place de la lettre demandé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 void putcar(char letter, char style, short *X, short *Y) { short *video = (short *)0x0B8000; short index, i, x , y, value; x = *X, y = *Y; if (letter == 10) //Retour à la ligne x = 0, ++y; else if (letter == 13) //Retour au début de la ligne x = 0; else if (letter == 9) //TAB x = x + 8 - (x % 8); else { //AUTRE CHAR index = 80 * y + x; value = style; //Tout les tutos mettent la lettre ici mais ca n'a jamais fonctionné pour ma par, or mettre le style à ça place a fonctionné une fois ... value = value << 8; value |= letter; for (i = 0; i < index; ++i) ++video; *(video) = value; ++x; } if (x > 79) x = 0, ++y; if (y > 24) { for(index = 0; index < (y - 24); ++index) //C'est pas opti mais j'changerai ca plus tard et de toute facon je ne l'ai pas encore testé scrollup();//scrollup(Y - 24); } *X = x, *Y = y; }
(j'aime pas trop les variables globales et meme, avec ou sans variables globales ca n'a rien changé à ce niveau la....)
En terme de Hardware je suis sur une VM kali (avec virtualbox), mon proc est un AMD A9 7th gen, et j'ai 4G de RAM (d'ailleurs je vais passé a 16Giga ... ça aura une influence sur l'os ?). Ah et je suis en mode protégé.
j'ai aussi entendu parlé de char far* sauf que ça pour le coup j'en ai jamais utilisé et il me semble qu'il necessite un include (on peut inclure des librairie pour la création d'un OS ?)
Quelqu'un pourrai-t-il m'aider ou m'expliquer ou bien meme me trouver un cours/tuto/faq/forum qui reponde a cette question s'il vous plait ... parce que je ne sais meme plus quoi tester la ...
PS : Mon but est de crée un OS 64 bit et pas 32, si qq un ce sent de m'expliquer les différences que cela va impliquer il est le bienvenue ... mais bon j'en suis pas encore la.
Partager