MATTsoft Boot Manager - http://www.tdp.cz/martin/mbtmgr/ - documentation

7. Appendix

7.1 Windows 9x Winboot.Ini file

In Windows 95 and 98 is special file WINBOOT.INI or MSDOS.SYS (If you've boot "Previous MS-DOS version" file is renamed to msdos.w40). Windows 95 and 98 searches first for WINBOOT.INI and then for MSDOS.SYS and use Winboot.ini when both files exists. MSDOS.SYS is not binary part of DOS kernel like in MS-DOS 6, it's ordinary DOS text file and you can edit it using any plaintext editor (e.g. multiedit, edit, notepad). You can specify here many things:
[options]TypeDefaultDescription
BootDelay= Value 2 Set boot-timeout value
BootGui= Boolean 1 Load Windows 95 graphical user interface
BootKeys= Boolean 1 Allow function keys while booting
BootMenu= Boolean 0 Show startup menu
BootMenuDefault= Value 1 Default boot item
BootMenuDelay= Value 30 Timeout (in seconds)
BootMulti= Boolean 0 Allow booting "previous version of MS-DOS"
BootSafe= Boolean 0 Run Windows 95 in safe mode
BootWarn= Boolean 0 Show warning message in safe mode
BootWin= Boolean 1 Set operating system
DisableLog= Boolean ? Undocumented
DoubleBuffer= Boolean 0 Load double buffer for SCSI disks
DblSpace= Boolean 1 Load DBLSPACE.BIN
DrvSpace= Boolean 1 Load DRVSPACE.BIN
Dblspace.bin= Boolean 1 Load DRBLSPACE.BIN
LoadTop= Boolean 1 Load COMMAND.COM "on the top"of pameti
Logo= Boolean 1 Show animated logo
Network= Boolean ? Safe mode with networking
SystemReg= Boolean? ? Undocumented

[PATHS]Description
WinDir= Windows 95 directory (e.g. C:\WINDOWS)
WinBootDir= Windows boot directory
HostWinBootDrv= Windows boot drive
UninstallDir= Uninstall directory

Example WINBOOT.INI file:

;
; Example WINBOOT.INI file from MATTsoft Boot Manager
;

[Paths]
WinDir=C:\WINDOWS

[Options]
BootMenu=1
BootMulti=1
BootWin=1
BootGui=1
BootKeys=1

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxx WINBOOT.INI must be > than 1024 bytes  xxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

7.2 Windows NT Boot.Ini file

/MAXMEM= Limits Windows NT to use only part of memory (value is in MegaBytes)
/BURNMEMORY= Limits Windows NT to not use some memory (also in MB)
/ONECPU On a multi-processor machines limits Windows NT to use only one processor.
/NUMPROC= On a multi-processor machines limits Windows NT to use only some processors.
/SOS Windows NT will display some informations while loading itself and device drivers. This is very useful option, turn it ON!
/BASEVIDEO Use only standard 640x480x16 VGA videomode.
/NODEBUG, /CRASHDEBUG Disable kernel-mode debugging.
/DEBUG Enable kernel-mode debugging.
/DEBUGPORT=,/BAUDRATE= Enables remote debugging via serial port (COM1 by default) and speed (19200).
/KERNEL=,/HAL= Changes kernel and hal.
/3GB Changes settings of user and system virtual memory.
/PCILOCK Doesn't reconfigure PCI devices. Windows NT will use BIOS configuration .
/NOSERIALMICE= Disables serial mice detection on specified port or on all ports.

7.3 OpenDOS/DR-DOS boot menu

Most MS-DOS users use Startup menu. You can choose which configuration boot at system startup. But HOW-TO[tm] do this in OpenDOS (DR-DOS, Novell DOS) which doesn't have MENUITEM commands? You can use other CONFIG.SYS commands to do this. It's like switching BAT files.

Creating menus in CONFIG.SYS (or DCONFIG.SYS) is very simple. Labels are marked with ":" character before label name (e.g. :my_label). Command GOTO [label jumps to specified label and GOSUB [label] calls [label] as subroutine. Then you must exit subroutine with RETURN command. Command SWITCH [label1][,label2[,label3[,...]]] asks user for choice and jumps to entered label. Swictch command waits for number (1,2,3,...) and jumps to n-th specified label (key '3'=label3 in our example). You can use also CLS to clear screen, ECHO text to display some text (e.g. menu) and TIMEOUT [n] to set SWITCH timeout in seconds. Look at this example:

rem === menu ===
cls
timeout 2
echo   DCONFIG.SYS Startup Menu
echo   ~~~~~~~~~~~~~~~~~~~~~~~~
echo
echo   1. Normal config
echo   2. TaskMgr
echo   3. Free
echo
echo Press 1 or 2...
switch o_normal,o_tasker,o_free

rem === common ===
Lastdrive=Z

rem === normal ===
:o_normal
device=c:\utils\cdrom\mtmcdai.sys /D:MTMIDE01
set CONFIG=O_normal

rem === free ===
:o_free
set CONFIG=O_Free
return

rem tasker ===
:o_tasker
device=c:\utils\cdrom\mtmcdai.sys /D:MTMIDE01
set CONFIG=O_Tasker
return

You must also modify your autoexec.bat file to jump to right place (GOTO %CONFIG%). Small example:

@echo off
rem === common ===
set path=c:\vc;c:\batch;c:\utils;..
goto %CONFIG%

:o_free
goto quit

:o_tasker
c:\opendos\share.exe
c:\opendos\taskmgr.exe
c:\vc\vc.com
goto quit

:o_normal
c:\vc\vc.com
goto quit

:quit

7.4 DOS fdisk arguments

MS-DOS FDISK program has many undocumented parameters. See following table:
/STATUS Show current partition layout
/MBR Replace Master boot record with standard code. THIS DESTROYS MATTSOFT BOOT MANAGER !!!
/PRI Create primary partition
/PRIO Create primary FAT16/FAT32 partition
/EXT Create extended partition
/LOG Create logical drive in extended partition
/LOGO Create FAT32/16 logical drive drive in extended partition
/FPRMT Ask for FAT16/32 in interactive mode.
/Q (unknown)
/X Do not use LBA partitions
/ACTOK (unknown)
/CMBR Create Master boot record on specified disk

7.5 Filesystems

This chapter is not yet finished.

7.6 Partitioning your disk

When you are partitioning your DOS disk, you should choose right disk size because FAT disk is divided into clusters (smallest allocation unit). For example, two bytes long file use 16KB on a 700 MB disk because this disk has 16KB clusters.

DOS/Win 9x FAT16 filesystem:
Disk sizeCluster size
0 - 127 MB 2 KB
128 - 255 MB 4 KB
256 - 511 MB 8 KB
512 - 1023 MB 16 KB
1024 - 2047 MB 32 KB

Note: FAT16 partition cannot be larger than 2048 MB (2 GB). You must use FAT32 or divide disk.

7.7 Other programs

7.7.1 Other boot managers

7.7.2 Other partition editors/fdisks

7.7.3 Misc programs

7.8 Operating systems

7.9 Glossary

Active Partition
One of the hard partitions on a disk should be marked as the active partition, which designates the partition to boot. This is used by fdisk and standard mbr code. If you are using boot manager you can boot multiple partitions.
ATA
AT attachment, the politically correct term for IDE.
Boot Blocks
Basic Input/Output System, a slow and antiquated ROM which is found in most x86 PCs and consists of 16-bit code. It is important because it is ubiquitous and because it is a very easy way to get your kernel and device drivers loaded in the first place.
Cylinder
A concentric area around the disk spindle, spanning multiple sides (heads, platters).
Disk Addressing
A sector of the disk is identified by an ordered triple, consisting of cylinder, head, sector. Traditionally, cylinders and head numbering starts with zero, while sectors start with one. Most people think of the disk as being laid out in "row-major order". This means that the numbering goes in the following order; 0:0:1, 0:0:2, 0:0:3, and so on. Although the disk is laid out in three dimensions, it may help to think of it this way.

Another way of phrasing the order is that all the sectors are in order, then you proceed to the next head. After every head's set of sectors is the next cylinder. Physically, heads are aligned vertically, cylinders are concentric cylinders about the axis of rotation, and sectors are radial units that form a complete circle about the axis of rotation.

Disklabel
A bunch of data about a drive that tells Unix how to use the drive. Disklabel is used by FreeBSD, NetBSD, OpenBSD, Solaris and many other unixes.
EIDE
The more advanced form of IDE.
Extended Partition
One of the primary partitions can be marked as an extended partition, and the "extended partition table", essentially another partition table, is stored somewhere as the first sector of the hard partition which was marked extended. For some reason, you can only make one of these four new partitions point to an actual data-containing area. However, you can also have one of these four new partitions point to another extended partition, so in effect this forms a linked list that you can extend as much as you like.

Geometry Translation
Originally and still a kluge, this is a term for what is done by a drive controller BIOS to allow you to use large disks (over 512MB) using old mainboard BIOS routines, which speak in terms of CHS disk addressing. What I mean is that originally there were BIOSes that read from disk using supplied parameters which were packed into registers. Unfortunately, they weren't very forward-looking and didn't leave enough space for future drives. When the number of bits required to identify a cylinder (10) exceeded the number of bits provided by the BIOS, something had to be done. Well, there were 6 bits used to identify the drive head, and it was well-nigh impossible to change the BIOS interface at this point (curse backwards binary compatibility!). So the drive controller BIOS designers decided to emulate a disk with less cylinders and more heads. Thus, the controller BIOS translates a disk address using this ficticious geometry to the real drive geometry, usually using some quick bit shifts. As long as you ALWAYS use this ficticious geometry, and never change controllers, no big deal.

This is basically all pretty bogus since modern drives use variable density bit packing on the cylinders to ensure maximum storage capacity and low magnetic drift. The Macintosh low-density floppy drives did this in a rather crude manner (very cool of them). The geometry they report is already disconnected from reality, so don't put too much credibility in the whole mess.

IDE
IDE stands for "Integrated Drive Electronics", and it's also called ATA. IDE is brain-damaged and lame. A recent extension to IDE, called EIDE or ATA-2, attempts to come near the functionality that SCSI has had for years. I prefer SCSI.

By the time IDE controller designers add all the features of SCSI into (E)IDE (which they have already started doing), it's going to be even more complicated than SCSI. Besides all this, IDE has trouble coexisting with other drive types, and it is x86 I/O bus specific, making it difficult (but not impossible) to design other computer architectures to use IDE drives. One of its few advantages are that due to its overall simplicity, the overhead of setting up a command (controller latency) is much lower than SCSI, so you are going to have better access times. Oh yeah, they're also cheap, in more ways than one. On the downside, the on-disk buffer to controller speed in the best EIDE setup doesn't even come close to the bandwidth of Ultra-Wide SCSI.

LBA
LBA is an acronym for "Linear Block Addressing". This acronym was invented by IDE drive manufacturers to describe the method of addressing disk blocks that was independent of the disk geometry.
Magic Number
Forty-two ;-) Also, a special binary signature placed within a file or partition (usually at a fixed place), used to identify such a beast.
SCSI
SCSI stands for Small Computer Systems Interface - the One True Controller Type. SCSI is a real peer-to-peer kind of protocol, meaning you can do cool things like hook two machines up to the same bus with six other devices (disk drives, scanners, etc) shared between them. Some people and companies (Microsoft) claim SCSI is hard to set up. It is not true. It's just that SCSI can sling a ton of data around, and so it is usually set up to take advantage of things like DMA. If you're ever going to have more than one disk drive, or you want high performance, get SCSI.
Segment Notation
The x86 has a much-maligned property of being a segmented architecture. The xxxx:yyyy notation means you multiply the xxxx by a factor of 16, and add to the yyyy to get the physical address, in certain modes. Despite being dragged through the mud, segments can let you do pretty neat things like per-segment protection (rather than per-page), and checking array bounds in hardware. Nevertheless, it takes a long time to load segment descriptor registers (9 cycles, with potential hidden costs).
Track
A ring-shaped surface where a cylinder intersects the side of a side.