2
« en: Miércoles 27 de Junio de 2007, 13:58 »
Hace ya meses (si, soy patético) que intento, sin éxito desarrollar un sistema operativo de juguete (mejor dicho un cargador de programas con 4 funciones) mi idea es simplemente divertirme, no pretendo hacer nada usable ni nada grande....
Hice mis pinitos con el modo real, un mini entorno con 4 funciones básicas de acceso a disco y demás
El problema vino cuando 1mb me resultó insuficiente para jugar (entiendase jugar por pasarlo bien programando en ensamblador)... aqui entra el modo protegido
Creo los descriptores de segmento, tal y como indica la documentación de intel, 200mil webs y tres o cuatro libros, paso a modo protegido tal y como indica y hago el salto corto para "entrar" a un segmento válido y ete aqui el problema
siempre, SIEMPRE SIEMPRE, invariablemente, si habilito las interrupciones, "error de protección general"
No pego código para no ofender sensibilidades y pq no lo tengo a mano ahora (estoy en la oficina) pero si quereis mas información la pondré mas tarde...
a grandes rasgos... esa excepción solo debería suceder si el segmento no es válido y no creo que sea el caso... ¿alguien sabe si hay que hacer algún paso adicional salvo cargar (lgdt) la tabla de descriptores, crear una tabla de interrupciones (aunque creo que no es imprescindible) pasar a modo protegido, hacer un salto largo y tirar millas?
otra cosa que no acabo de tener claro es como demonios selecciono los selectores...
8h es el primero... 16h es el segundo?
(perdón por ser tan ambiguo... prometo desarrollar mas, con código si el hilo crece)