Due to limitations of equipment, I have need of using the isolinux boot
loader with .iso files generated by roxio.
After trying (and of course failing) with an off the shelf version of
isolinux, I grabbed the source for isolinux (syslinux 2.11 package) and
started looking.
It took a few hours to orient myself, but I ended up doing the modification
below to isolinux.asm. I then had to write a small C program to take the
.bin file and patch offset 0x14 with the proper checksum info. With that I
now have a isolinux.bin file suitable for roxio - and probably other
software.
Is there any interest in this, or is the dependency on mkisofs there for
another reason?
Thanks,
David
245c245
< bi_pvd: dd 0x00000010 ; LBA of primary
volume descriptor ;DEB
--->bi_pvd: dd 0xdeadbeef ; LBA of primary
>volume descriptor
247c247
< bi_length: dd size_of_code ; Length of boot file
;DEB
--->bi_length: dd 0xdeadbeef ; Length of boot file
282a283,290> ; Set up boot file sizes
> mov eax,[bi_length]
> sub eax,SECTORSIZE-3
> shr eax,2 ; bytes->dwords
> mov [ImageDwords],eax ; boot file dwords
> add eax,(2047 >> 2)
> shr eax,9 ; dwords->sectors
> mov [ImageSectors],ax ; boot file sectors
319,365d326
< ;DEB -- Patch to have code actually insert values for bi_file and
bi_length
< mov bx, trackbuf ;DEB
< mov eax, 17 ;DEB Location of Boot Record
Volume
< call getonesec ;DEB Retrieve Boot Record
Volume
<
< mov eax, dword [trackbuf+47h] ;DEB EAX is now address of
Boot Catalog
<
< %ifdef DEBUG_MESSAGES
< mov si,bcat_loc_msg ;DEB Write sector address of
boot cat
< call writemsg ;DEB
< call writehex8 ;DEB
< call crlf ;DEB
< %endif
<
< mov bx, trackbuf ;DEB
< call getonesec ;DEB get the Boot Catalog
<
< mov eax, dword [trackbuf+28h] ;DEB put RBA sector address
in EAX
< mov dword [bi_file], eax ;DEB Put RBA address into
bi_file variable
<
< %ifdef DEBUG_MESSAGES
< mov si,rba_loc_msg ;DEB write out RBA sector
address
< call writemsg ;DEB
< call writehex8 ;DEB
< call crlf ;DEB
< %endif
<
< %ifdef DEBUG_MESSAGES
< mov si,imgsz_msg ;DEB write out image size
< call writemsg ;DEB
< mov eax, dword [bi_length] ;DEB
< call writehex8 ;DEB
< call crlf ;DEB
< %endif ;DEB
< ;DEB -- we now return you to your regularly scheduled programing :)
<
<
< ; Set up boot file sizes
< mov eax,[bi_length]
< sub eax,SECTORSIZE-3
< shr eax,2 ; bytes->dwords
< mov [ImageDwords],eax ; boot file dwords
< add eax,(2047 >> 2)
< shr eax,9 ; dwords->sectors
< mov [ImageSectors],ax ; boot file sectors
<
<
368d328
<
802,804d761
< bcat_loc_msg: db 'Boot Catalog found at ',0
;DEB
debug msg
< rba_loc_msg: db 'RBA is ',0
;DEB
debug msg
< imgsz_msg: db 'Boot loader size in bytes ',0
;DEB
debug msg
1759,1760d1715
< size_of_code equ ldlinux_end-bootsec ;DEB Used to calculate
bi_length