Despues de varios dias y bastantes intentos, he logrado crear una imagen iso capaz de arrancar desde la BIOS, mi pregunta es ¿ cual sería el suiguiente paso lógico para hacer algo mas, como un mini kernel o algo así ?
lo cree con MASM 6.15 y la imagen ISO con MISO.
Por si le interesa a alguien dejo el código;
; compilar: ml /AT /c /Zm primero.asm
; linkar : LINK /TINY primero
; crear iso : miso primero.iso -ab primero.com
.model tiny
COMSEG SEGMENT
org 7C00h ; requerido por la BIOS
start:
mov ax, 00h
mov ds, ax
lea si,[ds: MyStr] ; si apunta a la cadena MyStr
mov ah, 0Eh ; para int 10 escribir pantalla
mov bh, 00h ; numero pagina video
mov cx,27 ; numero caracteres cadena MyStr
loopit: lodsb ; carga AL con caracter incrementa SI
int 10h ; llamada bios
LOOP loopit ; decremente CX , repetir si CX no es cero
jmp $
MyStr db "Arranque creado por TomDiPe"
db 510-($-start) dup (0) ;Loads of zeroes
dw 0AA55h
COMSEG ENDS
end start
pasar a proteced mode de 32bit, o long mode de 64bit.
Memory manager
File system
executable format
ui
etc...
No necesariamente con ese orden.
http://wiki.osdev.org/Expanded_Main_Page
Saludos.
Por cierto, una duda tengo y aunque lo he buscado no me ha quedado claro:
que significa o hacia donde apunta el simbolo $ en la instrucciones jmp $ , y ($-start) ??
Cita de: SokarTefnut en 16 Septiembre 2012, 01:08 AM
Por cierto, una duda tengo y aunque lo he buscado no me ha quedado claro:
que significa o hacia donde apunta el simbolo $ en la instrucciones jmp $ , y ($-start) ??
$ es la ubicación actual y db 510-($-start) , vamos a ver el bootloader debe tener 512 bytes exactos
510 menos (la ubicación actual - la ubicación de start) , lo que te va a dar es el tamaño que tiene el code hasta la ubicación actual , entonces coges y se lo restas a 510.
Con el valor que queda hace un dup 0 con los bytes que queden libres para rellenar , los últimos dos bytes son para el boot signature, dw 0AA55h , lo que hace es crear un bootloader de 512 bytes exactos.
En cuanto a lo de jmp $ es para que salte siempre al mismo lugar , digamos es como un bucle infinito , siempre salta a ese jmp y así indefinidamente.