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------------------;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.
[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
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)
---------------------------------------------------------------------------------------------------------
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