para memoria instalar inicio dispositivo disco descargar crear booteable arranque assembly x86 bios usb-drive bootstrapping

assembly - memoria - disco de inicio windows 98 usb



¿Cómo realizar IO de bajo nivel con una unidad flash USB en el BIOS(en comparación con un disquete)? (3)

La unidad flash solo está disponible si el BIOS lo admite. Y si lo hace, probablemente ya te permita arrancar desde allí. La mayoría de esto se realiza mediante emulación, por lo que las llamadas para iniciar la unidad flash son probablemente las mismas.

He descargado los bloques de arranque de mis unidades de disco USB y he encontrado los formatos de disquete y disco duro.

Tal vez deberías probar un montón de números para acceder a las unidades y ver cuáles responden.

Creo que Google es tu amigo aquí. Comience con "INT 13H". Y haz más preguntas.

Recientemente estuve estudiando un código de arranque que estaba destinado a ser utilizado con una unidad de disquete. Mi objetivo es modificar el programa para que use mi memoria USB. Ahora veo cómo se ha usado la función INT 13H con el disquete, pero supongo que mi pregunta es, ¿cómo se diferenciará la comunicación con la unidad USB?

Por ejemplo, aquí hay un fragmento del código del disquete (ensamblador GNU):

movb $0x00,%dl /* select 1st floppy */ /* later */ movw sec,%cx /* get sector number */ movw head,%dx /* get head number */ movw $0x0201,%ax /* read 1 sector */ int $0x13

Ahora he leído que moviendo 0x80 a% dl seleccionará la primera unidad de disco duro en el BIOS. En mi biografía particular, puedo cambiar el orden de las unidades, que incluiría una unidad USB. Estoy bastante seguro de que esto se está convirtiendo en dependiente de BIOS, pero estaba pensando que el orden enumerado en el BIOS podría corresponder al valor que muevo en% dl. Necesito encontrar algo de documentación ...

Realmente no estoy familiarizado con el trabajo con dispositivos de bloque como es, ¿alguien me puede indicar un buen lugar para comenzar a aprender más?

¡Gracias!


Si el BIOS "ve" el dispositivo USB como un disco duro, le asignará un número. El número asignado comienza en 0x80 para el primer disco duro, 0x81 para el segundo, etc. Por lo tanto, dependiendo de cuántos discos duros estén instalados, su unidad USB tendrá 0x81 o más. Además, si cambia el orden en el BIOS, el número de la unidad USB cambiará para reflejar esto.


La respuesta simple es que si el BIOS puede arrancar desde la unidad flash USB, se pueden usar las mismas funciones de BIOS para el disco flexible / acceso al disco duro.

La respuesta feliz es que una técnica simple permite que el mismo código de sector de arranque acceda a una imagen de disquete en una unidad flash USB, ya sea que se haya iniciado con emulación de disquete o emulación de disco duro. Si dl = 80h (emulación de disco duro)

OBTENER PARÁMETROS DE CONDUCCIÓN
int 13h, ah = 8
Regreso:
ch = número de sector máximo (igual que el número de sectores por pista)
dh = número máximo de cabezas (solo agregue 1 para obtener el número de cabezas)

Esta información devuelta describe la geometría del dispositivo emulado (si dl = 0, entonces es geometría estándar de disco flexible: 18 sectores por pista y 2 cabezas). Esto se puede usar para calcular la información requerida del sector de la cabeza del cilindro requerida para:

LEER SECTOR (S)
int 13h, ah = 2

y

ESCRIBIR SECTOR (S)
int 13h, ah = 3

Vea la lista de interrupción de Ralf Brown - int 13h

Ver mi publicación aquí: Secretos de arranque USB