* ISOLINUX: remove the .img file support; it has been broken
on virtually all systems since the beginning, and has been
totally broken since 4.00 at least. Use MEMDISK instead.
+ * chain.c32: Support chaining ReactOS' FreeLdr (Shao Miller)
Changes in 4.04:
* PXELINUX: Fix handling of unqualified DNS names.
*
* keeppxe
* keep the PXE and UNDI stacks in memory (PXELINUX only).
+ *
+ * freeldr=<loader>
+ * loads ReactOS' FreeLdr.sys to 0:8000 and jumps to the PE entry-point
*/
#include <com32.h>
bool isolinux;
bool cmldr;
bool grub;
+ bool freeldr;
bool grldr;
const char *grubcfg;
bool swap;
ntldr=<loader> Load Windows NTLDR, SETUPLDR.BIN or BOOTMGR\n\
cmldr=<loader> Load Recovery Console of Windows NT/2K/XP/2003\n\
freedos=<loader> Load FreeDOS KERNEL.SYS\n\
+ freeldr=<loader> Load ReactOS' FREELDR.SYS\n\
msdos=<loader> Load MS-DOS IO.SYS\n\
pcdos=<loader> Load PC-DOS IBMBIO.COM\n\
drmk=<loader> Load DRMK DELLBIO.BIN\n\
opt.seg = 0x60; /* FREEDOS wants this address */
opt.loadfile = argv[i] + 8;
opt.sethidden = true;
+ } else if (!strncmp(argv[i], "freeldr=", 8)) {
+ opt.loadfile = argv[i] + 8;
+ opt.sethidden = true;
+ /* The FreeLdr PE wants to be at 0:8000 */
+ opt.freeldr = true;
} else if (!strncmp(argv[i], "msdos=", 6) ||
!strncmp(argv[i], "pcdos=", 6)) {
opt.seg = 0x70; /* MS-DOS 2.0+ wants this address */
regs.ip = regs.esp.l = 0x7c00;
}
+ if (opt.freeldr) {
+ /* Load to 0800:0000, which happens to be 0000:8000 */
+ opt.seg = 0x800;
+ /* TODO: Properly parse the PE. Right now, this is hard-coded */
+ regs.ip = 0x8100;
+ }
+
hd = 0;
if (!strncmp(drivename, "mbr", 3)) {
drive = find_disk(strtoul(drivename + 4, NULL, 0));