om For some reason I was not kicked off this list for being a flamer.
I was in a praticularly non-productive mood that day and tore into everyone because of the obvious lack of design talent... This time I have decided to take the opportunity to contribute my design talent as it is the only thing I have to offer cuz I can't code worth squat.... =\ The remainder of this posting will attempt to convey an aditude and methodology for designing a truly good DOS and then apply that in the form of a design outline for a DOS that definitely won't suck. om -- A Randian Perspective. The philosopher Ayn Rand, in her work "The Fountainhead" explored how orrigional works compare to "second handness". The message being that copying something is like diluting it... It becomes worse in the process. FreeDos is currently at the level of MS-DOS 5.0 and will be stuck there eternally unless it can be re-invented from the beginning. So to write the best possible DOS we must design it from scratch! This may be a bit difficult to swallow as DOS has been set in stone for more than a decade now... Still, I mean exactly what I say, for DOS to be preserved for the future it must be completely re-designed from the beginning! To do this properly we must understand what DOS does and why it was made that way and then extrapolate those same motives into the present day. The best question to start out with is "What does DOS add to a computer?" A machine such as an Apple II can work just fine without an OS. The user inserts his program disk and his data disk and then carrys out his task. What the Disk Operating System does is allow a single disk to hold many programs and many files of data and it gives the user the ability to manipulate and use all of these. Furthermore, as a requirement for both running on machines with 128k of RAM and for usability, the software which does this should be as simple as possible. Today given an 800MHZ FSB Pentium IV the problem is to design a program that will run on this machine and facilitate the managment of programs and data. How do we do this? intel's (sic) refferance manuals tell us that real-mode is obsolete and thet all new software should be written for protected mode. We also require that our "DOS 2003" support a majority of the applications (but not utilities!) written for classic DOS. Our challenge is, then, to write the world's first easy-to-use 32-bit OS. I say first because every other so-called 32-bit OS is a gawdawful monstrosity. (especially linux!!!!) Since we also want this to be a free OS we immediately set-asside the propriatary compilers used to this point in the project and switch to OpenWatcom. Because we want our OS to be good rather than bad we decide to support open standards such as the MultiBoot specification. Our kernel, therefore, will be a 32-bit Linear Executable that includes a multiboot header. DOS showed us a very good way to organize a kernel into BIOS extension drivers and the primary server. We know that our BIOS extension driver will need to support the classic floppies, ATA hard drives, and ATAPI removable media. We know that it will need to support the real time clock, and the most recient standards for the legacy IO ports... ( such as EPP paralell ports...) Because we are writing this in 2003 instead of 1983, we implement a modern hardware detection algorithm and attempt to detect hardware through ACPI, failing that we look for PnP structures and, as a last resort, we assume we are on purple-book compliant hardware. (It has taken me many years to discover this hardware detection algorithm!) Because newer machines, such as the one sitting next to me, has as many as 24 interrupt lines-- a great deal more than the classic 15!!! we need to implement a driver architecture which facilitates the allocation of IRQ lines. We can also design this layer so that users can link in additional drivers such as network-boot options should such be necessary. The primary driver interface, however, will be through a variant of Config.Sys because this solution has proven itself to be the simplest way for users to install additional drivers and features. The machine I mentioned above also has two CPUs. ;) as a good Operating system, we should provide some type of processor device extension that will cover both SMP and co-processor architectures such as modern graphics cards... With the basic hardware detected, and with all CPUs running, we need to determine what features we wish to add into our kernel. First, we should add a new binary format. In addition to .com, and .exe, we should add .le (the primary output of our watcom compiler, and use this .le format as our standard for new software. Because we are writing this entire thing in protected mode, we can add as many features as we like. In this case we look at what a typical DOS user will load in his config.sys and autoexec.bat and include these, as standard, in the kernel. Here are the config files streight from this 486: --- BEGIN CONFIG.SYS --- ; DEVICE=C:\CTCM\CTCM.EXE ''''''''''''''''' This program is a plug and play utility which is sometimes useful in configuring my sound card. As I mentioned above, plug-and play should be one of the primary hardware detection algorithms. In addition, there should be a USB driver framework which maps all USB devices to: USBA001 ( which means USB hub "A" device 001") '''''''''''''''' DEVICE=C:\QEMM\QEMM386.SYS RAM BE:N DEVICEHIGH=C:\QEMM\QDPMI.SYS '''''''''''''''' These are the files of QEMM 9.0. They provide the following interfaces: LIM EMM 4.0 VCPI -- some version; I'll have to check... DPMI 0.9 and Extended memory. They also provide services for device drivers that compensate for hardware paging: VDS (Virtual DMA services). All of these and DPMS -- A driver interface, should be standard in the kernel. A complete set of DPMS (or other 32-bit standard) drivers should be provided... '''''''''''' FILES=60 BUFFERS=20 '''''''' These statements relate to 16-bit DOS. Because we are writing this for 32-bit mode and have access to the "Vector" container class in C++ we can easily write the OS to support unlimited files streight out of the box. ''''''''''' DOS=HIGH,UMB DOSDATA=UMB LASTDRIVE = Z '''''' Wouldn't it be a great improvment to make these un necessary? I THINK SO!!!! ''''''''' DEVICEHIGH=C:\DRIVERS\CMD640X.SYS /A33 /L '''''' This is an extended driver for the hard drive controller. Our DOS should use a high-performance 32-bit driver architecture.... ''''''''''' DEVICEHIGH=C:\DRIVERS\ECP300.SYS ''''''' This supports the extended paralell port. ''''''' DEVICEHIGH=C:\DRIVERS\DAISY111.SYS ''''''' Frankly, I don't know what this does. (it is a part of the driver for the multi-IO card...) '''''' DEVICEHIGH=C:\SB16\DRV\CTSB16.SYS /UNIT=0 /BLASTER=A:220 I:5 D:1 H:5 DEVICEHIGH=C:\SB16\DRV\CTMMSYS.SYS '''''''' A truly modern DOS will support most AC'97 chipsets and provide sound-blaster emulation. I am fortunate enough to have a hardware MPU-401 MIDI module though software emulation will probably be the technique of choice on most systems.... ''''''''''''''' DEVICEHIGH=C:\DRIVERS\ch_ide.SYS /D:CH_CDROM ''''''''''''''' This is the CD-ROM driver... Since most everybody uses them these days, it should be a basic part of IO.sys and be configured in such a way to allow CD-ROM booting.... '''''''''''''' DEVICEHIGH=C:\DOS\ANSI.SYS '''''''''''''' This should be standard in IO.sys. _ALL_ DOS packaged utilities should assume a PC-ASCII/ANSI terminal and be compatible with use on both the standard CON device as well as the AUX device. (one should be able to connect a color dumb terminal to his PC and still be able to use _ALL_ standard DOS utilities. '''''''''''''' DEVICEHIGH=D:\WINDOWS\IFSHLP.SYS ;device=c:\dos\interlnk.exe ''''''''''''' These are interesting because they relate to so-called "installable file systems". This is an extemely powerful though poorly implemented system in DOS. I think the current implementation should be scrapped and a "FSCHAIN" system should be installed instead. This will involve a convention whereby each file system will examine each logical volume as it is inserted into the machine and automaticly detect the filesystem. It should also provide a system for registering volumes at runtime... Thes mechanism should replace all previous designs... ISO-9660 should be supported by the kernel as well as a HPFS-32 as the primary fixed-disk filesystem. ( HPFS is an enhancment of FAT which places the file allocation tables in the middle of the physical device so that the head doesn't have to seek nearly as far to reach it...) Because we are designing DOS rather than copying it, we can also make other enhancements such as the one mentioned in "Undocumented DOS" that involved a tweaked filesystem with a non-fixed root directory. Because we are designing from scratch, we will need to provide an equivalent of Norton Utilities for the new filesystem architecture... ''''''''''''''''' @echo off SET CTCM=C:\CTCM D:\WINDOWS\net start ''''''''''''''''' This last line configures Windows networking.... We should design a standard packet interface that is compatable with the widest variety of DOS applications and interface well with windows 3.11... We should therefore modify windows 3.11 to be compatible with our network interface... ''''''' prompt $p$g '''''''''' This is actually a default with my DOS but sometimes I use this line to change the color of the prompt and such. ;) ''''''''''' SET SOUND=C:\SB16 SET BLASTER=A220 I5 D1 H5 P330 T6 rem C:\CTCM\CTCU /S /W=D:\WINDOWS SET MIDI=SYNTH:1 MAP:E SET TEMP=D:\TEST SET E=/S '''''''''''''' I love E! It is the best text editor in the universe! It even has built-in C macros! =) (E is the standard editor for IBM PC-DOS 7.0) ''''''''''''' PATH C:\DOS;C:\RES;C:\QEMM;D:\WINDOWS;e:\bc45\bin;e:\tasm\bin lh C:\DOS\MSCDEX.EXE /D:CH_CDROM /M:20 /E smartdrv ''''''' This is another function that should be standard to the kernel. A part of the high performance filesystem should include caching and disk scheduling.... It sohould also be noted that to support multitasking properly that share.exe and windows 3.11 Vshare.386 should also be a standard part of the kernel... These file locking mechanisms can sometimes be annoying so there should be a way for programs to make "soft locks" such as how netscape's composer extension will not lock the webpage being edited so that I can load the page in both netscape _AND_ E at the same time where netscape will, through vshare386, be notified whenever E writes a new version of the file and offer to reload it.... ''''''''''''' mode con:lines=50 mode con:rate=30 delay=1 lh keyb dv,,c:\drivers\dvorak.sys ''''''''''''' DVORAK rules! AOEU HTNS!!! =) ''''''' lh mouse /Y ''''''' This should be a kernel level service using the COMn or PS-AUX device in IO.sys. ''''''''' C:\SB16\DIAGNOSE /S C:\SB16\SB16SET /P /Q lh C:\DOS\DOSKEY.COM ''''''''''''''''''' Because we have a very large ammount of memory available for our shell, there is no reason not to streamline things by integrating doskey into it.... WINDOWS 3.11 I've already said quite a bit but I want to close with a note about Windows 3.11. It is a truly suckey OS but, neverthe less, it is still much much better than linux because it is fairly streight forward to modify. Because we are changing so much of the orrigional DOS architecture we will need to make extensive modifications to windows 3.11. These changes should involve replacing all of the relevant "VxD"/.386 drivers with ones designed for the new DOS. For example the DOSX.386, that implements preemptive multitasking on-top-of DOS should be replaced that one that uses the multitasking functions of our DOS and supports full VESA mode-switching and everything... -- Testimonial: I wasted 2,000 hours using Linux. http://users.rcn.com/alangrimes/ ==^================================================================ This email was sent to: [EMAIL PROTECTED] EASY UNSUBSCRIBE click here: http://topica.com/u/?b1ddyi.b3hwCs.YXJjaGl2 Or send an email to: [EMAIL PROTECTED] TOPICA - Start your own email discussion group. FREE! http://www.topica.com/partner/tag02/create/index2.html ==^================================================================
