Blog d'un EPSIen Epsylon

Informatique & co

BesOS, encore BesOS...


Mon plus gros soucis actuel est BesOS et l'état de la mémoire vive. C'est trés frustrant de déveloper un Kernel et de douter de ce qui se trouve vraiment en mémoire, à quel endroit. Pourtant, on est censé justement maitrisé cet aspect lors d'un tel projet. Pour cela il va vraiment falloir que je me penche sur les possibilités de debug sous Bochs et donc le recompiler :( Car je l'ai compilé la première fois sans activé le port e9 hack ainsi que le debuguer intégré.
J'ai essayé pourtant d'utiliser une fonction (Boso Kernel) qui dump de n octets à partir d'une adresse (sensé ? être linéaire), mais je me demande vraiment si elle l'est et ou elle pointe car je ne maitrise par encore les opérations du MMU. Pourtant, les descripteurs de segments possèdent comme base 0x0 et la pagination n'est pas activé, de ce fait, l'adresse doit vraiment être linéaire.

void dump(unsigned char* addr, int n)
{
	char c1, c2;
	char *tab = "0123456789ABCDEF";
	
	while(n--)
	{
		c1 = tab[(*addr & 0xF0)>>4];
		c2 = tab[*addr & 0x0F];
		addr++;
		putcar(c1);
		putcar(c2);
	}
}


J'ai essayé de dumper l'adresse 0xB8000 de 2 octets qui est l'adresse de début du mapping de la mémoire vidéo en RAM.
Et à priori, ça me renvoit tout.... sauf ce que je souhaite :/
Les deux octets renvoyés semblent ne pas du tout correspondre au char affiché et les attributs d'affichage.
J'ai vu qu'il était possible avec l'internal debuguer de Bochs d'examiner la mémoire en donnant une adresse linéaire. Il faut absolument que demain j'essaye cela.

Comme un soucis n'est jamais seul, j'ai l'impréssion que l'IDT est foireuse, pourtant le PIC semble bien programmé et les IRQ correspondent aux vecteurs de départs programmés.
Mon problème semble être les exceptions levées par le CPU. Je fais délibérement des divisons par zéro mais l'exception ne semble jamais lever. Ca par contre, je ne sais vraiment pas comment le debuguer. J'avais une idée de début de piste, avec la GDT qui semblait écraser l'IDT en mémoire (j'avais définis des adresses de bases trop proches) mais même en changeant l'IDT de place, ça ne résout rien. J'avais commencé la gestion de la mémoire physique en définissant des descripteurs de pages car on travaille avec des pages de 4Ko vu que le bit de Granularité a été activé dans les descripteurs de segment, mais je vais mettre ça de coté et essayer de résoudre les problèmes précédent. ça ne sert à rien de continuer, la base est bancale.
Debug & See, le casse tête continue.
Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]