|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |
|
Futur Membre du Club
![]() Pierre Étudiant Inscription : juillet 2008 Messages : 22 ![]() |
Bonjour tout le monde, comme la plupart des gens qui poste sur ce forum je suis en train de programmer un OS.
Pour l'instant je suis ce tuto. Actuellement je voudrais afficher un message en couleur, le tuto indique de modifier directement les octets en mémoire vidéo. Le problème c'est que le tuto me dit Citation:
![]() Je pense que le problème viens du fait que je suis encore en mode reel et que l'adresse mémoire n'est pas la même. Je voudrait donc connaitre l'adresse physique de la mémoire vidéo en mode reel. |
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() Étudiant Inscription : juillet 2007 Messages : 472 ![]() |
Ça fait longtemps que je n'ai plus fait d'ASM 16 bits mais à mon avis il faut initialiser un segment à 0xB800 puis adresser la mémoire de la carte graphique en passant par ce segment-là.
[Edit] Si ça peut t'aider j'avais adapté une petite demo : http://pastie.org/131935 C'est dans le même style mais ça n'utilise pas la même adresse et c'est pour FASM.
__________________
:wq |
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Pierre Étudiant Inscription : juillet 2008 Messages : 22 ![]() |
Merci de ta réponse, le problème c'est que je débute en ASM, si t'as le temps est ce que tu peux m'expliquer comment faire STP.
Si t'as pas le temps laisse tomber, je me débrouillerai. |
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() Étudiant Inscription : juillet 2007 Messages : 472 ![]() |
Lis ça : http://benoit-m.developpez.com/assem.../Partie1-2.php
Et n'oublie pas que ça sert seulement pour l'assembleur 16 bits.
__________________
:wq |
|
|
00
|
|
|
#5 |
|
Futur Membre du Club
![]() Pierre Étudiant Inscription : juillet 2008 Messages : 22 ![]() |
Merci je vais voir ca .
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Inscription : mai 2008 Messages : 157 ![]() |
Bonsoir,
c'est vrai que je n'ai pas précisé les différences entre adressage en mode réel et adressage en mode protégé ![]() Essaye de le lire et revient vers nous si ça n'est toujours pas clair après ça. Bon courage,
__________________
Programmer son propre noyau, une introduction avec Pépin |
|
|
00
|
|
|
#7 |
|
Futur Membre du Club
![]() Pierre Étudiant Inscription : juillet 2008 Messages : 22 ![]() |
Je comprend pas ce qui faut faire
|
|
00
|
|
|
#8 | ||||
|
Membre expérimenté
![]() ![]() François conception mécanique Inscription : janvier 2005 Messages : 329 ![]() |
Hello,
En mode reel, quand tu veux acceder a une donnee en memoire (1Mo maxi) tu as besoin de 2 registre 1 registre de segment : CS, SS, DS, ES, FS ou GS CS = Code Segment = segment utilise par le proc pour trouver le code a executer (ne pas y toucher) SS = Stack Segment = segment de pile (ne pas toucher non plus) DS = Data Segment = segment general de donnees ES = Extra Segment = 2eme segment utilise par les donnees FS et GS = comme ES mais uniquement sur les 386 et superieurs Ensuite il te faut un registre d'offset : BX, BP, SI, DI Toi, tu veux acceder a la RAM video en mode texte, son segment est B800h Un registre de segment ne peut recevoir une valeur immediate ne fonctionnera pas et il faut faire : Maintenant que ton registre de segment est bien positionne, tu peux t'occuper du registre d'offset par exemple DI (Destination Index) Voila, tout est pret pour envoyer une valeur en B800:0000h soit le premier octets de la RAM video qui se trouve etre le premier caractere en haut a gauche. exemple: Code :
En fait, ca a bien marche, mais la RAM video du mode texte comporte 2 octets par caractere. 1 pour le code ASCII et 1 pour la couleur ! Par defaut, la couleur du caractere ET du fond = 0 donc noir sur noir... il n'y a plus d'espoir ![]() Pour voir ton caractere, tu peux remplacer l'utilisation de AL par AX en placant dans AH la valeur de l'attribut video. le programme devriendra donc : Code :
![]() a+ Francois |
||||
|
|
20
|
|
|
#9 |
|
Membre actif
![]() Inscription : mai 2008 Messages : 157 ![]() |
As-tu lu le tutoriel cité par Dapounet ?
__________________
Programmer son propre noyau, une introduction avec Pépin |
|
|
00
|
|
|
#10 |
|
Futur Membre du Club
![]() Pierre Étudiant Inscription : juillet 2008 Messages : 22 ![]() |
Oui j'ai lu le tuto, mais c'est bon, j'ai compris avec les explication de forthman
Mais j'ai des erreur a la compilation ![]() mov ax, B800 ==> error: symbol 'B800' undefined mov es: [di], al ==> error: invalid combination of opcode and operandes msg00: db'Vous venez de demarer AKruX v 0.0.0.3!',1,0 ==>error: phase error detected at the end of assembly. |
|
00
|
|
|
#11 | |
|
Membre expérimenté
![]() Étudiant Inscription : juillet 2007 Messages : 472 ![]() |
Essaie d'ajouter un zéro devant le B800 (sinon l'assembleur croit que c'est un identifiant).
Citation:
Enlève les deux points et ajoute un espace après le db. L'avant-dernier byte doit sûrement être 10 au lieu d'1.
__________________
:wq |
|
|
|
00
|
|
|
#12 |
|
Futur Membre du Club
![]() Pierre Étudiant Inscription : juillet 2008 Messages : 22 ![]() |
J'aireussi a compiler
![]() Mais maintenant j'ai rajouté tous les mov byte [0xB800] J'ai warning: byte value exceeds bounds. pour toute le lignes d'atribut...Sinon estce qui a un site qui reference toute les erreurs que renvois nasm ? |
|
00
|
|
|
#13 | ||
|
Membre expérimenté
![]() Étudiant Inscription : juillet 2007 Messages : 472 ![]() |
Citation:
Citation:
__________________
:wq |
||
|
|
00
|
|
|
#14 | ||
|
Futur Membre du Club
![]() Pierre Étudiant Inscription : juillet 2008 Messages : 22 ![]() |
Code :
|
||
|
00
|
|
|
#15 |
|
Membre expérimenté
![]() Étudiant Inscription : juillet 2007 Messages : 472 ![]() |
Quand NASM voit les guillemets il essaie de remplacer les caractères qui apparaissent par leur code ASCII. Donc avec '0x0A', il essaie de mettre le code du 0, celui du x, celui du 0 puis celui du A. C'est trop grand pour un octet, donc il t'avertit. Si tu mets 0x0A à la place ça donnera sûrement ce que tu veux.
__________________
:wq |
|
|
00
|
|
|
#16 |
|
Futur Membre du Club
![]() Pierre Étudiant Inscription : juillet 2008 Messages : 22 ![]() |
J'arrive a compiler mais quand je "boot" avec qemu, pas de caracteres en couleur...
juste le message du debut. "Vous venez de demarer AKruX 0.0.0.3!" Qu'est ce que je fais pas bien ?
|
|
00
|
|
|
#17 |
|
Membre actif
![]() Inscription : mai 2008 Messages : 157 ![]() |
C'est possible de voir le code source ?
__________________
Programmer son propre noyau, une introduction avec Pépin |
|
|
00
|
|
|
#18 | ||
|
Futur Membre du Club
![]() Pierre Étudiant Inscription : juillet 2008 Messages : 22 ![]() |
Code :
|
||
|
00
|
|
|
#19 | ||||
|
Membre expérimenté
![]() ![]() François conception mécanique Inscription : janvier 2005 Messages : 329 ![]() |
euhhh... je crois que tu utilise une routine presente dans UTIL.INC
c'est donc normal que tu ne puisse pas "gerer" la couleur Et ce bout de code : Code :
mais tu melange le segment et l'offset Il faudrait que ca ressemble plus a du : Code :
|
||||
|
|
00
|
|
|
#20 |
|
Membre régulier
![]() Inscription : mai 2010 Messages : 253 ![]() |
Le code du tuto de http://a.michelizza.free.fr/pmwiki.php fonctionne très bien sauf que l'exemple présenté par gheaeckkseqrz ne montre pas tout...
En fait ce sont deux extraits de deux codes différents : le secteur de boot qui est en mode réel et le kernel en mode protégé. Le secteur de boot initialise les segments de données et de code avant de passer la main à kernel qui lui est en mode protégé et peut accéder à la ram vidéo. Je cherche une doc exhaustive sur le mappage de la vidéo (en mode texte, mais s'il existe un autre mode cela m'intéresse...) sur un PC, surtout comment manipuler les octets d'attribut. Si quelqu'un sait où je peux trouver ça... Salut à tous...
__________________
"Bien qu'on ait du coeur à l'ouvrage, L'Art est long et le Temps est court." - CB |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com