mirror of
https://github.com/FDOS/kernel.git
synced 2025-07-24 22:34:29 +02:00
minor build fixes (when features disabled) and merge in Udo's EnhancedDR changes
git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/branches/UNSTABLE@1097 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
parent
3acc1e41de
commit
4a2ad74a44
119
sys/sys.c
119
sys/sys.c
@ -26,11 +26,26 @@
|
|||||||
|
|
||||||
***************************************************************/
|
***************************************************************/
|
||||||
|
|
||||||
#define DEBUG
|
#define DEBUG /* to display extra information */
|
||||||
/* #define DDEBUG */
|
/* #define DDEBUG */ /* to enable display of sector dumps */
|
||||||
#define WITHOEMCOMPATBS /* include support for OEM MS/PC DOS 3.??-6.x */
|
#define WITHOEMCOMPATBS /* include support for OEM MS/PC DOS 3.??-6.x */
|
||||||
|
#define FDCONFIG /* include support to configure FD kernel */
|
||||||
|
/* #define DRSYS */ /* SYS for Enhanced DR-DOS (OpenDOS enhancement Project) */
|
||||||
|
|
||||||
#define SYS_VERSION "v3.5a"
|
#define SYS_VERSION "v3.5b"
|
||||||
|
#define SYS_NAME "FreeDOS System Installer "
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DRSYS /* set displayed name & drop FD kernel config */
|
||||||
|
#undef SYS_NAME
|
||||||
|
#define SYS_NAME "Enhanced DR-DOS System Installer "
|
||||||
|
#ifdef FDCONFIG
|
||||||
|
#undef FDCONFIG
|
||||||
|
#endif
|
||||||
|
#ifdef WITHOEMCOMPATBS
|
||||||
|
#undef WITHOEMCOMPATBS
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <dos.h>
|
#include <dos.h>
|
||||||
@ -263,7 +278,9 @@ struct VerifyBootSectorSize {
|
|||||||
/* (Watcom has a nice warning for this, by the way) */
|
/* (Watcom has a nice warning for this, by the way) */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef FDCONFIG
|
||||||
int FDKrnConfigMain(int argc, char **argv);
|
int FDKrnConfigMain(int argc, char **argv);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* FreeDOS sys, we default to our kernel and load segment, but
|
/* FreeDOS sys, we default to our kernel and load segment, but
|
||||||
if not found (or explicitly given) support OEM DOS variants
|
if not found (or explicitly given) support OEM DOS variants
|
||||||
@ -280,33 +297,56 @@ typedef struct DOSBootFiles {
|
|||||||
BOOL stdbs; /* use FD boot sector (T) or oem compat one (F) */
|
BOOL stdbs; /* use FD boot sector (T) or oem compat one (F) */
|
||||||
LONG minsize; /* smallest dos file can be and be valid, 0=existance optional */
|
LONG minsize; /* smallest dos file can be and be valid, 0=existance optional */
|
||||||
} DOSBootFiles;
|
} DOSBootFiles;
|
||||||
|
#define FREEDOS_FILES { "KERNEL.SYS", NULL, 0x60, 1, 0 },
|
||||||
DOSBootFiles bootFiles[] = {
|
DOSBootFiles bootFiles[] = {
|
||||||
/* Note: This order is the order OEM:AUTO uses to determine DOS flavor. */
|
/* Note: This order is the order OEM:AUTO uses to determine DOS flavor. */
|
||||||
/* FreeDOS */ { "KERNEL.SYS", NULL, 0x60, 1, 0 },
|
#ifndef DRSYS
|
||||||
|
/* FreeDOS */ FREEDOS_FILES
|
||||||
|
#endif
|
||||||
|
/* DR-DOS */ { "DRBIO.SYS", "DRDOS.SYS", 0x70, 1, 1 },
|
||||||
/* DR-DOS */ { "IBMBIO.COM", "IBMDOS.COM", 0x70, 1, 1 },
|
/* DR-DOS */ { "IBMBIO.COM", "IBMDOS.COM", 0x70, 1, 1 },
|
||||||
|
#ifdef DRSYS
|
||||||
|
/* FreeDOS */ FREEDOS_FILES
|
||||||
|
#endif
|
||||||
#ifdef WITHOEMCOMPATBS
|
#ifdef WITHOEMCOMPATBS
|
||||||
/* PC-DOS */ { "IBMBIO.COM", "IBMDOS.COM", 0x70, 0, 6138 }, /* pre v7 DR ??? */
|
/* PC-DOS */ { "IBMBIO.COM", "IBMDOS.COM", 0x70, 0, 6138 }, /* pre v7 DR ??? */
|
||||||
/* MS-DOS */ { "IO.SYS", "MSDOS.SYS", 0x70, 0, 10240 },
|
/* MS-DOS */ { "IO.SYS", "MSDOS.SYS", 0x70, 0, 10240 },
|
||||||
|
/* W9x-DOS */ { "IO.SYS", "MSDOS.SYS", 0x70, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
/* W9x-DOS */ { "IO.SYS", "MSDOS.SYS", 0x70, 1, 0},
|
|
||||||
};
|
};
|
||||||
#define DOSFLAVORS (sizeof(bootFiles) / sizeof(*bootFiles))
|
#define DOSFLAVORS (sizeof(bootFiles) / sizeof(*bootFiles))
|
||||||
|
|
||||||
|
/* associate friendly name with index into bootFiles array */
|
||||||
#define OEM_AUTO (-1) /* attempt to guess DOS on source drive */
|
#define OEM_AUTO (-1) /* attempt to guess DOS on source drive */
|
||||||
|
#ifndef DRSYS
|
||||||
#define OEM_FD 0 /* standard FreeDOS mode */
|
#define OEM_FD 0 /* standard FreeDOS mode */
|
||||||
#define OEM_DR 1 /* use FreeDOS boot sector, but OEM names */
|
#define OEM_EDR 1 /* use FreeDOS boot sector, but OEM names */
|
||||||
#define OEM_PC 2 /* use PC-DOS compatible boot sector and names */
|
#define OEM_DR 2 /* FD boot sector,(Enhanced) DR-DOS names */
|
||||||
#define OEM_MS 3 /* use PC-DOS compatible BS with MS names */
|
#else
|
||||||
#define OEM_W9x 4 /* use FreeDOS boot sector but with MS names */
|
#define OEM_FD 2 /* standard FreeDOS mode */
|
||||||
|
#define OEM_EDR 0 /* use FreeDOS boot sector, but OEM names */
|
||||||
|
#define OEM_DR 1 /* FD boot sector,(Enhanced) DR-DOS names */
|
||||||
|
#endif
|
||||||
|
#ifdef WITHOEMCOMPATBS
|
||||||
|
#define OEM_PC 3 /* use PC-DOS compatible boot sector and names */
|
||||||
|
#define OEM_MS 4 /* use PC-DOS compatible BS with MS names */
|
||||||
|
#define OEM_W9x 5 /* use PC-DOS compatible BS with MS names */
|
||||||
|
#endif
|
||||||
|
|
||||||
CONST char * msgDOS[DOSFLAVORS] = {
|
CONST char * msgDOS[DOSFLAVORS] = { /* order should match above items */
|
||||||
"\n", /* In standard FreeDOS mode, don't print anything special */
|
"\n", /* In standard FreeDOS/EnhancedDR mode, don't print anything special */
|
||||||
|
#ifndef DRSYS
|
||||||
|
"Enhanced DR DOS (OpenDOS Enhancement Project) mode\n",
|
||||||
|
#endif
|
||||||
"DR DOS (OpenDOS Enhancement Project) mode\n",
|
"DR DOS (OpenDOS Enhancement Project) mode\n",
|
||||||
|
#ifdef DRSYS
|
||||||
|
"\n", /* FreeDOS mode so don't print anything special */
|
||||||
|
#endif
|
||||||
#ifdef WITHOEMCOMPATBS
|
#ifdef WITHOEMCOMPATBS
|
||||||
"PC-DOS compatibility mode\n",
|
"PC-DOS compatibility mode\n",
|
||||||
"MS-DOS compatibility mode\n",
|
"MS-DOS compatibility mode\n",
|
||||||
#endif
|
|
||||||
"Win9x DOS compatibility mode\n",
|
"Win9x DOS compatibility mode\n",
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct SYSOptions {
|
typedef struct SYSOptions {
|
||||||
@ -324,7 +364,6 @@ typedef struct SYSOptions {
|
|||||||
BYTE *fnCmd; /* optional override to cmd interpreter filename (src & dest) */
|
BYTE *fnCmd; /* optional override to cmd interpreter filename (src & dest) */
|
||||||
} SYSOptions;
|
} SYSOptions;
|
||||||
|
|
||||||
|
|
||||||
void dumpBS(const char *, int);
|
void dumpBS(const char *, int);
|
||||||
void restoreBS(const char *, int);
|
void restoreBS(const char *, int);
|
||||||
void put_boot(SYSOptions *opts);
|
void put_boot(SYSOptions *opts);
|
||||||
@ -336,7 +375,7 @@ void showHelpAndExit(void)
|
|||||||
printf(
|
printf(
|
||||||
"Usage: \n"
|
"Usage: \n"
|
||||||
"%s [source] drive: [bootsect] [{option}]\n"
|
"%s [source] drive: [bootsect] [{option}]\n"
|
||||||
" source = A:,B:,C:\\KERNEL\\BIN\\,etc., or current directory if not given\n"
|
" source = A:,B:,C:\\DOS\\,etc., or current directory if not given\n"
|
||||||
" drive = A,B,etc.\n"
|
" drive = A,B,etc.\n"
|
||||||
" bootsect = name of 512-byte boot sector file image for drive:\n"
|
" bootsect = name of 512-byte boot sector file image for drive:\n"
|
||||||
" to write to *instead* of real boot sector\n"
|
" to write to *instead* of real boot sector\n"
|
||||||
@ -345,18 +384,26 @@ void showHelpAndExit(void)
|
|||||||
" /BOOTONLY: do *not* copy kernel / shell, only update boot sector or image\n"
|
" /BOOTONLY: do *not* copy kernel / shell, only update boot sector or image\n"
|
||||||
" /OEM : indicates boot sector, filenames, and load segment to use\n"
|
" /OEM : indicates boot sector, filenames, and load segment to use\n"
|
||||||
" /OEM:FD use FreeDOS compatible settings\n"
|
" /OEM:FD use FreeDOS compatible settings\n"
|
||||||
" /OEM:DR use DR DOS 7+ compatible settings (same as /OEM)\n"
|
" /OEM:EDR use Enhanced DR DOS 7+ compatible settings\n"
|
||||||
|
" /OEM:DR use DR DOS 7+ compatible settings\n"
|
||||||
#ifdef WITHOEMCOMPATBS
|
#ifdef WITHOEMCOMPATBS
|
||||||
" /OEM:PC use PC-DOS compatible settings\n"
|
" /OEM:PC use PC-DOS compatible settings\n"
|
||||||
" /OEM:MS use MS-DOS compatible settings\n"
|
" /OEM:MS use MS-DOS compatible settings\n"
|
||||||
#endif
|
|
||||||
" /OEM:W9x use MS Win9x DOS compatible settings\n"
|
" /OEM:W9x use MS Win9x DOS compatible settings\n"
|
||||||
" default is /OEM:AUTO, select DOS based on existing files\n"
|
#endif
|
||||||
" /K name : name of kernel to use in boot sector instead of KERNEL.SYS\n"
|
" default is /OEM[:AUTO], select DOS based on existing files\n"
|
||||||
" /L segm : hex load segment to use in boot sector instead of 60\n"
|
" /K name : name of kernel to use in boot sector instead of %s\n"
|
||||||
|
" /L segm : hex load segment to use in boot sector instead of %02x\n"
|
||||||
" /B btdrv : hex BIOS # of boot drive set in bs, 0=A:, 80=1st hd,...\n"
|
" /B btdrv : hex BIOS # of boot drive set in bs, 0=A:, 80=1st hd,...\n"
|
||||||
" /FORCEDRV: force use of drive # set in bs instead of BIOS boot value\n"
|
" /FORCEDRV: force use of drive # set in bs instead of BIOS boot value\n"
|
||||||
"%s CONFIG /help\n", pgm, pgm
|
#ifdef FDCONFIG
|
||||||
|
"%s CONFIG /help\n"
|
||||||
|
#endif
|
||||||
|
/*SYS, KERNEL.SYS/DRBIO.SYS 0x60/0x70*/
|
||||||
|
, pgm, bootFiles[0].kernel, bootFiles[0].loadseg
|
||||||
|
#ifdef FDCONFIG
|
||||||
|
, pgm
|
||||||
|
#endif
|
||||||
);
|
);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
@ -406,12 +453,14 @@ void initOptions(int argc, char *argv[], SYSOptions *opts)
|
|||||||
{
|
{
|
||||||
argp += 3;
|
argp += 3;
|
||||||
if (!*argp)
|
if (!*argp)
|
||||||
opts->flavor = OEM_DR;
|
opts->flavor = OEM_AUTO;
|
||||||
else if (*argp == ':')
|
else if (*argp == ':')
|
||||||
{
|
{
|
||||||
argp++; /* point to DR/PC/MS that follows */
|
argp++; /* point to DR/PC/MS that follows */
|
||||||
if (memicmp(argp, "AUTO", 4) == 0)
|
if (memicmp(argp, "AUTO", 4) == 0)
|
||||||
opts->flavor = OEM_AUTO;
|
opts->flavor = OEM_AUTO;
|
||||||
|
else if (memicmp(argp, "EDR", 3) == 0)
|
||||||
|
opts->flavor = OEM_EDR;
|
||||||
else if (memicmp(argp, "DR", 2) == 0)
|
else if (memicmp(argp, "DR", 2) == 0)
|
||||||
opts->flavor = OEM_DR;
|
opts->flavor = OEM_DR;
|
||||||
#ifdef WITHOEMCOMPATBS
|
#ifdef WITHOEMCOMPATBS
|
||||||
@ -419,11 +468,16 @@ void initOptions(int argc, char *argv[], SYSOptions *opts)
|
|||||||
opts->flavor = OEM_PC;
|
opts->flavor = OEM_PC;
|
||||||
else if (memicmp(argp, "MS", 2) == 0)
|
else if (memicmp(argp, "MS", 2) == 0)
|
||||||
opts->flavor = OEM_MS;
|
opts->flavor = OEM_MS;
|
||||||
#endif
|
|
||||||
else if (memicmp(argp, "W9", 2) == 0)
|
else if (memicmp(argp, "W9", 2) == 0)
|
||||||
opts->flavor = OEM_W9x;
|
opts->flavor = OEM_W9x;
|
||||||
else /* if (memicmp(argp, "FD", 2) == 0) */
|
#endif
|
||||||
|
else if (memicmp(argp, "FD", 2) == 0)
|
||||||
opts->flavor = OEM_FD;
|
opts->flavor = OEM_FD;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%s: unknown OEM qualifier %s\n", pgm, argp);
|
||||||
|
showHelpAndExit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -607,7 +661,12 @@ void initOptions(int argc, char *argv[], SYSOptions *opts)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* if unable to determine DOS, assume FreeDOS */
|
/* if unable to determine DOS, assume FreeDOS */
|
||||||
if (opts->flavor == OEM_AUTO) opts->flavor = OEM_FD;
|
if (opts->flavor == OEM_AUTO) opts->flavor =
|
||||||
|
#ifdef DRSYS
|
||||||
|
OEM_EDR;
|
||||||
|
#else
|
||||||
|
OEM_FD;
|
||||||
|
#endif
|
||||||
|
|
||||||
printf(msgDOS[opts->flavor]);
|
printf(msgDOS[opts->flavor]);
|
||||||
|
|
||||||
@ -681,12 +740,14 @@ int main(int argc, char **argv)
|
|||||||
SYSOptions opts; /* boot options and other flags */
|
SYSOptions opts; /* boot options and other flags */
|
||||||
BYTE srcFile[SYS_MAXPATH]; /* full path+name of [kernel] file [to copy] */
|
BYTE srcFile[SYS_MAXPATH]; /* full path+name of [kernel] file [to copy] */
|
||||||
|
|
||||||
printf("FreeDOS System Installer " SYS_VERSION ", " __DATE__ "\n");
|
printf(SYS_NAME SYS_VERSION ", " __DATE__ "\n");
|
||||||
|
|
||||||
|
#ifdef FDCONFIG
|
||||||
if (argc > 1 && memicmp(argv[1], "CONFIG", 6) == 0)
|
if (argc > 1 && memicmp(argv[1], "CONFIG", 6) == 0)
|
||||||
{
|
{
|
||||||
exit(FDKrnConfigMain(argc, argv));
|
exit(FDKrnConfigMain(argc, argv));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
initOptions(argc, argv, &opts);
|
initOptions(argc, argv, &opts);
|
||||||
|
|
||||||
@ -1245,13 +1306,17 @@ void put_boot(SYSOptions *opts)
|
|||||||
correct_bpb((struct bootsectortype *)(default_bpb + 7 - 11), bs);
|
correct_bpb((struct bootsectortype *)(default_bpb + 7 - 11), bs);
|
||||||
|
|
||||||
if (opts->kernel.stdbs)
|
if (opts->kernel.stdbs)
|
||||||
{
|
{
|
||||||
memcpy(newboot, (fs == FAT16) ? fat16com : fat12com, SEC_SIZE);
|
memcpy(newboot, (fs == FAT16) ? fat16com : fat12com, SEC_SIZE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
#ifdef WITHOEMCOMPATBS
|
||||||
printf("Using OEM (PC/MS-DOS) compatible boot sector.\n");
|
printf("Using OEM (PC/MS-DOS) compatible boot sector.\n");
|
||||||
memcpy(newboot, (fs == FAT16) ? oemfat16 : oemfat12, SEC_SIZE);
|
memcpy(newboot, (fs == FAT16) ? oemfat16 : oemfat12, SEC_SIZE);
|
||||||
|
#else
|
||||||
|
printf("Internal Error: no OEM compatible boot sector!\n");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user