aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--NEWS17
-rw-r--r--com32/modules/chain.c200
-rw-r--r--core/diskstart.inc2
-rw-r--r--core/isolinux.asm2
-rw-r--r--core/layout.inc20
-rw-r--r--core/pxelinux.asm35
-rw-r--r--core/syslinux.ld3
-rw-r--r--dos/Makefile2
-rw-r--r--dosutil/Makefile10
-rw-r--r--dosutil/copybs.asm (renamed from dos/copybs.asm)0
-rw-r--r--[-rwxr-xr-x]dosutil/mdiskchk.combin7273 -> 7273 bytes
-rw-r--r--mtools/syslinux.c5
13 files changed, 210 insertions, 90 deletions
diff --git a/Makefile b/Makefile
index d9f43fc3..2393faa6 100644
--- a/Makefile
+++ b/Makefile
@@ -56,7 +56,7 @@ BOBJECTS = $(BTARGET) \
BSUBDIRS = codepage core memdisk modules com32 mbr memdump gpxe sample \
libinstaller dos win32 dosutil
ITARGET =
-IOBJECTS = $(ITARGET) dos/copybs.com \
+IOBJECTS = $(ITARGET) \
utils/gethostip utils/isohybrid utils/mkdiskimage \
mtools/syslinux linux/syslinux extlinux/extlinux
ISUBDIRS = libinstaller mtools linux extlinux utils
@@ -68,7 +68,7 @@ INSTALL_SBIN = extlinux/extlinux
# Things to install in /usr/lib/syslinux
INSTALL_AUX = core/pxelinux.0 gpxe/gpxelinux.0 core/isolinux.bin \
core/isolinux-debug.bin \
- dos/syslinux.com dos/copybs.com win32/syslinux.exe \
+ dos/syslinux.com win32/syslinux.exe \
mbr/*.bin $(MODULES)
INSTALL_AUX_OPT = win32/syslinux.exe
diff --git a/NEWS b/NEWS
index 5008c1fa..7687f6d6 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ or EXTLINUX apply to that specific program only; other changes apply
to all derivatives.
Changes in 3.85:
+ * gPXELINUX: updated to gPXE 1.0.0. gPXELINUX can now do NBP
+ chainloading, and does not require a second DHCP.
* vesamenu.c32: unbreak the default "grey hole" background.
* We no longer have a built-in default of "linux auto".
Instead, if no DEFAULT or UI statement is found, or the
@@ -12,7 +14,20 @@ Changes in 3.85:
PXELINUX if the configuration file is not found.)
* chain.c32: support chainloading Grub4DOS; patch by Gert
Hulselmans.
-
+ * New tool: sysdump.c32, can be used to produce system
+ information for debugging via tftp or ymodem (serial port).
+ * "vga=current" on the Linux command line is now supported.
+ * chain.c32: support for Windows Recovery Console, via the
+ "cmldr=" option.
+ * chain.c32: should now support loading NTLDR from different
+ type media than loaded from.
+ * chain.c32: support chainloading to a FAT/NTFS partition with
+ invalid "hidden sectors" via the "sethidden" option.
+ * memdisk: fix the mBFT ACPI table.
+ * vesamenu.c32: if the image is smaller than the screen, tile
+ it across the whole screen.
+ * mkdiskimage: -s option for producing a sparse image.
+
Changes in 3.84:
* SYSLINUX: make the DOS installer work for MS-DOS 7.x/8.x
(Win9x/ME) again.
diff --git a/com32/modules/chain.c b/com32/modules/chain.c
index 458ea890..9b6988d7 100644
--- a/com32/modules/chain.c
+++ b/com32/modules/chain.c
@@ -46,18 +46,22 @@
* when you want more than one ISOLINUX per CD/DVD.
*
* ntldr=<loader>:
- * equivalent to -seg 0x2000 -file <loader>, used with WinNT's loaders
+ * equivalent to seg=0x2000 file=<loader> sethidden,
+ * used with WinNT's loaders
*
* cmldr=<loader>:
* used with Recovery Console of Windows NT/2K/XP.
- * same as ntldr=<loader> & "cmdcons\0" written to memory address 0000:7C03
+ * same as ntldr=<loader> & "cmdcons\0" written to
+ * the system name field in the bootsector
*
* freedos=<loader>:
- * equivalent to -seg 0x60 -file <loader>, used with FreeDOS kernel.sys.
+ * equivalent to seg=0x60 file=<loader> sethidden,
+ * used with FreeDOS kernel.sys.
*
* msdos=<loader>
* pcdos=<loader>
- * equivalent to -seg 0x70 -file <loader>, used with DOS' io.sys.
+ * equivalent to seg=0x70 file=<loader> sethidden,
+ * used with DOS' io.sys.
*
* swap:
* if the disk is not fd0/hd0, install a BIOS stub which swaps
@@ -67,6 +71,10 @@
* change type of primary partitions with IDs 01, 04, 06, 07,
* 0b, 0c, or 0e to 1x, except for the selected partition, which
* is converted the other way.
+ *
+ * sethidden:
+ * update the "hidden sectors" (partition offset) field in a
+ * FAT/NTFS boot sector.
*/
#include <com32.h>
@@ -92,8 +100,15 @@ static struct options {
bool cmldr;
bool swap;
bool hide;
+ bool sethidden;
} opt;
+struct data_area {
+ void *data;
+ addr_t base;
+ addr_t size;
+};
+
static inline void error(const char *msg)
{
fputs(msg, stderr);
@@ -446,7 +461,7 @@ static struct part_entry *find_logical_partition(int whichpart, char *table,
return NULL;
}
-static void do_boot(void *boot_sector, size_t boot_size,
+static void do_boot(struct data_area *data, int ndata,
struct syslinux_rm_regs *regs)
{
uint16_t *const bios_fbm = (uint16_t *) 0x413;
@@ -457,8 +472,6 @@ static void do_boot(void *boot_sector, size_t boot_size,
uint8_t driveno = regs->edx.b[0];
uint8_t swapdrive = driveno & 0x80;
int i;
- addr_t loadbase = opt.seg ? (opt.seg << 4) : 0x7c00;
- static const char cmldr_signature[8] = "cmdcons";
mmap = syslinux_memory_map();
@@ -467,25 +480,17 @@ static void do_boot(void *boot_sector, size_t boot_size,
return;
}
- /* Nothing below 0x7c00, much simpler... */
-
- if (boot_size >= dosmem - loadbase)
+ endimage = 0;
+ for (i = 0; i < ndata; i++) {
+ if (data[i].base + data[i].size > endimage)
+ endimage = data[i].base + data[i].size;
+ }
+ if (endimage > dosmem)
goto too_big;
- endimage = loadbase + boot_size;
-
- if (syslinux_add_movelist(&mlist, loadbase,
- (addr_t) boot_sector, boot_size))
- goto enomem;
-
- /*
- * To boot the Recovery Console of Windows NT/2K/XP we need to write
- * the string "cmdcons\0" to memory location 0000:7C03.
- * Memory location 0000:7C00 contains the bootsector of the partition.
- */
- if (opt.cmldr) {
- if (syslinux_add_movelist(&mlist, 0x7c03, (addr_t)cmldr_signature,
- sizeof cmldr_signature))
+ for (i = 0; i < ndata; i++) {
+ if (syslinux_add_movelist(&mlist, data[i].base,
+ (addr_t)data[i].data, data[i].size))
goto enomem;
}
@@ -661,6 +666,27 @@ static uint32_t get_file_lba(const char *filename)
return lba;
}
+static void usage(void)
+{
+ error("Usage: chain.c32 hd<disk#> [<partition>] [options]\n"
+ " chain.c32 fd<disk#> [options]\n"
+ " chain.c32 mbr:<id> [<partition>] [options]\n"
+ " chain.c32 boot [<partition>] [options]\n"
+ "Options: file=<loader> load file, instead of boot sector\n"
+ " isolinux=<loader> load another version of ISOLINUX\n"
+ " ntldr=<loader> load Windows NTLDR, SETUPLDR.BIN or BOOTMGR\n"
+ " cmldr=<loader> load Recovery Console of Windows NT/2K/XP\n"
+ " freedos=<loader> load FreeDOS kernel.sys\n"
+ " msdos=<loader> load MS-DOS io.sys\n"
+ " pcdos=<loader> load PC-DOS ibmbio.com\n"
+ " seg=<segment> jump to <seg>:0000 instead of 0000:7C00\n"
+ " swap swap drive numbers, if bootdisk is not fd0/hd0\n"
+ " hide hide primary partitions, except selected partition\n"
+ " sethidden set the FAT/NTFS hidden sectors field\n"
+ );
+}
+
+
int main(int argc, char *argv[])
{
char *mbr, *p;
@@ -673,7 +699,10 @@ int main(int argc, char *argv[])
uint32_t file_lba = 0;
unsigned char *isolinux_bin;
uint32_t *checksum, *chkhead, *chktail;
- size_t boot_size = SECTOR;
+ struct data_area data[3];
+ int ndata = 0;
+ addr_t load_base;
+ static const char cmldr_signature[8] = "cmdcons";
openconsole(&dev_null_r, &dev_stdcon_w);
@@ -699,28 +728,41 @@ int main(int argc, char *argv[])
} else if (!strncmp(argv[i], "ntldr=", 6)) {
opt.seg = 0x2000; /* NTLDR wants this address */
opt.loadfile = argv[i] + 6;
+ opt.sethidden = true;
} else if (!strncmp(argv[i], "cmldr=", 6)) {
opt.seg = 0x2000; /* CMLDR wants this address */
opt.loadfile = argv[i] + 6;
opt.cmldr = true;
+ opt.sethidden = true;
} else if (!strncmp(argv[i], "freedos=", 8)) {
opt.seg = 0x60; /* FREEDOS wants this address */
opt.loadfile = argv[i] + 8;
+ opt.sethidden = true;
} else if (!strncmp(argv[i], "msdos=", 6) ||
!strncmp(argv[i], "pcdos=", 6)) {
opt.seg = 0x70; /* MS-DOS 2.0+ wants this address */
opt.loadfile = argv[i] + 6;
+ opt.sethidden = true;
} else if (!strcmp(argv[i], "swap")) {
opt.swap = true;
+ } else if (!strcmp(argv[i], "noswap")) {
+ opt.swap = false;
} else if (!strcmp(argv[i], "hide")) {
opt.hide = true;
+ } else if (!strcmp(argv[i], "nohide")) {
+ opt.hide = false;
} else if (!strcmp(argv[i], "keeppxe")) {
opt.keeppxe = 3;
- } else
- if (((argv[i][0] == 'h' || argv[i][0] == 'f') && argv[i][1] == 'd')
- || !strncmp(argv[i], "mbr:", 4)
- || !strncmp(argv[i], "mbr=", 4)
- || !strcmp(argv[i], "boot") || !strncmp(argv[i], "boot,", 5)) {
+ } else if (!strcmp(argv[i], "sethidden")) {
+ opt.sethidden = true;
+ } else if (!strcmp(argv[i], "nosethidden")) {
+ opt.sethidden = false;
+ } else if (((argv[i][0] == 'h' || argv[i][0] == 'f')
+ && argv[i][1] == 'd')
+ || !strncmp(argv[i], "mbr:", 4)
+ || !strncmp(argv[i], "mbr=", 4)
+ || !strcmp(argv[i], "boot")
+ || !strncmp(argv[i], "boot,", 5)) {
drivename = argv[i];
p = strchr(drivename, ',');
if (p) {
@@ -731,21 +773,7 @@ int main(int argc, char *argv[])
partition = argv[++i];
}
} else {
- error
- ("Usage: chain.c32 hd<disk#> [<partition>] [options]\n"
- " chain.c32 fd<disk#> [options]\n"
- " chain.c32 mbr:<id> [<partition>] [options]\n"
- " chain.c32 boot [<partition>] [options]\n"
- "Options: file=<loader> load file, instead of boot sector\n"
- " isolinux=<loader> load another version of ISOLINUX\n"
- " ntldr=<loader> load Windows NTLDR, SETUPLDR.BIN or BOOTMGR\n"
- " cmldr=<loader> load Recovery Console of Windows NT/2K/XP\n"
- " freedos=<loader> load FreeDOS kernel.sys\n"
- " msdos=<loader> load MS-DOS io.sys\n"
- " pcdos=<loader> load PC-DOS ibmbio.com\n"
- " seg=<segment> jump to <seg>:0000 instead of 0000:7C00\n"
- " swap swap drive numbers, if bootdisk is not fd0/hd0\n"
- " hide hide primary partitions, except selected partition\n");
+ usage();
goto bail;
}
}
@@ -844,12 +872,16 @@ int main(int argc, char *argv[])
}
/* Do the actual chainloading */
+ load_base = opt.seg ? (opt.seg << 4) : 0x7c00;
+
if (opt.loadfile) {
fputs("Loading the boot file...\n", stdout);
- if (loadfile(opt.loadfile, &boot_sector, &boot_size)) {
+ if (loadfile(opt.loadfile, &data[ndata].data, &data[ndata].size)) {
error("Failed to load the boot file\n");
goto bail;
}
+ data[ndata].base = load_base;
+ load_base = 0x7c00; /* If we also load a boot sector */
/* Create boot info table: needed when you want to chainload
another version of ISOLINUX (or another bootlaoder that needs
@@ -876,7 +908,7 @@ int main(int argc, char *argv[])
LBA of primary volume descriptor should already be set to 16.
*/
- isolinux_bin = (unsigned char *)boot_sector;
+ isolinux_bin = (unsigned char *)data[ndata].data;
/* Get LBA address of bootfile */
file_lba = get_file_lba(opt.loadfile);
@@ -886,20 +918,27 @@ int main(int argc, char *argv[])
goto bail;
}
/* Set it */
- *((uint32_t *) & isolinux_bin[12]) = file_lba;
+ *((uint32_t *) &isolinux_bin[12]) = file_lba;
/* Set boot file length */
- *((uint32_t *) & isolinux_bin[16]) = boot_size;
+ *((uint32_t *) &isolinux_bin[16]) = data[ndata].size;
/* Calculate checksum */
- checksum = (uint32_t *) & isolinux_bin[20];
- chkhead = (uint32_t *) & isolinux_bin[64];
- chktail = (uint32_t *) & isolinux_bin[boot_size - 1];
- /* Fresh checksum and clear possibly fractional uint32_t at the end */
- *checksum = *((uint32_t *) & isolinux_bin[boot_size]) = 0;
-
- while (chkhead <= chktail) {
+ checksum = (uint32_t *) &isolinux_bin[20];
+ chkhead = (uint32_t *) &isolinux_bin[64];
+ chktail = (uint32_t *) &isolinux_bin[data[ndata].size & ~3];
+ *checksum = 0;
+ while (chkhead < chktail)
*checksum += *chkhead++;
+
+ /*
+ * Deal with possible fractional dword at the end;
+ * this *should* never happen...
+ */
+ if (data[ndata].size & 3) {
+ uint32_t xword = 0;
+ memcpy(&xword, chkhead, data[ndata].size & 3);
+ *checksum += xword;
}
} else {
error
@@ -908,30 +947,59 @@ int main(int argc, char *argv[])
}
}
- } else if (partinfo) {
+ ndata++;
+ }
+
+ if (partinfo && (!opt.loadfile || data[0].base >= 0x7c00 + SECTOR)) {
/* Actually read the boot sector */
/* Pick the first buffer that isn't already in use */
- if (!(boot_sector = read_sector(partinfo->start_lba))) {
+ if (!(data[ndata].data = read_sector(partinfo->start_lba))) {
error("Cannot read boot sector\n");
goto bail;
}
- }
-
- if (!opt.loadfile) {
- if (*(uint16_t *) ((char *)boot_sector + boot_size - 2) != 0xaa55) {
- error
- ("Boot sector signature not found (unbootable disk/partition?)\n");
+ data[ndata].size = SECTOR;
+ data[ndata].base = load_base;
+
+ if (!opt.loadfile &&
+ *(uint16_t *)((char *)data[ndata].data +
+ data[ndata].size - 2) != 0xaa55) {
+ error("Boot sector signature not found (unbootable disk/partition?)\n");
goto bail;
}
+
+ /*
+ * To boot the Recovery Console of Windows NT/2K/XP we need to write
+ * the string "cmdcons\0" to memory location 0000:7C03.
+ * Memory location 0000:7C00 contains the bootsector of the partition.
+ */
+ if (opt.cmldr) {
+ memcpy((char *)data[ndata].data+3, cmldr_signature,
+ sizeof cmldr_signature);
+ }
+
+ /*
+ * Modify the hidden sectors (partition offset) copy in memory;
+ * this modifies the field used by FAT and NTFS filesystems, and
+ * possibly other boot loaders which use the same format.
+ */
+ if (partinfo && opt.sethidden) {
+ *((uint32_t *)(char *)data[ndata].data + 28) =
+ partinfo->start_lba;
+ }
+
+ ndata++;
}
if (partinfo) {
/* 0x7BE is the canonical place for the first partition entry. */
+ data[ndata].data = partinfo;
+ data[ndata].base = 0x7be;
+ data[ndata].size = sizeof *partinfo;
+ ndata++;
regs.esi.w[0] = 0x7be;
- memcpy((char *)0x7be, partinfo, sizeof(*partinfo));
}
- do_boot(boot_sector, boot_size, &regs);
+ do_boot(data, ndata, &regs);
bail:
return 255;
diff --git a/core/diskstart.inc b/core/diskstart.inc
index 53229223..e194b978 100644
--- a/core/diskstart.inc
+++ b/core/diskstart.inc
@@ -28,7 +28,7 @@ SuperInfo resq 16 ; The first 16 bytes expanded 8 times
; "close" to the initial stack pointer offset, in order to
; reduce the code size...
;
-StackBuf equ $-44-32 ; Start the stack here (grow down - 4K)
+StackBuf equ STACK_TOP-44-32 ; Start the stack here (grow down - 4K)
PartInfo equ StackBuf ; Saved partition table entry
FloppyTable equ PartInfo+16 ; Floppy info table (must follow PartInfo)
OrigFDCTabPtr equ StackBuf-8 ; The 2nd high dword on the stack
diff --git a/core/isolinux.asm b/core/isolinux.asm
index 2627c2df..ef7d92de 100644
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -199,7 +199,7 @@ Files resb MAX_OPEN*open_file_t_size
;; CD-ROM sector (2K) of the file, so the number one priority is actually
;; loading the rest.
;;
-StackBuf equ $-44 ; 44 bytes needed for
+StackBuf equ STACK_TOP-44 ; 44 bytes needed for
; the bootsector chainloading
; code!
OrigESDI equ StackBuf-4 ; The high dword on the stack
diff --git a/core/layout.inc b/core/layout.inc
index 8c2e2485..19b50579 100644
--- a/core/layout.inc
+++ b/core/layout.inc
@@ -1,7 +1,7 @@
; -----------------------------------------------------------------------
;
; Copyright 1994-2009 H. Peter Anvin - All Rights Reserved
-; Copyright 2009 Intel Corporation; author: H. Peter Anvin
+; Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
@@ -26,6 +26,24 @@ BSS_START equ 0800h
; Text starts at the load address of 07C00h.
TEXT_START equ 7C00h
+;
+; Stack layout
+;
+; PXELINUX: There are apparently some AMI BIOSes in the field which
+; put their BEV stack somewhere below 7C00h (and therefore don't
+; handle localboot properly), so avoid that immediate memory region.
+; The range that is known to be bad is approximately 75E8..7C00; the
+; lower bound is tight.
+;
+ global STACK_LEN, STACK_TOP, STACK_BASE
+STACK_LEN equ 4096
+%if IS_PXELINUX
+STACK_TOP equ 7000h
+%else
+STACK_TOP equ 7c00h
+%endif
+STACK_BASE equ STACK_TOP - STACK_LEN
+
; The secondary BSS section, above the text; we really wish we could
; just make it follow .bcopy32 or hang off the end,
; but it doesn't seem to work that way.
diff --git a/core/pxelinux.asm b/core/pxelinux.asm
index 6ad15845..929ab673 100644
--- a/core/pxelinux.asm
+++ b/core/pxelinux.asm
@@ -212,12 +212,12 @@ pxe_unload_stack_pkt_len equ $-pxe_unload_stack_pkt
packet_buf resb 2048 ; Transfer packet
packet_buf_size equ $-packet_buf
+;
+; Location of the stack.
+;
+StackBuf equ STACK_TOP-44 ; Base of stack if we use our own
+
section .text
- ;
- ; PXELINUX needs more BSS than the other derivatives;
- ; therefore we relocate it from 7C00h on startup.
- ;
-StackBuf equ $-44 ; Base of stack if we use our own
;
; Primary entry point.
@@ -255,6 +255,21 @@ _start1:
mov ds,ax
mov es,ax
+%if 0 ; debugging code only... not intended for production use
+ ; Clobber the stack segment, to test for specific pathologies
+ mov di,STACK_BASE
+ mov cx,STACK_LEN >> 1
+ mov ax,0xf4f4
+ rep stosw
+
+ ; Clobber the tail of the 64K segment, too
+ extern __bss1_end
+ mov di,__bss1_end
+ sub cx,di ; CX = 0 previously
+ shr cx,1
+ rep stosw
+%endif
+
; That is all pushed onto the PXE stack. Save the pointer
; to it and switch to an internal stack.
mov [InitStack],sp
@@ -2252,11 +2267,11 @@ do_reset_pxe:
TRACER 'F'
;
-; Look to see if we are on an EFI CSM system. Some EFI
-; CSM systems put the BEV stack in low memory, which means
-; a return to the PXE stack will crash the system. However,
-; INT 18h works reliably, so in that case hack the stack and
-; point the "return address" to an INT 18h instruction.
+; Look to see if we are on an EFI CSM system. Some EFI CSM systems
+; (AMI CSM) put the BEV stack in low memory (just below 64K), which
+; means a return to the PXE stack will crash the system. However, INT
+; 18h works reliably, so in that case hack the stack and point the
+; "return address" to an INT 18h instruction.
;
; Hack the stack instead of the much simpler "just invoke INT 18h
; if we want to reset", so that chainloading other NBPs will work.
diff --git a/core/syslinux.ld b/core/syslinux.ld
index c1da230e..f6446e1b 100644
--- a/core/syslinux.ld
+++ b/core/syslinux.ld
@@ -20,8 +20,6 @@ OUTPUT_ARCH(i386)
EXTERN(_start)
ENTRY(_start)
-STACK_LEN = 4096;
-
SECTIONS
{
/* "Early" sections (before the load) */
@@ -63,7 +61,6 @@ SECTIONS
/* Stack */
- STACK_BASE = 0x7c00 - STACK_LEN;
. = STACK_BASE;
.stack : AT(STACK_BASE) {
__stack_start = .;
diff --git a/dos/Makefile b/dos/Makefile
index 9d8ce33c..eb0ca1a6 100644
--- a/dos/Makefile
+++ b/dos/Makefile
@@ -36,7 +36,7 @@ LIBOBJS = int2526.o conio.o memcpy.o memset.o skipatou.o atou.o \
VPATH = .:../libfat:../libinstaller
-TARGETS = syslinux.com copybs.com
+TARGETS = syslinux.com
all: $(TARGETS)
diff --git a/dosutil/Makefile b/dosutil/Makefile
index 2a105731..fc10ff90 100644
--- a/dosutil/Makefile
+++ b/dosutil/Makefile
@@ -13,7 +13,7 @@ NASM = nasm
NASMOPT = -O9999
WCTARGETS = mdiskchk.com
-NSTARGETS = eltorito.sys
+NSTARGETS = eltorito.sys copybs.com
TARGETS = $(WCTARGETS) $(NSTARGETS)
%.obj: %.c
@@ -24,23 +24,29 @@ TARGETS = $(WCTARGETS) $(NSTARGETS)
$(UPX) --ultra-brute --lzma $@ || \
$(UPX) --ultra-brute $@ || \
true
+ rm -f $*.0*
+ chmod a-x $@
%.sys: %.asm
$(NASM) $(NASMOPT) -f bin -o $@ -l $*.lst $<
$(UPX) --ultra-brute --lzma $@ || \
$(UPX) --ultra-brute $@ || \
true
+ rm -f $*.0*
+ chmod a-x $@
%.com: %.asm
$(NASM) $(NASMOPT) -f bin -o $@ -l $*.lst $<
$(UPX) --ultra-brute --lzma $@ || \
$(UPX) --ultra-brute $@ || \
true
+ rm -f $*.0*
+ chmod a-x $@
all: $(TARGETS)
tidy dist:
- -rm -f *.obj *.lst *.o
+ -rm -f *.obj *.lst *.o *.0*
clean: tidy
diff --git a/dos/copybs.asm b/dosutil/copybs.asm
index 26407148..26407148 100644
--- a/dos/copybs.asm
+++ b/dosutil/copybs.asm
diff --git a/dosutil/mdiskchk.com b/dosutil/mdiskchk.com
index 78257519..78257519 100755..100644
--- a/dosutil/mdiskchk.com
+++ b/dosutil/mdiskchk.com
Binary files differ
diff --git a/mtools/syslinux.c b/mtools/syslinux.c
index 3d55616d..8fc45350 100644
--- a/mtools/syslinux.c
+++ b/mtools/syslinux.c
@@ -218,8 +218,9 @@ int main(int argc, char *argv[])
exit(1);
}
fprintf(mtc,
- /* "MTOOLS_NO_VFAT=1\n" */
- "MTOOLS_SKIP_CHECK=1\n" /* Needed for some flash memories */
+ /* These are needed for some flash memories */
+ "MTOOLS_SKIP_CHECK=1\n"
+ "MTOOLS_FAT_COMPATIBILITY=1\n"
"drive s:\n"
" file=\"/proc/%lu/fd/%d\"\n"
" offset=%llu\n",