Index: branches/azimutz/Chazileon/doc/BootHelp.txt =================================================================== --- branches/azimutz/Chazileon/doc/BootHelp.txt (revision 402) +++ branches/azimutz/Chazileon/doc/BootHelp.txt (revision 403) @@ -18,9 +18,10 @@ kernel: kernel name (e.g. "mach_kernel" - must be in "/" ) - flags: -v (verbose) -s (single user mode) -x (safe mode) + flags: -v (verbose) -s (single user mode) + -x (safe mode) -f (ignore caches) -F (ignore "Kernel Flags" specified in boot configuration file) - 32 (i386 arch) -legacy (no 64 bit apps - kernel flag) + 32 (i386 arch) -legacy (no 64 bit apps - kernel flag) 64 (x86_64 arch) "Graphics Mode"="WIDTHxHEIGHTxDEPTH" (e.g. "1024x768x32") Index: branches/azimutz/Chazileon/i386/libsaio/disk.c =================================================================== --- branches/azimutz/Chazileon/i386/libsaio/disk.c (revision 402) +++ branches/azimutz/Chazileon/i386/libsaio/disk.c (revision 403) @@ -1448,12 +1448,11 @@ void rescanBIOSDevice(int biosdev) { - struct DiskBVMap *oldMap = diskResetBootVolumes(biosdev); - CacheReset(); - diskFreeMap(oldMap); - oldMap = NULL; - - scanBootVolumes(biosdev, 0); + struct DiskBVMap *oldMap = diskResetBootVolumes(biosdev); + CacheReset(); + diskFreeMap(oldMap); + oldMap = NULL; + scanBootVolumes(biosdev, 0); } struct DiskBVMap* diskResetBootVolumes(int biosdev) Index: branches/azimutz/Chazileon/i386/boot2/boot.h =================================================================== --- branches/azimutz/Chazileon/i386/boot2/boot.h (revision 402) +++ branches/azimutz/Chazileon/i386/boot2/boot.h (revision 403) @@ -177,6 +177,7 @@ //---------- #define kVerboseModeFlag "-v" // * options.c, getValFK #define kSafeModeFlag "-x" // * options.c, getValueFBK (5) & getValFK +#define kIgnoreCachesFlag "-f" // * options.c, getValFK #define kSingleUserModeFlag "-s" // * options.c, getValFK #define kIgnoreBootFileFlag "-F" // * options.c, getValFBK // Can't remember if i ever tried -F; had an idea.. make this point to kTestConfigKey, Index: branches/azimutz/Chazileon/i386/boot2/options.c =================================================================== --- branches/azimutz/Chazileon/i386/boot2/options.c (revision 402) +++ branches/azimutz/Chazileon/i386/boot2/options.c (revision 403) @@ -188,12 +188,22 @@ { gBootArgsPtr = gBootArgs; memset(gBootArgs, '\0', BOOT_STRING_LEN); - + if (bootArgs->Video.v_display == GRAPHICS_MODE) { clearGraphicBootPrompt(); } } +static void addBootArg(const char * argStr) +{ + if ( (gBootArgsPtr + strlen(argStr) + 1) < gBootArgsEnd) + { + *gBootArgsPtr++ = ' '; + strcat(gBootArgs, argStr); + gBootArgsPtr += strlen(argStr); + } +} + //========================================================================== static void showBootPrompt(int row, bool visible) @@ -440,22 +450,19 @@ case BOOT_VERBOSE: gVerboseMode = true; gBootMode = kBootModeNormal; - *gBootArgsPtr++ = '-'; - *gBootArgsPtr++ = 'v'; + addBootArg(kVerboseModeFlag); break; case BOOT_IGNORECACHE: gVerboseMode = false; gBootMode = kBootModeNormal; - *gBootArgsPtr++ = '-'; - *gBootArgsPtr++ = 'x'; + addBootArg(kIgnoreCachesFlag); break; case BOOT_SINGLEUSER: gVerboseMode = true; gBootMode = kBootModeNormal; - *gBootArgsPtr++ = '-'; - *gBootArgsPtr++ = 's'; + addBootArg(kSingleUserModeFlag); break; } @@ -695,12 +702,14 @@ } // ensure we're in graphics mode if gui is setup - if (gui.initialised) { - if (bootArgs->Video.v_display == VGA_TEXT_MODE) { - setVideoMode(GRAPHICS_MODE, 0); - } + if (gui.initialised && bootArgs->Video.v_display == VGA_TEXT_MODE) + { + setVideoMode(GRAPHICS_MODE, 0); } + // Clear command line boot arguments + clearBootArgs(); + // Allow user to override default timeout. if (multiboot_timeout_set) { timeout = multiboot_timeout; @@ -730,32 +739,27 @@ gBootMode |= kBootModeSafe; //Azi: Mek has this commented out. } + // Checking user pressed keys + bool f8press = false, spress = false, vpress = false; + while (readKeyboardStatus()) { + key = bgetc (); + if (key == 0x4200) f8press = true; + if ((key & 0xff) == 's' || (key & 0xff) == 'S') spress = true; + if ((key & 0xff) == 'v' || (key & 0xff) == 'V') vpress = true; + } // If user typed F8, abort quiet mode, and display the menu. - { - bool f8press = false, spress = false, vpress = false; - int key; - while (readKeyboardStatus()) { - key = bgetc (); - if (key == 0x4200) f8press = true; - if ((key & 0xff) == 's' || (key & 0xff) == 'S') spress = true; - if ((key & 0xff) == 'v' || (key & 0xff) == 'V') vpress = true; - } - if (f8press) { - gBootMode &= ~kBootModeQuiet; - timeout = 0; - } - if ((gBootMode & kBootModeQuiet) && firstRun && vpress && (gBootArgsPtr + 3 < gBootArgsEnd)) { - *(gBootArgsPtr++) = ' '; - *(gBootArgsPtr++) = '-'; - *(gBootArgsPtr++) = 'v'; - } - if ((gBootMode & kBootModeQuiet) && firstRun && spress && (gBootArgsPtr + 3 < gBootArgsEnd)) { - *(gBootArgsPtr++) = ' '; - *(gBootArgsPtr++) = '-'; - *(gBootArgsPtr++) = 's'; - } + if (f8press) { + gBootMode &= ~kBootModeQuiet; + timeout = 0; } - clearBootArgs(); + // If user typed 'v' or 'V', boot in verbose mode. + if ((gBootMode & kBootModeQuiet) && firstRun && vpress) { + addBootArg(kVerboseModeFlag); + } + // If user typed 's' or 'S', boot in single user mode. + if ((gBootMode & kBootModeQuiet) && firstRun && spress) { + addBootArg(kSingleUserModeFlag); + } if (bootArgs->Video.v_display == VGA_TEXT_MODE) { setCursorPosition(0, 0, 0); @@ -1455,6 +1459,10 @@ gBootMode = ( getValueForKey( kSafeModeFlag, &val, &cnt, &bootInfo->bootConfig ) ) ? kBootModeSafe : kBootModeNormal; + + if ( getValueForKey( kIgnoreCachesFlag, &val, &cnt, &bootInfo->bootConfig ) ) { + gBootMode = kBootModeSafe; + } } if ( getValueForKey( kMKextCacheKey, &val, &cnt, &bootInfo->bootConfig ) )