Software: Maus-sys.sys

Bildschirmfoto 2016-01-05 um 17.39.39

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:

UTILS.ZIP

 

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 ...

Leave a Reply

Your email address will not be published. Required fields are marked *