elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 02:20  


Tema destacado: Recuperar cuenta de Google, GMail, Youtube

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Problema al cargar segundo sector del floppy
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al cargar segundo sector del floppy  (Leído 1,509 veces)
armizh

Desconectado Desconectado

Mensajes: 182

His brain caught in a hole...


Ver Perfil WWW
Problema al cargar segundo sector del floppy
« en: 18 Diciembre 2011, 00:14 »

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.
Código:
;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:
Código
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
git clone https://github.com/armizh/Hamster
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #1 en: 18 Diciembre 2011, 02:18 »

http://www.ctyme.com/intr/rb-0607.htm

AH = 02h
AL = number of sectors to read (must be nonzero)
CH = low eight bits of cylinder number
CL = 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 buffer

CH y DH deberian ser 0.

http://en.wikipedia.org/wiki/Cylinder_%28disk_drive%29
http://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 Desconectado

Mensajes: 182

His brain caught in a hole...


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #2 en: 18 Diciembre 2011, 02:44 »

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.
Código:
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:
Código
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
git clone https://github.com/armizh/Hamster
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #3 en: 18 Diciembre 2011, 14:20 »

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 Desconectado

Mensajes: 182

His brain caught in a hole...


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #4 en: 18 Diciembre 2011, 14:46 »

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:
Código
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
git clone https://github.com/armizh/Hamster
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #5 en: 18 Diciembre 2011, 14:48 »

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 Desconectado

Mensajes: 182

His brain caught in a hole...


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #6 en: 18 Diciembre 2011, 15:29 »

Bueno, se que el boot se carga correctamente, pero el app no.
Para enviar el app al segundo sector escribo en la terminal:
Código:
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:
Código
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
git clone https://github.com/armizh/Hamster
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #7 en: 18 Diciembre 2011, 15:56 »

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 Desconectado

Mensajes: 182

His brain caught in a hole...


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #8 en: 18 Diciembre 2011, 16:45 »

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.
Código:
[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:
Código
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
git clone https://github.com/armizh/Hamster
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #9 en: 18 Diciembre 2011, 16:58 »

¿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:
Código
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
armizh

Desconectado Desconectado

Mensajes: 182

His brain caught in a hole...


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #10 en: 18 Diciembre 2011, 17:33 »

¿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:
Código
xor ah, ah
int 16h
Claaro, 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
Exactamente dice:

Starting SeaBIOS (version pre-0.6.1-20100702_143500-palmer)

Booting from Floppy...
_

Sin embargo hace unos minutos, luego de haber mostrado ese mensaje por alrededor de minuto y medio, se limpio la pantalla. Vuelvo a intentarlo y vuelve a pasar.
Ahora pruebo con mostrar un mensaje desde el app, pero solo limpia la pantalla ¿que es lo que sucede?
En línea

Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
git clone https://github.com/armizh/Hamster
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #11 en: 18 Diciembre 2011, 18:26 »

No tenemos poder de adivinacion como para saber que estas haciendo, si cambias el codigo y no lo decis nadie se entera. Y no, no se que sucede en tu maquina ya que a mi me funciona bien pero no uso *NIX, ni dd, ni QEMU.

PD. Proba sin usar ni en el boot ni en el programa clrscr.
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 Desconectado

Mensajes: 182

His brain caught in a hole...


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #12 en: 18 Diciembre 2011, 18:53 »

Bueno gracias por la ayuda y especialmente por las molestias :D A pesar de que no logro hacer funcionar el bootloader :(
En línea

Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
git clone https://github.com/armizh/Hamster
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Problema al cargar segundo sector del floppy
« Respuesta #13 en: 18 Diciembre 2011, 19:27 »

De nada, segui probando, tiene que funcionar.
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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema sector de arranque
GNU/Linux
feddie 1 293 Último mensaje 3 Octubre 2005, 22:39
por Kalisto
Problema sector de arranque del disco duro
Windows
feddie 1 633 Último mensaje 3 Octubre 2005, 22:12
por silverhack
Problema con un segundo disco duro windows 7
Windows
yoyoalee 3 3,240 Último mensaje 22 Mayo 2011, 17:59
por yoyoalee
Bad Sector o Sector Dañado en Discos Duros
Hardware
Javi Cabfer 2 1,015 Último mensaje 7 Noviembre 2011, 22:38
por Javi Cabfer
Problema Ecuaciones De Segundo Grado
Java
KaRaLLo 3 1,189 Último mensaje 30 Noviembre 2011, 15:15
por fenomeno92
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines