Programación General > ASM (Ensamblador)
Boot Loader
Enko:
Estuve haciendo un boot loader que logra cargar el kernel desde el disquet usando lectura de sectores.
Lee desde el disquet y lo carga a la direccion 0x1000:0000 y luego hace un salto alli.
El kernel por ahora se encarga de mostrar un texto en la pantalla nomas y luego reiniciar. Si el loader no encuentra el disquet o el kernel, muestra error y espera para reiniciar.
Hasta ahora todo bien. Las cosas dudosas que ocurren:
Para mostrar el mensaje de "kernel cargado" desde el kernel, la cadena la tengo que colorar en archivo del bootloader, sino no se muestra pero ensambla.
Otra cosa, la funcion que muestra el texto, debo tenerla repetida con otro nombre en el kernel porque si no, no muestra el texto pero si ensambla.
Por sierto :devil: , me mata la forma que use para crear la imagen de disquet que uso con vmware o VirtualPC:
--- Código: Text --- include "bootloader.asm"include "kernel.asm"db 1474560 - $ dup 0 Lo malo, es que no tiene formato pero es suficiente por ahora.
Este es el loader:
--- Código: Text --- MAX_TRIES equ 3 use16 org 0 jmp 0x07C0:startstart: mov ax, cs mov ds, ax mov es, ax mov di, MAX_TRIES mov dh, 5 reset_floppy: mov ah, 0x00 mov dl, 0x00 int 0x13 dec di jz no_floppy jc reset_floppy;floppy ready, procede read kernel mov di, MAX_TRIESread_kernel: mov ah, 0x02;RawRear mov al, 0x01;One Sector mov cl, 0x02;Second Sector mov ch, 0x00;First Cylinder mov dh, 0x00;First Head mov dl, 0x00;Floppy Drive mov bx, 0x1000;The firs Page mov es, bx;0x1000:0x0000 xor bx, bx int 0x13 dec di jz no_kernel jc read_kernelkernel_leaded: jmp 0x1000:0x0000;jump to kernel no_floppy: mov si, str_no_floppy call print_string jmp reboot no_kernel: mov si, str_no_kernel call print_stringreboot: mov si, str_press_key call print_string xor ax, ax int 16h;wait key jmp 0xFFFF:0x0000 ;si = source string print_string: mov dl, 1start_print: mov ah, 0Ah mov al, [si] cmp al, '$' je end_print mov bx, 7 mov cx, 01 int 10h mov ah, 02h inc dl inc si int 10h jmp start_printend_print: inc dh ret;string messages str_no_floppy db ' Flopy Drive not Found$' str_no_kernel db ' Kernel File not Found$' str_press_key db ' Press Key for Reboot $' str_kernel_ok db ' Kernel Cargado !!! $';sizing the bootsector 510 + 0xAA55 db 510 - $ dup 0 dw 0xAA55
--- Código: Text --- mov si, str_kernel_ok call print_stringa xor ax, ax int 16h ;wait key jmp 0xFFFF:0x0000;reboot print_stringa: mov dl, 1start_printa: mov ah, 0Ah mov al, [si] cmp al, '$' je end_printa mov bx, 7 mov cx, 01 int 10h mov ah, 02h inc dl inc si int 10h jmp start_printaend_printa: inc dh ret Todavia no se por que no puedo tener la cadena "kernel_ok" en el kernel, sino que en el loader con las demas y tampoco porque no puedo usar la misma funcion dos veces porque teoricamente debería ser posible.
Seguramente es un problema con el segmento de datos y de codigo pero no se...
PD:
Hice un hilo nuevo para no revivir uno viejo, pero podria unirse con>
http://foros.solocodigo.com/index.php?show...&hl=nano+loader
Eternal Idol:
El Kernel optimizado con lo que querias hacer:
--- Código: Text --- mov ax, csmov ds, ax mov si, str_kernel_ok - 512call 0x07C0:print_string xor ax, ax int 16h;wait key jmp 0xFFFF:0x0000;reboot str_kernel_ok db ' Kernel Cargado !!! $'
¿Ahora no te parecera tan graciosa la manera de generar el binario no? :lol: :lol: :lol: Como lo incluis en vez de ensamblar dos binarios no cuenta de 0 en el Kernel.asm para direccionar ...
PD. ¿No te da verguenza usar cadenas terminadas en $? :P
Enko:
--- Citar ---Como lo incluis en vez de ensamblar dos binarios>
mov si, str_kernel_ok - 512
--- Fin de la cita ---
Ah... con razon... Gracias!
Ahora voy a ensamblarlos por separado y luego los junto haciendo una especie de
--- Citar ---incbin "boot.bin"
incbin "kernel.bin"
--- Fin de la cita ---
seguro que en fasm no se hace asi, pero recuerdo que se podia usando una macro... ahora la busco.
--- Citar ---PD. ¿No te da verguenza usar cadenas terminadas en $?
--- Fin de la cita ---
No se, tenia pensado que terminen en nulo pero use $ :ouch:
jaja, en algun momento lo cambio.
Por sierto, ahora empiezo a leer sobre modo protegido supongo?
Que lecturas recomendarias? Tengo un poco de tiempo y ganas pero no se por donde encararlo bien.
Eternal Idol:
--- Cita de: "Enko" --- Por sierto, ahora empiezo a leer sobre modo protegido supongo?
Que lecturas recomendarias? Tengo un poco de tiempo y ganas pero no se por donde encararlo bien.
--- Fin de la cita ---
Empeza escuchando esto (despues me contas).
Despues dale a esto: http://www.intel.com/products/processor/manuals/index.htm
Enko:
TRAMPA.... jajaja
probá esto tambien:
tenia ya ALSA diagnosticado (muestra un monton de temas y ejercicios, si podes miralo completo yo lo hice con el de vai. Es mas lo estoy escuchando ahora, no lo veo porque no me gusta la cara de Vai, un poco "cheto" y no me gusta la cara de "Santana" que pone. Na es broma, todo bien con el :rolleyes: )
http://www.youtube.com/watch?v=K3fvB4QO1qo
aca está sanito: (fijate los arpegios de la parte final, el principio es aburrido)
http://www.youtube.com/watch?v=RaCndizvS_Y
Navegación
[#] Página Siguiente
Ir a la versión completa