Lagerweij B
2002-Sep-03 14:38 UTC
[syslinux] isolinux.asm - improving spec_query_failed routine...
Hi Peter, I noticed in your isolinux.asm code, when loading spec packet fails you are trying to wing it, in other word, loop the drive numbers from 0xff through 0x80 until the booted drive number is found... I write software that also "wings it". Recently I had to create some "wird" workarounds because of bad bios in some Dell and Compaq PC's. Below is my function for finding (wing it) the booted eltorito drive number, this methode works on the worst and badly coded bioses out there... Maybe it can help you with development of future version of isolinux.asm You provide isolinux for the world, for free, so improving your code is the least I can do back... Best regards and good luck, Bart "nu2" Lagerweij. --- Bart Lagerweij - http://www.nu2.nu To contact me go here: http://www.nu2.nu/contact/bart --- ;------------------------------------------------------------ ; Get first emulated drive number ; returns: ; CF=1 - not in emulation mode ; CF=0 - in emulation mode ; DL - drive number for emulation get_emul_drive: push ax push si ; mov [spec_packet], 13h mov dl, 0ffh ; drive number get_emul_drive1: mov ax, 4b01h ; get status mov [spec_packet], 0 call int13 ; Bogus Dell PC's do not return carry flag correctly - ignoring it ; jnc get_emul_drive_ok ; some bogus bioses (Dell Inspiron 2500) returns packet size 0xff when failed ; Dell Dimension XPsT returns packet size 0x14 when OK cmp [spec_packet], 13h ; anything between 13h and 20h should be OK jb get_emul_trynext cmp [spec_packet], 20h ja get_emul_trynext jmp short get_emul_drive_ok get_emul_trynext: dec dl cmp dl, 80h jb get_emul_drive_nok jmp get_emul_drive1 ; cmp [spec_packet], 0 ; je get_emul_trynext ; jmp get_emul_drive_ok get_emul_drive_nok: xor dl, dl stc jmp short get_emul_drive_exit get_emul_drive_ok: mov dl, [spec_packet+2] clc get_emul_drive_exit: pop si pop ax ret ;------------------------------------------------------------ int13: mov si, offset spec_packet int 13h ret ;------------------------------------------------------------