SoloCodigo
		Programación General => ASM (Ensamblador) => Mensaje iniciado por: Anthares en Sábado  6 de Noviembre de 2010, 23:24
		
			
			- 
				Hola, estoy teniendo problemas con el booteo de un disket que yo hice que contiene un bootloader + kernel + rutina de interrupcion 
 
 Tengo los siguientes archivos
 
 bootloader.bin  que ocupa 3 secotres
 kernel.bin que ocupa 14 sectores
 rutinaX.bin que ocupa 15 sectores
 
 Entonces cuando voy a crear un disket booteable hago lo siguiente:
 
 dd if=/dev/zero of=boot.img bs=512 count=15
 dd if=bootloader.bin of=boot.img bs=512 count=3
 dd if=kernel.bin of=boot.img bs=512 count=14 seek=3
 dd if=rutinaX.bin of=boot.img bs=512 count=1 seek=17 conv=sync,notrunc
 
 Pero no me bootea, el disket.
 
 Yo se que con seek indico los sectores que tengo saltar.
 Con count indico la cantidad de sectores que usa.
 
 En fin se agradece cualquier ayuda por que llevo pila con esto aunque sea tonto
 
 Saludos :hola:
- 
				Los últimos 2 bytes (palabra) del sector de arranque deben ser 0xAA55. Ya que no indicas sobre qué arquitectura estás corriendo, ten en cuenta la ordenación de bytes para la palabra (0x55 y luego 0xAA para little-endian, al revés para big-endian).
 
 Saludos
- 
				Muchas pero muchas gracias! si creo que fue eso jaja me lo habia comido :P 
 
 Gracias por responder tan rapido  :lol: , un beso  :hola:
- 
				De nada y suerte con ello  ^_^
			
- 
				ja van a pensar que soy una ignorante de miercoles!!!  :ouch:  pero hace pila que estoy luchando con esto  :hitcomp:  y cada vez que hago un cambio me deja de andar.
 
 Y se que es por que no entiendo mucho!
 
 En fin, resumo mi problema.......
 
 Tengo una tarea donde tengo que crear:
 
 - un bootloader.
 - un microkernel.
 - unas rutinas de atencion a interrupciones
 - un disket booteable que contenga todo lo anterior.
 
 1)    Cuando escribo el  archivo bootloader.asm si bien se como armar las estructuras de las GDT, LDT , IDT etc etc etc  no tengo ni la mas palidea idea en que partes del archivo tengo que hacer estas cosas:
 
 times 510-($-$$) db 0
 times 1024-($-$$) db 0
 times 1536-($-$$) db 0
 
 Es decir yo se que cada sector del disket tiene 512 y que cuando se llena el primer sector hay que poner times 510-($-$$) db 0     seguido de         dw 0AA55h
 
 Pero como se bien en que altura del archivo tengo que ir poniendo estos llenados???
 
 2) Al final para crear el disket booteable me quedo todo asi:
 
 bootloader.bin  1538 o sea 4 sectores
 kernel.bin 69763  o sea 14 sectores
 rutinaX.bin      1 sector
 
 
 Mi otra duda es como la cantidad de sectores es 19 >18 ..... como tengo que hacer con int 3h para leer con el tema de los cilindros y los head!!
 
 Por que yo hago esto:
 
 EI: juntando mensajes.
 
 en el script hago esto:
 
 dd if=/dev/zero of=boot.img bs=512 count=19
 dd if=bootloader.bin of=boot.img bs=512 count=4
 dd if=kernel.bin of=boot.img bs=512 count=14 seek=4
 dd if=keyboard.bin of=boot.img bs=512 count=1 seek=18 conv=sync,notrunc
 
 Saludos