domingo, 11 de diciembre de 2011

Bootloader Update

---------------------------------------------------------------------------------------------------------
Actualizado:
La función no escribe en Modo Protegido, tal como lo dice Eternal Idol en el foro de elhacker.net y probando con mover los códigos me di cuenta que realmente paso a Modo protegido, ya que al trasladar todo el código para imprimir en pantalla al sector de 32 Bits simplemente no escribe nada. El código del boot lo corregí, pero ahora solo escribe en el main de la sección a 16 bits, mientras busco como grabar a la memoria de video en el modo protegido.
---------------------------------------------------------------------------------------------------------
Bueno, este update es para mostrar lo que he avanzado desde anoche hasta hoy. Puede que suene a poco tiempo, pero he aprendido muchas cosas nuevas.
Esta vez incluire una captura de pantalla, y lamentablemente el código por ahora no tiene comentarios, pero los agregare durante el día (Me da mucha flojera -.-) Tal vez deba aclarar que este código no funciona al 100%, pero estoy depurandolo para obtener el resultado deseado.
Acá va el código:

;NuOS Kernel.
;Copyright (C) 2011  Felipe Cabrera

;This program is free software: you can redistribute it and/or modify
;it under the terms of the GNU General Public License as published by
;the Free Software Foundation, either version 3 of the License, or
;(at your option) any later version.

;This program is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;GNU General Public License for more details.

;You should have received a copy of the GNU General Public License
;along with this program.  If not, see <http://www.gnu.org/licenses/>.
;----------------boot.asm------------------;
[BITS 16]
[ORG 0x7c00]

jmp main

bootmesg db "Loading... please wait... "

init:
   mov ax, cs
   mov ds, ax
   mov es, ax
   ret

print_mesg :
   mov ah,0x13
   mov al,0x00
   mov bx,0x0007
   mov cx,0x20
   mov dx,0x0000
   int 0x10
   ret

clrscr :
   mov ax,0x0600
   mov cx,0x0000
   mov dx,0x174f
   mov bh,0
   int 0x10
   ret

switch_protected:
   cli
   mov eax, cr0
   or eax, 1
   mov cr0, eax
   jmp 0x08:protected_main

main:
   call init
   call clrscr
   mov bp,bootmesg
   call print_mesg
   call switch_protected
   jmp main

[BITS 32]
protected_main:
   jmp protected_main

times 510-($-$$) db 0
db 0x55
db 0xAA
Acá incluyo la captura made by myself (Tengo que admitir que tuve que istalar GIMP) la cual muestra un alentador mensaje (jeje) el cual, si analizaron el código, no es lo deseado.
Claramente habíamos quedado en que diría "Loading... please wait' y luego de cargar el Modo 32 Bits (Protected Mode) diría "Switched to protected mode"... pero solo dice "Switch".
---------------------------------------------------------------------------------------------------------
Actualizado:
El error fue bastante estúpido -.-
Simplemente cx estaba indicando que se leerían 32 carácteres y todo en total poseia mas de 32, por lo que se leí cortado. Otro error fue que se cargaba todo el texto inmediatamente y no el orden ya que se almacenaba todo el texto y luego se deplegaba todo. Por esto, ahora me encuentro buscando como escribir en la video memory.
(Tratando de descifrar como se emplea el método que se explica en http://wiki.osdev.org/Printing_to_Screen)
---------------------------------------------------------------------------------------------------------
Yo no sé mucho de ASM por lo que no podría decir con exactitud que és, solo sé que probablemente sea un error al cargar el Modo Protegido. Quien sepa que es lo que pasa y/o tiene una solución para esto por favor que comente en esta publicación o a mi correo feelipee.024@hotmail.com
Pronto tratare de habilitar una página Contact me para este fin, recuerden que si este proyecto se concreta estará a disposición del público en general y de hecho, ya lo está, ya que todo avance es y será publicado.

No hay comentarios.:

Publicar un comentario