Recientemente he estado estudiando un código de arranque que estaba destinado para su uso 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?¿Cómo realizar IO de bajo nivel con una unidad flash USB en el BIOS (en comparación con un disquete)?
Por ejemplo, aquí es un fragmento del código de 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 se mueve 0x80 en% dl seleccionará el primer 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 documentación ...
No estoy realmente familiarizado con el trabajo con dispositivos de bloque, ¿alguien me puede indicar un buen lugar para comenzar a aprender más?
Gracias!
OK, después de haber revisado esto estaba buscando un código (código de trabajo) que explícitamente carga dl = 0x00 aunque está usando una unidad flash USB. Ahora supongo que esto es un comportamiento dependiente de BIOS, quizás otro BIOS no le permita tratar una unidad flash como un disquete. –
Es posible y conveniente iniciar y ejecutar una imagen de disquete FAT12 desde una unidad flash USB en cualquier BIOS/versión que arranque desde una unidad flash USB. El valor dl debe ser utilizado. Incluso si dl = 80h (que será el caso en todas las últimas versiones del modelo BIOS/versión), la geometría del disco duro resintonizó desde int 13h, ah = 8 se puede utilizar. El formato de 1.44 MB, aunque restrictivo, es suficiente para comenzar y es universal. –