SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: Seraph en Martes 24 de Mayo de 2011, 20:47

Título: mi primer bootloader - orientacion
Publicado por: Seraph en Martes 24 de Mayo de 2011, 20:47
Hola que tal, me estoy iniciando en el mundo de ASM y los sistemas operativos, estuve leyendo por internet y digamos que escribí este bootloader en base a varios ejemplos de internet, al parecer todo esta correcto, si imprime la cadena etc. ahora tengo la duda de por donde continuar, me gustaría crear un mini kernel que imprima alguna cadena, pero este no es el problema porque ya lo tengo hecho, el detalle es que no se cómo saltar del bootloader al kernel. Por ahora tengo los dos archivos independientes bootloader.bin y kernel.bin

Les dejo el codigo del bootloader.bin (cualquier consejo por favor decirme):

Código: ASM
  1. BITS 16
  2.  
  3. inicio:
  4.     mov ax, 07C0h
  5.     add ax, 288
  6.     mov ss, ax
  7.     mov sp, 4096
  8.     mov ax, 07C0h
  9.     mov ds, ax
  10.  
  11.  
  12.  
  13.     mov si, cadena_texto
  14.     call imprimir_cadena
  15.     jmp $
  16.  
  17.     cadena_texto db 'Mi primer bootloader!', 0
  18.  
  19. imprimir_cadena:
  20.     mov ah, 0Eh
  21. .repetir:
  22.     lodsb
  23.     cmp al, 0
  24.     je .terminar
  25.     int 10h 
  26.     jmp .repetir
  27. .terminar:
  28.     ret
  29.    
  30.     times 510-($-$$) db 0
  31.     dw 0xAA55
  32.  

Estoy usando NASM y Qemu, sobre window XP, desde ya les agradezco.

...
Título: Re: mi primer bootloader - orientacion
Publicado por: Enko en Sábado 18 de Junio de 2011, 23:51
busca info sobre la interupcion 13 (int  0x13)
Es la que lee bloques de datos desde el disquet y los carga a la memoria.

Una vez cargado a la memoria el kernel, saltas hacia la direccion donde cargaste el kernel.
Título: Re: mi primer bootloader - orientacion
Publicado por: Seraph en Martes 21 de Junio de 2011, 01:46
Hola, que tal, creí que ya no estaba activa esta parte del foro. gracias por responder, estuve leyendo y probando algunos códigos que encontré por la red y he logrado crear el sector de arranque del disquete que lo que hace es recorrer la raíz del FAT12(disquete) y buscar el archivo KERNEL.BIN, ya lo lee y todo, seguí leyendo y al parecer lo siguiente es pasar a modo protegido pero la verdad que no tengo ni idea, a parte que por lo que leí, al pasar a modo protegido tienes que crear tus propios drivers de video, teclado etc., alguna ¿orientación al respecto?.
Título: Re: mi primer bootloader - orientacion
Publicado por: Enko en Martes 21 de Junio de 2011, 06:31
Ultimamente esta parte del foro se ve inactiva. Yo entro muy de vez en cuando.

La PC arranca en modo REAL. 16 bit, con sus limitaciones. Pero la BIOS corre en modo REAL, por ende, estando en modo REAL tienes acceso a todas las interrupciones de la BIOS.

El modo PROTEGIDO, 32 bit, en el que corren la mayoria de los SO,  tiene un monton de ventajas, multihilo, direcciona 4gb de memoria, distintos niveles de privilegios etc....
Para una buena explicacion, no hay nada mejor que leer
intel x86 architecture manual
Estan en la pagina de INTEL.
Lo que si ocurre, es que las interrupciones de la BIOS ya no sirven, porque estas ulitmas solo funcionan en modo REAL.

Asi que la parte de armar tus propios drivers, en si es cierto, pero no te creas que en un driver de teclado es dificil de hacer, es tan solo comunicarte con el dispositivo usando IN/OUT.
Y para la salida en pantalla, es tan solo modificar una matriz de 80x25 que se encuentra en el espacio de memoria de video. Estando en modo texto claro.

una buen lugar para que busques referecias, es osdev.org.

Saludos.