mirror of https://github.com/FDOS/kernel.git
Tell version info without booting kernel
This commit is contained in:
parent
c431157156
commit
a260927440
|
@ -21,6 +21,12 @@
|
||||||
' hit any key to continue to boot from 'diskette or CD'
|
' hit any key to continue to boot from 'diskette or CD'
|
||||||
wait ## seconds
|
wait ## seconds
|
||||||
if no key hit, boot from HD
|
if no key hit, boot from HD
|
||||||
|
|
||||||
|
Version_: only in kernel 2042 or higher, offline version identification
|
||||||
|
OemID: 0xFD for FreeDOS kernel, 0xDC for DosC kernel
|
||||||
|
Major: actual kernel version (not MS-DOS compatibility version), e.g. 2
|
||||||
|
Revision: revision sequence, e.g. 42 for kernel 2042
|
||||||
|
Release: 0 if released version, >0 for svn builds (e.g. svn revision #)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
typedef struct _KernelConfig {
|
typedef struct _KernelConfig {
|
||||||
|
@ -33,4 +39,11 @@ typedef struct _KernelConfig {
|
||||||
unsigned char ForceLBA;
|
unsigned char ForceLBA;
|
||||||
unsigned char GlobalEnableLBAsupport; /* = 0 --> disable LBA support */
|
unsigned char GlobalEnableLBAsupport; /* = 0 --> disable LBA support */
|
||||||
signed char BootHarddiskSeconds;
|
signed char BootHarddiskSeconds;
|
||||||
|
|
||||||
|
/* for version 2042 and higher only */
|
||||||
|
unsigned char Version_OemID;
|
||||||
|
unsigned char Version_Major;
|
||||||
|
unsigned short Version_Revision;
|
||||||
|
unsigned short Version_Release;
|
||||||
|
|
||||||
} KernelConfig;
|
} KernelConfig;
|
||||||
|
|
|
@ -66,6 +66,12 @@ ForceLBA db 0 ;
|
||||||
GlobalEnableLBAsupport db 1 ;
|
GlobalEnableLBAsupport db 1 ;
|
||||||
BootHarddiskSeconds db 0 ;
|
BootHarddiskSeconds db 0 ;
|
||||||
|
|
||||||
|
; The following VERSION resource must be keep in sync with VERSION.H
|
||||||
|
Version_OemID db 0xFD ; OEM_ID
|
||||||
|
Version_Major db 2
|
||||||
|
Version_Revision dw 41 ; REVISION_SEQ
|
||||||
|
Version_Release dw 1 ; 0=release build, >0=svn#
|
||||||
|
|
||||||
configend:
|
configend:
|
||||||
|
|
||||||
;************************************************************
|
;************************************************************
|
||||||
|
|
|
@ -13,9 +13,7 @@
|
||||||
* merged into SYS by tom ehlert *
|
* merged into SYS by tom ehlert *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/* This source compiled & tested with Borland C/C++ 3.1 + TC 2.01*/
|
char VERSION[] = "v1.02";
|
||||||
|
|
||||||
char VERSION[] = "v1.00";
|
|
||||||
char PROGRAM[] = "SYS CONFIG";
|
char PROGRAM[] = "SYS CONFIG";
|
||||||
char KERNEL[] = "KERNEL.SYS";
|
char KERNEL[] = "KERNEL.SYS";
|
||||||
|
|
||||||
|
@ -123,6 +121,10 @@ int readConfigSettings(int kfile, char *kfilename, KernelConfig * cfg)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check if config settings old UPX header and adjust */
|
||||||
|
if (cfg->ConfigSize == 19)
|
||||||
|
cfg->ConfigSize = 14; /* ignore 'nused87654321' */
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,38 +150,51 @@ void displayConfigSettings(KernelConfig * cfg)
|
||||||
{
|
{
|
||||||
/* print known options and current value - only if available */
|
/* print known options and current value - only if available */
|
||||||
|
|
||||||
|
/* show kernel version if available, read only, no option to modify */
|
||||||
|
if (cfg->ConfigSize >= 20)
|
||||||
|
{
|
||||||
|
printf
|
||||||
|
("%s kernel %s (build %d.%d OEM:%02X)\n",
|
||||||
|
(cfg->Version_OemID == 0xFD)?"FreeDOS":"DOS-C",
|
||||||
|
cfg->Version_Release?"SVN":"Release",
|
||||||
|
cfg->Version_Major,
|
||||||
|
cfg->Version_Revision,
|
||||||
|
cfg->Version_OemID
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (cfg->ConfigSize >= 1)
|
if (cfg->ConfigSize >= 1)
|
||||||
{
|
{
|
||||||
printf
|
printf
|
||||||
("DLASORT=0x%02X Sort disks by drive order: *0=no, 1=yes\n",
|
("DLASORT=0x%02X Sort disks by drive order: *0=no, 1=yes\n",
|
||||||
cfg->DLASortByDriveNo);
|
cfg->DLASortByDriveNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cfg->ConfigSize >= 2)
|
if (cfg->ConfigSize >= 2)
|
||||||
{
|
{
|
||||||
printf
|
printf
|
||||||
("SHOWDRIVEASSIGNMENT=0x%02X Show how drives assigned: *1=yes 0=no\n",
|
("SHOWDRIVEASSIGNMENT=0x%02X Show how drives assigned: *1=yes 0=no\n",
|
||||||
cfg->InitDiskShowDriveAssignment);
|
cfg->InitDiskShowDriveAssignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cfg->ConfigSize >= 3)
|
if (cfg->ConfigSize >= 3)
|
||||||
{
|
{
|
||||||
printf
|
printf
|
||||||
("SKIPCONFIGSECONDS=%-3d time to wait for F5/F8 : *2 sec (skip < 0)\n",
|
("SKIPCONFIGSECONDS=%-3d time to wait for F5/F8: *2 sec (skip < 0)\n",
|
||||||
cfg->SkipConfigSeconds);
|
cfg->SkipConfigSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cfg->ConfigSize >= 4)
|
if (cfg->ConfigSize >= 4)
|
||||||
{
|
{
|
||||||
printf
|
printf
|
||||||
("FORCELBA=0x%02X Always use LBA if possible: *0=no, 1=yes\n",
|
("FORCELBA=0x%02X Always use LBA if possible: *0=no, 1=yes\n",
|
||||||
cfg->ForceLBA);
|
cfg->ForceLBA);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cfg->ConfigSize >= 5)
|
if (cfg->ConfigSize >= 5)
|
||||||
{
|
{
|
||||||
printf
|
printf
|
||||||
("GLOBALENABLELBASUPPORT=0x%02X Enable LBA support: *1=yes, 0=no\n",
|
("GLOBALENABLELBASUPPORT=0x%02X Enable LBA support: *1=yes, 0=no\n",
|
||||||
cfg->GlobalEnableLBAsupport);
|
cfg->GlobalEnableLBAsupport);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -348,6 +363,7 @@ int FDKrnConfigMain(int argc, char **argv)
|
||||||
char *kfilename = KERNEL;
|
char *kfilename = KERNEL;
|
||||||
int kfile;
|
int kfile;
|
||||||
int updates = 0; /* flag used to indicate if we need to update kernel */
|
int updates = 0; /* flag used to indicate if we need to update kernel */
|
||||||
|
int readonly = 0; /* flag indicates kernel was opened read-only */
|
||||||
int argstart, i;
|
int argstart, i;
|
||||||
char *cptr;
|
char *cptr;
|
||||||
char *argptr;
|
char *argptr;
|
||||||
|
@ -355,7 +371,7 @@ int FDKrnConfigMain(int argc, char **argv)
|
||||||
printf("FreeDOS Kernel Configuration %s\n", VERSION);
|
printf("FreeDOS Kernel Configuration %s\n", VERSION);
|
||||||
|
|
||||||
/* 1st go through and just process arguments (help/filename/etc) */
|
/* 1st go through and just process arguments (help/filename/etc) */
|
||||||
for (i = 2; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
{
|
{
|
||||||
argptr = argv[i];
|
argptr = argv[i];
|
||||||
|
|
||||||
|
@ -376,6 +392,10 @@ int FDKrnConfigMain(int argc, char **argv)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (memicmp(argptr, "CONFIG", 6) == 0)
|
||||||
|
{
|
||||||
|
/* ignore */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
argstart = 2;
|
argstart = 2;
|
||||||
|
@ -400,7 +420,14 @@ int FDKrnConfigMain(int argc, char **argv)
|
||||||
kfile = open(kfilename, O_RDWR | O_BINARY);
|
kfile = open(kfilename, O_RDWR | O_BINARY);
|
||||||
|
|
||||||
if (kfile < 0)
|
if (kfile < 0)
|
||||||
printf("Error: unable to open kernel file <%s>\n", kfilename), exit(1);
|
{
|
||||||
|
/* attempt to open read only to allow viewing options */
|
||||||
|
kfile = open(kfilename, O_RDONLY | O_BINARY);
|
||||||
|
readonly = 1;
|
||||||
|
|
||||||
|
if (kfile < 0)
|
||||||
|
printf("Error: unable to open kernel file <%s>\n", kfilename), exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
/* now that we know the filename (default or given) get config info */
|
/* now that we know the filename (default or given) get config info */
|
||||||
readConfigSettings(kfile, kfilename, &cfg);
|
readConfigSettings(kfile, kfilename, &cfg);
|
||||||
|
@ -454,8 +481,16 @@ int FDKrnConfigMain(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* warn user if attempt to modify read-only file */
|
||||||
|
if (updates && readonly)
|
||||||
|
{
|
||||||
|
printf("Kernel %s opened read-only, changes ignored!\n", kfilename);
|
||||||
|
/* reload current settings, ignore newly requested ones */
|
||||||
|
readConfigSettings(kfile, kfilename, &cfg);
|
||||||
|
}
|
||||||
|
|
||||||
/* write out new config values if modified */
|
/* write out new config values if modified */
|
||||||
if (updates)
|
if (updates && !readonly)
|
||||||
{
|
{
|
||||||
/* update it */
|
/* update it */
|
||||||
if (writeConfigSettings(kfile, &cfg))
|
if (writeConfigSettings(kfile, &cfg))
|
||||||
|
|
|
@ -263,7 +263,7 @@ static void write_header(FILE *dest, size_t size)
|
||||||
static char JumpBehindCode[] = {
|
static char JumpBehindCode[] = {
|
||||||
/* kernel config header - 32 bytes */
|
/* kernel config header - 32 bytes */
|
||||||
0xeb, 0x1b, /* jmp short realentry */
|
0xeb, 0x1b, /* jmp short realentry */
|
||||||
'C', 'O', 'N', 'F', 'I', 'G', 32 - 2 - 6 - 2 - 3, 0, /* WORD */
|
'C', 'O', 'N', 'F', 'I', 'G', 6, 0, /* WORD */
|
||||||
0, /* DLASortByDriveNo db 0 */
|
0, /* DLASortByDriveNo db 0 */
|
||||||
1, /* InitDiskShowDriveAssignment db 1 */
|
1, /* InitDiskShowDriveAssignment db 1 */
|
||||||
2, /* SkipConfigSeconds db 2 */
|
2, /* SkipConfigSeconds db 2 */
|
||||||
|
|
Loading…
Reference in New Issue