Bueno gracias por la ayuda y especialmente por las molestias A pesar de que no logro hacer funcionar el bootloader
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: Eternal Idol en 18 Diciembre 2011, 16:58 PMClaaro, no se nota el mensaje si uso el codigo del principio, pero ahora estoy trabajando sobre una versión reducida del boot que solo posee la funcion reset_floppy y load_app solo para testear la carga del segundo sector, y se supone que en caso de cargar el app borra toda la pantalla, incluso los mensajes de la BIOS. Pero al darle launch en el qemu launcher no borra la pantalla, solo muestra que cargo el boot y nada mas
¿Y cuando arranca la maquina virtual que pasa exactamente? Si uso eso no alcanzo a ver el mensaje siquiera, simplemente queda la pantalla limpia ...
Leyendo una tecla despues de escribir en pantalla y antes de cargar el codigo del seugndo sector se nota mas como funciona:xor ah, ah
int 16h
Cita de: Eternal Idol en 18 Diciembre 2011, 15:56 PMHe revisado la correspondencia entre bytes y es correcta, aproveche de comprobar con el comando od si se grababa exactamente igual en el floppy, y bien la respuesta es si. El código de pruebas del app solo borra la pantalla.
Parece que si pero esto no es assembly sino un programa de *NIX. Comproba que los bytes coincidan en la imagen y el binario ... si lo hacen comproba el codigo que ahi debe estar el problema.
Usar imagenes y maquinas virtuales no deberia ser ningun problema.
[BITS 16]
jmp main
clrscr :
mov ax,0x0600
mov cx,0x0000
mov dx,0x174f
mov bh,0
int 0x10
ret
main:
call clrscr
jmp main
dd if=app.bin of='floppy' bs=512 seek=1
Cita de: Eternal Idol en 18 Diciembre 2011, 14:20 PMOsea que el problema esta en el programa y no en el boot?
Bueno, no se notaba en el codigo y tenes exactamente el mismo problema en print_hello (escribe basura).
En realidad funciona perfectamente ese codigo para cargar el sector en memoria y saltar (ya lo probe con un viejo codigo que tenia, paso a modo protegido, escribio en pantalla y hizo un beep, funciona). El problema ahora lo tenes en otro lado, o escribis incorrectamente en el diskette o lo que escribis tiene otro problema ...
Cita de: prometheus48 en 18 Diciembre 2011, 12:30 PM
Hola,
Me podrias dar el enlace de tu blog?Estoy interesado.
Salu2!
load_kernel:
mov ah,02h
mov al,10
mov ch,00
mov cl,02
mov dl,00h
mov dh,00
mov bx,0800h
mov es,bx
mov bx,0
int 13h
jmp 0800h:0000h
;boot.asm
[BITS 16]
[ORG 7C00h]
jmp main
mesg db 'Cargando el programa... espere... ',0Ah,0Dh,0
init:
cli
sti
ret
clrscr :
mov ax,0600h
mov cx,0000h
mov dx,174Fh
mov bh,0
int 10h
ret
print_hello:
mov ah,13h
mov al,01h
mov bx,0007h
mov cx,21h
mov dx,0000h
mov bl,07h
mov bp,mesg
int 10h
ret
reset_floppy:
mov ah,00h
mov dl,00h
int 13h
ret
load_app:
mov ah,02h
mov al,13
mov ch,02
mov cl,02
mov dh,01
mov dl,00h
int 13h
jmp 0800h:0000h
main:
call init
call clrscr
call print_hello
call reset_floppy
call load_app
times 510-($-$$) db 0
db 0x55
db 0xAA
Cita de: Khronos14 en 17 Diciembre 2011, 12:21 PM
armizh y prometheus48 también, miraos la definición de Sistema Operativo anda.
Un Sistema Operativo permite la ejecución de programas, para llegar a este punto necesitas un sistema de gestión de memoria, un scheduler, GDT, IDT, LDT, etc.. El sistema operativo puede ser monotarea (como las primeras versiones de iOS) o multitarea...
Si llegas a este punto tu solo ya eres un dios, luego te queda la tarea de crear un sistema de drivers, con todas las implicaciones que ello conlleva como los anillos de privilegio y la seguridad... Un Sistema Operativo se tiene que enterar de absolutamente todo lo que sucede en tu ordenador...
http://wiki.osdev.org/Main_Page
Lo que prometheus48 hace en su código es ejecutar un programa de 16 bits, que se ejecuta sin un Sistema Operativo...
Saludos.
Cita de: farresito en 17 Diciembre 2011, 03:29 AMNo necesariamente, si observas Mac OSX es un SO novedoso, pero si miras Windows claramente no lo es. Para explicarlo mejor te doy el siguiente ejemplo, cuando Linus Torvalds escribió Linux lo que hizo no fue para nada novedoso, de hecho fue criticado por lo poco novedoso que fue, el escribió un núcleo monolítico que era considerado obsoleto, sin embargo todos conocemos el resto de la historia, y nos dimos cuenta que no fue estúpido, sino que todo lo contrario. Y es que siempre ha habido poca gente dispuesta a hacer un sistema operativo. Hay tres tipos de personas en ese sentido: 1) La que sabe hacer y lo hace 2) La que no sabe pero aprende haciendo 3) La que tiene solo las ganas. Las personas que no le interesa el tema no debería desanimar a los que les interesa, sea cual sea su tipo.
Hacer un sistema operativo no es novedoso; es estúpido. De hecho, los primeros sistemas operativos no tenian kernel. Pero entonces es una *****. No tienes gestión de RAM, ni de privilegios, ni procesos...