Autor
|
Tema: Problema al cargar segundo sector del floppy (Leído 8,836 veces)
|
armizh
Desconectado
Mensajes: 187
His brain caught in a hole...
|
Hola a todos, estoy programando un bootloader y un programa, ambos en ASM, el boot inicia la computadora, muestra uno mensaje y luego deberia cargar el programa, y este ultimo muestra un mensaje, llama al modo protegido y estoy trabajando en un arcaico sistema de E/S. Cabe destacar que inicialmente era un solo programa, que funcionaba perfectamente, pero separe lo que era el sector de booteo y el programa en si, ya que el programa iba creciendo en tamaño. El problema es que no carga el programa que se encuentra en el segundo sector, ¿que es lo que esta sucediendo? ¿que error estoy cometiendo? ¿que se puede hacer para que funcione correctamente? Ademas tengo una duda, ¿es necesario iniciar el modo protegido para llamar al programa que se encuentra en el segundo sector del floppy? Porque solo he encontrado informacion para modo real, y he usado la Int 13h ya que no encuentro informacion sobre cargar sectores de discos en modo protegido, porque no se pueden usar las interrupciones en el modo protegido. He buscado informacion en muchisimas paginas, en google, en osdev.org y nada. De antemano, gracias. ;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
|
|
|
En línea
|
Visita mi blog: http://armizh.10h.us/Fnx, fork de FreeNOS: git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++: git clone https://github.com/armizh/Hamster
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
http://www.ctyme.com/intr/rb-0607.htmAH = 02h AL = number of sectors to read (must be nonzero) CH = low eight bits of cylinder numberCL = sector number 1-63 (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive number (bit 7 set for hard disk) ES:BX -> data bufferCH y DH deberian ser 0. http://en.wikipedia.org/wiki/Cylinder_%28disk_drive%29http://en.wikipedia.org/wiki/Cylinder-head-sector¿De donde sale la idea de saltar a 0800h:0000h? ES deberia ser 0800h y BX 0 para que eso funcionara ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
armizh
Desconectado
Mensajes: 187
His brain caught in a hole...
|
Gracias por el comentario, la verdad es que me habia percatado de eso y pues bien, si es=0800h y bx=0 para que funcione, el código deberia ser así, no? ya que no se puede escribir directamente sobre es. 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 Sin embargo no funciona, busco y busco y sigue sin funcionar. En una página encontre que debe cargarse el segmento sobre la memoria, ¿es cierto eso? si es así ¿como se hace? Las explicaciones que dan no son del todo claras o simplemente estan equivocadas. Gracias.
|
|
|
En línea
|
Visita mi blog: http://armizh.10h.us/Fnx, fork de FreeNOS: git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++: git clone https://github.com/armizh/Hamster
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
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 ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
armizh
Desconectado
Mensajes: 187
His brain caught in a hole...
|
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 ...
Osea que el problema esta en el programa y no en el boot?
|
|
|
En línea
|
Visita mi blog: http://armizh.10h.us/Fnx, fork de FreeNOS: git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++: git clone https://github.com/armizh/Hamster
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
El problema esta en el segundo sector, este se carga correctamente y si hay codigo valido lo ejecuta sin problemas. Tenes que fijate si es que hay codigo en el segundo sector y si este es valido ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
armizh
Desconectado
Mensajes: 187
His brain caught in a hole...
|
Bueno, se que el boot se carga correctamente, pero el app no. Para enviar el app al segundo sector escribo en la terminal: dd if=app.bin of='floppy' bs=512 seek=1 ¿Es correcto esto? Por cierto, lo envio todo a una imagen de floppy y lo cargo con qemu ¿influye en los resultados?
|
|
|
En línea
|
Visita mi blog: http://armizh.10h.us/Fnx, fork de FreeNOS: git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++: git clone https://github.com/armizh/Hamster
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
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.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
armizh
Desconectado
Mensajes: 187
His brain caught in a hole...
|
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.
He 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. [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 Por cierto, en algunos lugares en internet decian que habia que ubicarnos en 0800h con org en el app y en otros lo hacian sin la ubicacion, ¿influye eso? Ademas, si a ese código lo transformo en booteable con AAh 55h funciona de maravillas.
|
|
|
En línea
|
Visita mi blog: http://armizh.10h.us/Fnx, fork de FreeNOS: git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++: git clone https://github.com/armizh/Hamster
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
¿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
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema al enlazar un video de youtube a un segundo determinado
Dudas Generales
|
Aikanáro Anário
|
5
|
4,546
|
5 Mayo 2010, 22:39 pm
por Aikanáro Anário
|
|
|
Problema con un segundo disco duro windows 7
Windows
|
yoyoalee
|
3
|
7,890
|
22 Mayo 2011, 17:59 pm
por yoyoalee
|
|
|
Bad Sector o Sector Dañado en Discos Duros
Hardware
|
Javi Cabfer
|
2
|
6,481
|
7 Noviembre 2011, 22:38 pm
por Javi Cabfer
|
|
|
Problema Ecuaciones De Segundo Grado
Java
|
KaRaLLo
|
3
|
12,033
|
30 Noviembre 2011, 15:15 pm
por fenomeno92
|
|
|
Problema con segundo monitor
Hardware
|
Kurolox
|
5
|
2,930
|
19 Agosto 2013, 23:57 pm
por topomanuel
|
|