Programación General > ASM (Ensamblador)

 Boot Loader

(1/9) > >>

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&#59;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  &#59;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&#59;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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa