Another one of my assembler tryouts!
This little DOS thing allows the selection of different “config.sys” entries to chose from, while booting DOS. It does so by showing a boot menu (graphically) and allows to select an entry via mouse.
Nowadays this is a ridiculous software and people not from the DOS time will not even know what I am talking about or what use this may have.
I am not going to explain it :-)!
I will only say, this nice little config.sys driver came into being befor various operation system vendors offered a similar boot menu (which when they finaly did – looked awful compared to my version).
The program documentation is (as usual for the time) in German, I will give you the treat anyways:
Zuletzt editiert 05.02.1995 MAUS_SYS ! Ist das nicht ein toller Name für ein kleines Programm! Was macht MAUS_SYS? Nun, leider ist es inzwischen schon fast ueberfluessig geworden, (Allerdings nicht in dem Sinne wie man es wuenschen wuerde, mehr als je zuvor wird ein Mittel benoetigt einen PC mit verschiedenen Konfigurationen zu starten. Manche Programme MUESSEN EMS-Speicher haben, andere MUESSEN XMS-Speicher haben, einige VERBIETEN eine Sorte von Speichern, bei wieder andere darf kein Speicher-Manager geladen werden. Gelobt sei die wundersame vielfallt, die Allah dem Programmierern beschert hat...) denn jedes DOS-aehnliche Betriebssystem fuer den PC unterstuetzt inzwischen Auswahlmoeglichkeiten in der CONFIG.SYS Datei. MAUS_SYS ist eins von den vielen Programmen, die genau das gleiche machen, wie andere auch. Als ich anfing dieses Programm zu schreiben, gab es allerdings diese Moeglichkeiten, die die heutigen sogenannten Betriebssysteme bieten, noch nicht serienmaessig. (War wohl zu aufwendig fuer Mikrosoft, die hatten zu der Zeit damit zu tun das Problem zu loesen wie man Disketten in einem Rutsch kopiert, wenn man nur 4 MB Speicher zur Verfuegung hat. Vielleicht haben Sie sich auch Gedanken gemacht, wie man eine HELP Funktion so mit einer (in vielen Faellen) nicht erwuenschten Programmiersprache verbinden kann, dass diese nicht mehr voneinander zu loesen sind ... oder oder oder) Bei der Programmierung dieses Programms habe ich mal wieder festgestellt, wie schwierig es ist an Dokumentationen zu kommen. Man findet nur sehr sehr wenig darueber wie die DATEI 'config.sys' abgearbeitet wird. Kann mir uebrigens Jemand auch nur einen einzigen Grund nennen, warum Microsoft die Datei durch einen Parser bearbeiten laesst und Tokens fuer die Schluesselwoerter verwendet? Ganz zu schweigen von dem Gebrauch einer Checksumme fuer die geparste Datei? Ausser dem absichtlichen Verlust von Geschwindigkeit (der aber auch niemals auffallen wird) faellt mir kein Grund ein. Auch ueber das ach so kompatible Novell DOS kann man sich auslassen. Zumindest was die Bearbeitung der 'config.sys' Datei angeht hat sich Novell ganz und gar nicht an Microsoft gehalten. Bei denen wird die Datei so eingelesen und bearbeitet wie sie auf der Festplatte steht, eigentlich auch gar nichts gegen einzuwenden, aber bis man das erst mal wieder herausgefunden hat... Ich weiss gar nicht wie gross die 'config.sys' bei MS-DOS sein darf (hoechstens auf jeden Fall 64K aber das ist eher unwahrscheinlich), bei Novell DOS darf sie jedoch nur 8KB lang sein. (Ich weiss nicht, wann man eine sooo lange 'config.sys' benoetigt, aber wenn es noch nicht mal irgendwo erwaehnt wird, und man hat eine 'config.sys' die laenger ist, aergert man sich bei der Suche tot...) Wie eine Microsoft Maus funktioniert kann man noch relativ einfach herausfinden, ist mir schleierhaft, wieso es dazu Doks gibt und zu anderen nicht, sonst ist MS doch so ein scharfer Wachhund ... Wie dem auch sei, ich habe bis heute noch keine Doks irgendwo gesehen, die mir erklaeren konnten wie man andere Maeuse anspricht. (Ich meine ohne einen Maustreiber, da MAUS_SYS ja moeglichst als erstes in der 'config.sys' stehen sollte gibt es dort natuerlich auch noch keine Treiber die man ansprechen koennte) Fazit ist deswegen leider, dass man mit MAUS_SYS nur eine Microsoft kompatible Maus benutzen kann (und natuerlich die Tastatur). Viele Maeuse schalten intern beim ersten Start auf MS-Modus um, es kann also sein, dass eine Maus beim ersten hochfahren eines Computers nicht funktioniert, jedoch bei spaeteren hochfahren nach einem RESET) Ich bin gerne bereit andere Maeuse zu unterstuetzen, sobald mir Jemand eine Doku dafuer gibt. (Ich gebe zu so absolut heiss habe ich nicht danach gesucht, ICH habe ja eine MS-kompatible Maus, und eigentlich programmiere ich mehr fuer mich...) So, was macht dieses ominoese MAUS_SYS denn nun eigentlich? Mit Hilfe von MAUS_SYS kann man die 'config.sys' in verschiedene Abschnitte einteilen, und waehrend des Bootens einen Teil der gerade gewuenscht wird auswaehlen. Auf dem Bildschirm erscheinen zu diesem Zweck in VGA Aufloesung (640*480*16) verschiedene beschriftete Buttons, fuer jeden Abschnitt ein Button. (z.Z. begrenzt auf 10, kann aber wenn gewuenscht wird erweitert werden) Waehlt man diesen Button aus, per Maus oder per Tastatur, wird nur der Teil der 'config.sys' abgearbeitet, den dieser Button representiert. Mit Hilfe eines zweiten kleinen Hilfsprogrammes kann ein Parameter an die 'autoexec.bat' Datei uebergeben werden, diese laesst sich dann mit den bekannten Batch-Befehlen ebenfalls in entsprechende Abschnitte einteilen. Ach, so ihr wollt noch wissen wie das eigentlich funktioniert, sagt das doch gleich? Also, am einfachsten ein Beispiel: ******************************************* ************** config.sys ***************** ******************************************* 1: device=c:\dos\maus-sys.sys 2: rem ?start 3: rem ?ems-speicher 1 4: device=c:\dos\himem.sys 5: device=c:\dos\emm386.exe ram 4096 6: rem ?xms-speicher 2 7: device=c:\dos\himem.sys 8: rem ?end ******************************************* ************** config.sys ***************** ******************************************* Nun, wie jeder sehen kann ist das ein sehr kleines Beispiel. Das '?' wird als eine Art Sonderzeichen behandelt. Wenn MAUS_SYS geladen wird durchsucht es den Speicher nach der config.sys (irgendwohin muss DOS die ja hinladen ...). Wenn irgendwo in einer REM Zeile ein '?' steht, dann weiss das MAUS_SYS Programm ACHTUNG !!! jetzt kommt was fuer mich. Also, die Syntax. Alles was vor eine Zeile REM ?START (oben Zeile 2) steht wird bei jedem Booten ausgefuehrt. Ebenso alles, was nach einer Zeile wie REM ?END (oben Zeile 8) steht. Wie man schnell sieht, wird im obigen Beispiel maus_sys.sys immer ausgefuehrt. (logisch, sonst laueft das ganze ja nicht). An 'maus_sys.sys' koennen noch Parameter uebergeben werden, doch dazu spaeter. Die obige 'config.sys' ist in zwei Abschnitte eingeteilt. Der erste Abschnitt beginnt mit Zeile 3 3: rem ?ems-speicher 1 Diese Zeile ist eine REM Zeile, enthaelt ein Fragezeichen, steht nach 'rem ?start' und vor 'rem ?end'. Das bedeutet, das ein Menuepunkt mit dieser Zeile eingeleitet wird. Der Text der DIREKT auf das Fragezeichen folgt, wird in dem Button ausgegeben. Er repraesentiert also eine Art Ueberschrift. Der Text wird bis zum ersten SPACE bzw. bis zum Zeilenende ausgegeben. MS-DOS konvertiert die 'config.sys' Datei in Grossbuchstaben, der Text wird demzufolge auch in diesen ausgegeben. Unter Novell Dos wird der Text so ausgegeben, wie er in der 'config.sys' steht, mit Klein- und Grossbuchstaben. Die Zahl dahinter gibt den Wert an, der an die 'autoexec.bat' Datei uebergeben wird, dazu spaeter jedoch mehr. (Ein Wert zwischen 0 und 9) Diese Zahl muss mit GENAU einem SPACE von dem Text getrennt sein. Folgt keine Zahl, MUSS nach dem Text die Zeile abgeschlossen sein. Man kann diesen Parameter auch weglassen, dann wird per default die Nummer des Menue-Eintrages uebergeben. In diesem Fall also auch eine 1, der Parameter ist also redundant und koennte hier weggelassen werden. Ein Abschnitt in der 'config.sys' wird beendet, wenn ein neuer Abschnitt anfaengt, oder die 'rem ?end' Markierung ereicht wird. Der zweite Abschnitt im obigen Beispiel wird mit 6: rem ?xms-speicher 2 eingeleitet. Wenn jetzt waehrend des Bootvorganges der Menuepunkt 'EMS-SPEICHER' angewaehlt wird, werden folgende Zeilen der 'config.sys' abgearbeitet: 4: device=c:\dos\himem.sys 5: device=c:\dos\emm386.exe ram 4096 Natuerlich wird 'maus-sys.sys' auch abgearbeitet, jedoch merkt man spaeter davon nichts mehr, es geht KEIN Speicher verloren. Nach der Menueauswahl ist MAUS_SYS nicht mehr im Speicher. Es ist als ob vor device=c:\dos\maus-sys.sys ebenfalls eine REM gestanden haette. So, wie funktioniert jetzt die Parameteruebergabe an die 'autoexe.bat' Datei? Ganz einfach, wenn Sie schon einmal mit BATCH-Dateien gearbeitet haben. Es wird einfach 'get_err.exe' aufgerufen. Diese Datei gibt als ERRORLEVEL denjenigen Wert zurueck, den man hinter dem angewaehlten Menuepunkt angegeben hat (oder der entsprechende default Wert). Auf diesen ERRORLEVEL kann man mit den ueblichen BATCH Befehlen reagieren. Hier ein weiteres kleines Beispiel: ******************************************* ************* autoexe.bat ***************** ******************************************* c:\dos\get_err.exe IF ERRORLEVEL 2 GOTO xms IF ERRORLEVEL 1 GOTO ems GOTO not_installed :ems set comspec=c:\command.com set temp=c:\windows\temp PATH c:\DOS\;C:\; GOTO done :xms set comspec=c:\command.com PATH C:\;C:\DOS\;C:\WINDOWS\; c:\dos\mouse.com win : GOTO done :not_installed echo Keine gültige Auswahl ... :done ******************************************* ************* autoexe.bat ***************** ******************************************* Das wars. Ach, so noch was. Es gibt noch ein paar Parameter, die man uebergeben kann. Man kann die Parameter in beliebiger Reihenfolge angeben. Sie muessen durch mindestens ein Space getrennt sein. Sie muessen korrekt sein. Also: device=maus-sys.sys h h - hide Wenn dieser Parameter angegeben wird, wird das Menue NICHT angezeigt. Es wird per default IMMER der ERSTE Menueeintrag geladen. Es sei denn, es wird waehrend des BOOT-VORGANGS (bzw., wenn halt 'maus-sys.sys' gerade dran ist) die Taste 'CTRL' bzw. 'STRG' gedrueckt gehalten, dann erscheint wie gewohnt das Menue. Ich finde diese Option sehr praktisch, da sie erlaubt auf selten gebrauchte Konfigurationen relativ schnell zurueckgreifen zu koennen, ohne den stoerenden Effekt des 'immer das gleiche Auswaehlen muessen' zu haben. Uebrigens funktioniert das mit der Steuerungstaste auch umgekehrt. Wenn keine 'h' Option angegeben ist, und es wird dann waehrend des Bootens 'CTRL' bzw 'STRG' gedrueckt, erscheint gerade KEIN Menue und es wird der erste Eintrag bearbeitet. device=maus-sys.sys s s - show Der entsprechend umgekehrte Parameter. Eigentlich ueberfluessig, da wenn die Option 'h' nicht angegeben wird 's' sowieso angewaehlt ist. device=maus-sys.sys 1 1 - COM-Port 1 Die Maus wird am COM Port 1 erwartet. (default) device=maus-sys.sys 2 2 - COM-Port 2 Die Maus wird am COM Port 2 erwartet. device=maus-sys.sys 3 3 - COM-Port 3 Die Maus wird am COM Port 3 erwartet. device=maus-sys.sys 4 4 - COM-Port 4 Rate mal ... device=maus-sys.sys d d - debug Eigentlich fuer Benutzer uninteressant. Da man keine Debugger beim Booten hat, musste ich selber zumindest einen kleinen Speicherangucker programmieren. Er nimmt nicht viel Platz weg und es ist ganz lustig sich mal im Computer umzusehen, wenn er noch ganz jungfraeulich ist. Eine kleine Hilfe gibt es mit der Taste 'h' Es wird zweimal in den Debug Mode gesprungen, einmal vor Veraenderung der 'config.sys' einmal nach der Veraenderung. device=maus-sys.sys a=xxxx a - adresse Mit diesem Parameter kann ein Anfangs-Segment zum Suchen der 'config.sys' im Speicher angegeben werden. 'xxxx' ist eine 4 stellige hexadezimal Zahl. Mit a=8800 wird der Speicher ab Segment 8800h nach der 'config.sys' durchsucht. Per default is a=8000 eingestellt. Wenn wieder Erwarten keine 'config.sys' gefunden werden sollte, koennte man versuchen mit diesem Parameter an einer anderen Speicherstelle zu suchen. Als erstes sollte man allerdings mit Hilfe der 'debug' Option den Speicher durchforsten. device=maus-sys.sys v v - verbose Gib nach der Bearbeitung der 'config.sys' mal aus, was so geschehen ist. device=maus-sys.sys ux u - use config Nummer Im Speicher befinden sich manchmal mehere 'config.sys'. Aus welchen Gruenden auch immer. Per default wird immer die erste im Speicher gefundene 'config.sys' veraendert. Sollte das aus irgendeinem Grunde nicht klappen. so koennte man mit device=maus-sys.sys u2 angeben, dass die zweite im Speicher befindeliche 'config.sys' genommen werden soll. Ich habe im Speicher schon andere 'config.sys' gesehen. Bei mir klappte es aber immer mit der Ersten. Fuer 'x' koennen Werte von 1 bis 9 uebergeben werden. Bevor dieser Parameter verwendet wird, waere es ratsam den Speicher mit 'debug' zu durchsuchen. Wenn sich nur zwei 'config.sys' im Speicher befinden, und es wird fuer 'x' der Wert 3 angegeben wird wieder die erste 'config.sys' genommen. Wenn der Speicher einmal ganz durchsucht wurde, beginnt die Suche wieder von vorne, bei Segment 0000. Ich hoffe ich habe niemand mit diesen Optionen abgeschreckt. Die meisten braucht man eh nicht, oder sind einfach nur Spielereien. Die einzigen wichtigen Parameter sind 'h' fuer hide und die Nummer des COM-Ports, alle anderen kann man getrost wieder vergessen. Wenn man die braucht, funktioniert MAUS_SYS wahrscheinlich eh nicht richtig. In dem Fall waere ich fuer eine Benachrichtigung dankbar, dann kann ich mich auf Fehlersuche begeben. Ausserdem wird mit dem Programm ja auch der komplette Sourcecode herausgegeben, so dass jeder auch selbst ein bisschen damit herumspielen kann. Sonstiges: - Grafikkarte MUSS eine VGA Grafikkarte sein - erst ab MSDOS 4.0 lauffaehig - man kann auch per Tastatur die Menuepunkte anwaehlen, mit jeder Taste eins weiter gehen, mit RETURN bestaetigen - wenn nur RETURN gedrueckt wird, wird der erste Menuepunkte angewaehlt - Memmaker oder aehnliche Programme wie z.B. Optimze vom Qemm werden NICHT zusammen mit MAUS_SYS arbeiten, jede Konfiguration muss leider einzeln optimiert werden - QEMM's DOSDATA.SYS wird korrekt behandelt (hoffentlich, zumindest soweit ich in der Lage war es zu testen...) MAUS_SYS.SYS erkennt automatisch, ob es bereits einmal aufgerufen wurde. Ist dies der Fall, so wird die zuvor getroffene Auswahl benutzt. Bemerkbar wird eine doppelte Ausfuehrung allerdings an den Einspruengen in den DEBUG Modus. Bei doppelter Ausfuehrung, wird insgesamt 3 Mal in den Debug-Modus gesprungen. - Weiteres Problem mit DOSDATA.SYS (Qemm Version 7.02+) in zusammenhang mit DOS=LOW Ab Version 7.02 kann es passieren, dass beim booten des Rechners haengen bleibt, bzw. abstuerzt. Dies kann man mit einem undokumentierten Parameter fuer DOSDATA.SYS abstellen, dieser haengt allerdings von der verwendeten DOS-Version ab, und ob man Kompressionsprogramme einseaetzt. DOS 5.x /INITBASE=1101 DOS 6.x /INITBASE=1101 DOS 6.x mit Stacker /INITBASE=1A01 DOS 6.x mit DoubleSpace /INITBASE=1201 Dieser Parameter gibt nur einen Naeherungswert an, DOSDATA.SYS wird sich automatisch auf den genauen Wert ausrichten. Falls diese Werte nicht funktionieren sollten, kann man diese auch mit folgender Prozedur selber herausfinden. 1. Fuegen Sie der DEVICE=c:\qemm\DOSDATA.SYS den undokumentieren Parameter /REPORT hinzu und starten Sie Ihren Computer mit DOS=HIGH. Notieren Sie sich den Wert den DOSDATA.SYS Ihnen ausgibt. 2. Addieren Sie zu diesem Wert 0a00h (hexadezimalzahl) 3. Verwenden Sie diesen Wert fuer /INITBASE=xxxx /INITBASE wird von QEMM 7.03 und 7.03 benoetigt, spaetere Versionen benutzen diesen Parameter vielleicht nicht mehr. Das ganze config.sys Umschalt-Gedaeh habe ich aus der DOS Zeitschrift entnommen, und abgeaendert (sehr abgeaendert z.T.). Die Informationen bzgl. QEMM und DOSDATA habe ich den Dokumentationen zu BOOT.SYS(SHAREWARE) entnommen. Ein hervorragendes Programm um verschiedene 'config.sys's zu benutzen. Wahrscheinlich wesentlich besser als MAUS_SYS, allerdings ohne 'schoene' Grafik und ohne Maus, das ist der eigentliche Grund, warum ich MAUS_SYS noch geschrieben habe. Ich moechte jedoch ausdruecklich erwaehnen, dass NICHTS von BOOT.SYS von mir verwendet wurde Die Grafik-/ und Maus-Routinen sind auf meinem eigenen Mist gewachsen (habe keine Unterlagen finden koennen). So endgueltig bye Malban PS. Das Programm ist PUBLIC DOMAIN. Also ist es zumindest das preiswerteste auf dem Markt ...