Hello, I am working on a legacy BIOS extension that is used to provide a centralised and managed boot process for a secure environment. Due to an assortment of reasons the access to hard disk / CD-ROM devices has had to be implemented at a low level (reading/writing IDE controller registers) rather than relying on the int 13h services provided by the system BIOS. Booting hard disks is working OK and I am now trying to get bootable CD/DVD disks to work using the following code: 1) Issue an ATAPI command to read sector 11h 2) Use the value at offset 47h to read the validation entry and initial section entry 3) Use the loadrba value from the initial section entry to read the first sector of executable code 4) Copy that sector to 07C0:0000 5) Pass execution to the start of the read sector at 07C0:0000 I am getting output on the screen from isolinux but it basically borks. The screen output from isolinux shows several messages but the key ones are: isolinux: Starting up, DL = 81 isolinux: Loading spec packet failed, trying to wing it... isolinux: Trying BrokenAwardHack first ... isolinux: BAH: Original Int 13 vector F00091E0 isolinux: BAH: FAILURE isolinux: Extremely broken BIOS detected, last attempt with drive = 81 isolinux: Main image LBA = 00000028 isolinux: Disk error 01, AX=4228, drive 81 Boot failed: press a key to retry... In order to get this to work am I going to need to hook int 13h so that I can provide the correct responses to functions such as 4B01h and 42h or is there a simpler way of achieving what I need? Thanks, Andy.
> isolinux: Starting up, DL = 81 > isolinux: Loading spec packet failed, trying to wing it... > isolinux: Trying BrokenAwardHack first ... > isolinux: BAH: Original Int 13 vector F00091E0 > isolinux: BAH: FAILURE > isolinux: Extremely broken BIOS detected, last attempt with drive = 81 > isolinux: Main image LBA = 00000028 > isolinux: Disk error 01, AX=4228, drive 81 > > Boot failed: press a key to retry...This sounds similar to the "Disk error 01, AX=42xx, drive yy" error that some users had with ISOLINUX 6.02 (it depended on HW / BIOS). IIRC, it was also related to a relatively-high value of LBA for isolinux.bin (and perhaps its size). Perhaps basing your hacks on the code from current git master: http://repo.or.cz/syslinux.git would be worth a try. Alternatively, try basing on an older version (e.g. 3.86). Regards, Ady.
To elaborate a little further.... The code that currently does the following is executed as part of a replacement for the BIOS interrupt 19h bootstrap process. 1) Issue an ATAPI command to read sector 11h 2) Use the value at offset 47h to read the validation entry and initial section entry 3) Use the loadrba value from the initial section entry to read the first sector of executable code 4) Copy that sector to 07C0:0000 5) Pass execution to the start of the read sector at 07C0:0000 I have been reading the BIOS Enhanced Disk Drive Services (EDD) specification which defines the interrupt 13h interface in a reasonable level of detail and I am wondering whether there needs to be an additional step between 2) and 3) above. I am thinking that this step should take the necessary information from the initial section entry and combine it with the information I know about the disk interface (primary/secondary/sata) and drive (master/slave) and use that to create the CD specification packet in a call to interrupt 13h function 4Ah that way the BIOS can then deal with the rest of the queries itself. My testing at the moment is using a CentOS 6.7 netinstall CD which uses isolinux 4.04 albeit I have replaced the standard isolinux.bin file with the isolinux-debug.bin version. Andy.
On 03/21/16 11:56, Andy Pont via Syslinux wrote:> 4) Copy that sector to 07C0:0000 > 5) Pass execution to the start of the read sector at 07C0:00000000:7C00, unless a nonzero segment is specified in the El Torito header, in which case it is xxxx:0000.> I have been reading the BIOS Enhanced Disk Drive Services (EDD) > specification which defines the interrupt 13h interface in a reasonable > level of detail and I am wondering whether there needs to be an additional > step between 2) and 3) above.You probably should also read the El Torito specification, I think it has been incorporated in the later versions of the EDD specification but may be a bit easier. -hpa