Bootloader
Explicación del Bootloader
Este código corresponde al bootloader de DariOS
Encabezado
org 0x7c00
bits 16
org 0x7C00
: Define que el código se cargará en la dirección de memoria 0x7C00, que es donde la BIOS carga el bootloader.bits 16
: Indica que el código es para 16 bits (modo real).
Inicio del programa
start:
jmp main
- Salta directamente a la etiqueta
main
, que contiene el código principal.
Limpieza de pantalla y colocación del cursor
main:
push ax
push bx
push cx
push dx
- Se guardan los registros
ax
,bx
,cx
, ydx
para no perder su contenido original.
mov ah, 0x06
mov al, 0
mov bh, 0x07
mov cx, 0x0000
mov dx, 0x184F
int 0x10
- Usa la interrupción
0x10
para limpiar la pantalla. AH=06h
borra líneas de texto.AL=0
indica que se borra toda la pantalla.BH=07h
define el color (gris sobre fondo negro).CX
yDX
definen la región a limpiar (toda la pantalla).
mov ah, 0x02
mov bh, 0x00
mov dh, 0x09
mov dl, 0x25
int 0x10
- Mueve el cursor a la posición centrada (fila 9, columna 37).
Muestra un mensaje de bienvenida
mov si, mensaje_bienvenida
call imprimir_cadena
- Mueve la dirección de la cadena de bienvenida al registro
SI
. - Llama a la subrutina
imprimir_cadena
(incluida desdefunciones_globales.inc
) para mostrar el mensaje.
mov si, mensaje_kernel
call imprimir_cadena
- Muestra otro mensaje desde la variable
mensaje_kernel
. - La suma de estos mensajes aparenta ser un SO real.
Saltar al kernel
call leer_caracter
- Llama a una rutina que espera una entrada del usuario, y cuando leemos el caracter sigue el codigo para saltar al kernel
mov ah, 0x02
mov al, 4
mov ch, 0
mov cl, 2
mov dh, 0
mov bx, 0x1000
int 0x13
- Interrupción
0x13
para leer sectores del disco. AH=02h
indica lectura.AL=4
indica que se leerán 4 sectores.CH=0
,CL=2
,DH=0
definen la ubicación del sector en CHS.BX=0x1000
es la dirección de memoria donde se cargará el contenido.
jmp 0x1000
- Salta a la dirección 0x1000 para ejecutar el código cargado.
main:
pop ax
pop bx
pop cx
pop dx
- Devuelve los valores que guardamos antes en la pila
Inclusión de archivos
%include "libs/variables.inc"
%include "libs/funciones_globales.inc"
- Incluye variables y funciones externas definidas en otros archivos.
Final del bootloader
times 510-($-$$) db 0
dw 0xAA55
- Rellena el archivo hasta 510 bytes con ceros.
0xAA55
es la firma del sector de arranque que la BIOS necesita para considerar el disco como booteable.