©Copyright Peter Kan
MINNESHANTERING
PETER KAN
©Copyright Peter Kan
INLEDNING
Vi inriktar oss på att göra minneshantering på DOS 5.0 bas, men
grundläggande är kunskapen densamma på högre versioner av DOS.
DOS 6.X skiljer sig något från DOS 5.0, i bland annat följande avseenden:
DOS 6.X har ett hjälpmedel för minneshantering, nämligen
MEMMAKER, men en PC-tekniker gör minneshanteringen lika bra
”manuellt”, ibland kanske bättre.
DOS 6.X presenterar MEM /C annorlunda.
DOS 6.X med MEMMAKER talar om var och när TSR skall
laddas.
I DOS 6.X kan man ha olika uppstartsalternativ, hoppa över delar av
CONFIG.SYS och AUTOEXEC.BAT eller helt kringgå startfilerna.
Varför skall man bry sig om minneshantering?
Undvika krockar, såväl mjuk som hårdvara.
Utnyttja minnet helt.
Optimalt resursutnyttjande.
Ge plats för program (IBM-missen!!).
©Copyright Peter Kan
HISTORIA
I juni 1978 skapades 8086-processorn som blev den första
processorn i INTEL-familjen. 8086:an var en 16/16-bitars processor (se
tabell 1) med 20 adressben vilken kunde adressera till den ”fantastiskt”
höga minnesarean 1MB (se tabell 2). Detta ansågs som en ouppnåelig
gräns.
8086 kördes i Real mode, vilket innebär att max 1MB minne kan
användas.
Skapandet av ett operativsystem sattes igång och DOS 1.0 kom till
världen. IBM reserverade rutiner för BIOS, grafikhantering m.m. (ROM) i
de övre 384kB, kvar återstod 640kB för DOS.
Nu började alla programtillverkare att skapa program till PC under dessa
rådande förutsättningar. Ingen anade att en gräns skulle nås. Men när
kalkylprogrammen började dyka upp, förstod man att 640kB inte skulle
räcka till. Lösningen blev minnesexpansionskort.
Lotus, Intel och Microsoft gick samman (L-I-M) för att enas om en
standard för att kunna hantera detta expanderade minne.
Resultatet blev minneshanteraren EMM.
Det expanderade minnet kallas EMS-minne.
©Copyright Peter Kan
Tabell 1.
Mikroprocessor
Bitar
Megabyte
Adressben
8086
16/16
1
20
8088
8/16
1
20
80286
16/16
16
24
80386SX
16/32
16
24
80386
32/32
4096
32
80486SX
32/32
4096
32
80486
32/32
4096
32
PENTIUM
32/64
4096
32
Bitar - Extern/Intern databuss.
<<Se The Hardware Bible för mer info!>>
Tabell 2.
2
4
8
16
32
64
128
512
1024
2048
4096
8192
16384
32768
131072
262144
524288
1048576
2097152
4194304
8388608
X
X
20 Adressben > 1.048.576 d.v.s. 1MB
24 Adressben > 16.777.216 d.v.s. 16 MB
©Copyright Peter Kan
RAMMINNE
Alla delar av stapeln hanteras olika
och det är programvaran som
bestämmer vilket minne man har
behov av.
Det finns ingen generell regel.
Det reserverade minnet var från
början enbart avsett för hårdvara men
genom minneshantering så kan vi
numera adressera delar av det
reserverade minnet för mjukvara.
XMS = EXTENDED MEMORY SPECIFICATION - UTÖKAT MINNE
EMS = EXPANDED MEMORY SPECIFICATION - EXPANDERAT MINNE
HMA = HIGH MEMORY AREA - HÖGA MINNET
UMB = UPPER MEMORY BLOCK - ÖVRE MINNES BLOCK
©Copyright Peter Kan
ADRESSERING AV MINNE
DOS använder sig av
segmentadressering.
Segmentet A000 innefattar den
fysiska adressen A0000 till A000F.
Detta betyder att varje segment är
16B (0 till F Hex. = 0 till 15 Dec.).
A000 till AFFF = 16*16*16 = 4096
4096*16B = 65536B = 64 kB
(65536B / 1024 = 64kB)
Det går med andra ord inte att specificera en exakt
minnesadress.
©Copyright Peter Kan
HIMEM.SYS
Vi börjar med HIMEM.SYS. Vad gör HIMEM.SYS?
Tar 64kB över 1024kB-gränsen och skapar HMA.
Tar allt minne över 1088kB och gör tillgängligt för program som följer
standarden för XMS-minne.
När HIMEM.SYS installeras i CONFIG.SYS så står det bl.a. vid uppstart:
Installerad A20 Handtagsnummer 1
64kB i det höga minnesområdet är tillgängligt.
A20 syftar på att adresslinje nummer 20 i processorn är åtkomlig för DOS.
Det är via den som HMA är åtkomlig, för DOS.
64kB är storleken på HMA.
Ibland funkar HIMEM.SYS inte så bra på vissa maskiner (t.ex. vissa
bärbara Toshiba, PS/2, m.m.). Man kan då starta HIMEM.SYS med
följande parameter:
/ Machine:[m]
[m] = maskintyp (se VIKTIGT.TXT i DOS).
/ Cpulock:ON Om datorn ändrar hastighet vid installation av
HIMEM.SYS kan man komma tillrätta med
problemet genom detta kommando. HIMEM.SYS
kommer att arbeta långsammare.
WINA20.386
Installationsprogrammet för DOS lägger en fil med namnet WINA20.386 i
rotkatalogen på hårddisken. Denna fil hanterar eventuella konflikter som
kan uppstå när DOS och WINDOWS (i avancerat läge) försöker komma åt
HMA samtidigt.
©Copyright Peter Kan
EMM386.EXE
Minnesoptimering - Utnyttja de ej använda delarna i det
reserverade minnet.
Detta gick inte i tidigare DOSversioner men DOS 5.0 (1991) öppnade
denna möjlighet.
EMM386 kan öppna det reserverade minnet 640kB till 1024kB.
Tidigare användes EMM386.EXE enbart till att skapa expanderat minne.
EMS-minne
När 640kB-gränsen var nådd,
kunde man installera ett minne
via ett expansionskort - EMS-
minne. Man installerade då en
minneshanterare som använde
segmentadresserna D000-
DFFF för att skapa ett fönster
mot EMS. På detta sätt kunde
man komma åt minnet på
expansionskortet (se bild).
EMS är emellertid ett mycket
långsamt minne då all information måste passera genom ett 64kB fönster,
och eftersom minneskapslarna nås via den externa bussen.
Idag används inte tekniken med expanderat minne men en del programvara
kräver ibland expanderat minne. Då kan man skapa ett emulerat EMS-
minne i det utökade minnet genom att använda EMM386.EXE.
©Copyright Peter Kan
XMS-minne
Det minne som vi idag installerar i våra datorer, med DIP, SIP
eller SIMM (vanligast) installeras på moderkortet. Den del som lägger sig
ovanför 1MB gränsen kallas för det utökade minnet - XMS-minne.
UMB
Om man laddar in drivrutinen utan några parametrar så skapar
EMM386.EXE ett fönster mot ett emulerat EMS-ram. Vill man ha både
EMS- och UMB använder man sig av tillägget <RAM>, men vill man bara
ha UMB och inget EMS-minne använder man tillägget <NOEMS>.
Det går alltså att ladda EMM386.EXE på tre olika sätt:
1. Utan tillägg, emulerar EMS-minne.
DEVICE=EMM386.EXE
2. Med tillägget <RAM>, emulerar EMS-minne och skapar
UMB.
DEVICE=EMM386.EXE RAM
3. Med tillägget <NOEMS>, skapar UMB.
DEVICE=EMM386.EXE NOEMS
Detta fungerar givetvis endast om först HIMEM.SYS är laddat.
DEVICE=HIMEM.SYS
©Copyright Peter Kan
INCLUDE OCH EXCLUDE
Vissa delar av det övre minnet är reserverat av VIDEO ROM och
RAM samt av BIOS ROM, men det går att ta tillbaka (inkludera) vissa
delar som systemet inte har behov av. Segmenten mellan CC00 och DFFF
får man när man laddar EMM386.EXE NOEMS.
Om man använder VGA grafik så behöver man exempelvis inte rutiner för
MDA eller HERCULES som har segmentadress B000-B7FF(se bild).
Om man vill ta tillbaka
MDA/HERCULES-blocket så
skriver man ”I=” sen första och
sista adressen på blocket åtskiljt
av ett skiljetecken, när man
laddar in EMM386.EXE
NOEMS.
DEVICE=EMM386.EXE
I=B000-B7FF NOEMS
Vill man även ta tillbaka
blocket för 8514/A (IBM
grafikstandard) Lägger man
bara till I=C800-CBFF.
Kommandoraden kommer då att
se ut som följande:
DEVICE=EMM386.EXE I=B000-B7FF I=C800-CBFF NOEMS
EMM386.EXE NOEMS tar automatiskt tillbaka CC00-DFFF och det
hänger med även vid en inkludering. Ibland anges ledigt från C800 istället
för CC00. Detta syns då EMM386.EXE laddas in.
Ibland vill man installera ett kort, t.ex. nätverkskort i sin dator. Detta kort
kan vilja uppta en viss minnesadress och då måste man exkludera denna
för att inte få en konflikt. Om man installerar t.ex. ett GeniLan-kort mod.
E1166C och vill ha reda på var den "lägger" sig så skriver man IPX /I för
information om kortet.
©Copyright Peter Kan
Informationen som visas på skärmen kan då se ut som följande:
Novell IPX/SPX v3.10 (911201)
© Copyright 1985, 1991 Novell Inc. All Rights Reserved.
LAN Option: GeniLAN E-1166C v1.0 (911201)
Hardware Configuration: IRQ=5, IOBase=300h, MemBase=CC00h, no DMA
MemBase=CC00h betyder att minnesadressen börjar vid CC00
hexadecimalt. Normalt upptar ett nätverkskort 16kB vilket leder till att
slutadressen blir CFFF. Man får då komplettera EMM386.EXE med en
exkludering på adressen CC00 till CFFF. Man skriver ”X=” sen första och
sista adressen på blocket åtskiljt av ett skiljetecken, när man laddar in
EMM386.EXE NOEMS.
EMM386.EXE kommer då att se ut som följande med de tidigare
inkluderingarna:
DEVICE=EMM386.EXE I=B000-B7FF I=C800-CBFF X=CC00-CFFF
NOEMS
Det finns mer att plocka, men det är upp till användaren att se vad som
behövs eller inte. Har man en PS/2, använder man inte VGA etc.
Observera att inkluderingar inte får överlappa, därför anges sista
segmentadressen i blocket istället för första adressen i nästkommande
block.
Ibland kan man få ta tillbaka lite (32kB) av BIOS (F000-F7FF), men det
är bara på vissa maskiner. Tänk på skuggningen om du tar tillbaka RAM så
den inte skuggar ett för stort block från BIOS.
©Copyright Peter Kan
DOS
När man nu har öppnat möjligheten att använda det övre minnet,
så måste man förbereda DOS för att skapa övre minnesblock (UMB) i det
övre minnet. Detta gör man genom att lägga till följande rad i
CONFIG.SYS:
DOS=UMB
Man kan även flytta en del av DOS från det konventionella minnet till
HMA, och på så sätt frigöra ungefär 50kB. Detta gör man genom att lägga
till följande rad i CONFIG.SYS:
DOS=HIGH
Vi kan även skriva dessa båda kommandon på samma rad:
DOS=HIGH,UMB
©Copyright Peter Kan
DEVICEHIGH OCH LOADHIGH
Nu kan man ladda in de drivrutiner och minnesresidenta program
som man vill ha, i det övre minnet. Drivrutiner laddar man i CONFIG.SYS
genom att skriva ”DEVICE=” men vill man ladda dem i UMB så måste
man skriva ”DEVICEHIGH=”.
Låt oss säga att man vill ladda ANSI.SYS i det övre minnet. Före
minneshantering såg raden ut som följande:
DEVICE=C:\DOS\ANSI.SYS
Kommandoraden kommer att ha följande utseende efter det att man laddar
den i UMB:
DEVICEHIGH=C:\DOS\ANSI.SYS
Nu kan man fortsätta på samma sätt med resten av drivrutinerna i
CONFIG.SYS.
Observera att när man laddar upp i det övre minnet så läggs drivrutinerna i
det största sammanhängande blocket. Man bör med andra ord lägga den
största drivrutinen först, i den mån det är möjligt.
När vi laddar våra minnesresidenta program (TSR) i AUTOEXEC.BAT till
det övre minnet så skriver vi LOADHIGH.
Låt oss säga att man vill ladda DOSKEY i det övre minnet. Före
minneshantering såg raden ut som följande:
DOSKEY
Kommandoraden kommer att ha följande utseende efter det att man laddar
den i UMB:
LOADHIGH DOSKEY
eller förkortat:
LH DOSKEY
Nu kan man fortsätta på samma sätt med resten av de minnesresidenta
programmen(TSR) i AUTOEXEC.BAT.
©Copyright Peter Kan
Se över CONFIG.SYS och AUTOEXEC.BAT
När man har laddat rutiner i det höga minnet och allt fungerar,
så är minneshanteringen inte över.
Man bör dels ta bort eller minska onödiga och minneskrävande rader i
CONFIG.SYS och AUTOEXEC.BAT och dels bör man snabba upp
systemet med Cache och skuggning av BIOS.
Man bör känna till:
FILES tar ungefär 53B för varje fil (Med Windows Rek. FILES=30 annars
Rek. FILES=20)
BUFFERS tar ungefär 532B för varje buffert (Med SMARTDRV
installerad Rek BUFFERS=10-20)
Hårddiskstorlek
Antal Buffertar
Buffertstorlek i byte
<40MB
20
10640
40-79MB
30
15952
80-119MB
40
21264
>120MB
50
26576
BUFFERS kan anges med två värden. Det första värdet är antal buffertar,
det andra värdet (Intervall 1-8) är antalet read ahead-buffertar, d.v.s hur
många sektorer av en fil som DOS skall läsa för att snabba på kommande
läsningar från samma fil.
LASTDRIVE tar ungefär 80B för var enhetsbokstav efter E.
©Copyright Peter Kan
SHELL=C:\DOS\COMMAND
.COM
Kommandot SHELL= definierar kommando-tolken (Vanligast
COMMAND.COM) som skall användas vid DOS-starten. SHELL
definierar sökväg till kommando-tolken och modifierar storleken på DOS-
miljön. I regel ligger COMMAND.COM i rotkatalogen men vill man
använda en annan kommandotolk eller om man har kommandotolken på
annat ställe så måste man avända kommandot SHELL=.
Ex.
SHELL=C:\DOS\COMMAND.COM C:\DOS /P /E:1024
De övriga parametrarna talar om:
C:\DOS - - - Var dos hittar kommandotolken om delar av den
måste laddas om.
/P - - - Kopian av kommandotolken blir permanent
(Huvudkopia).
/E:1024 - - - RAM-storlek som allokeras till miljövariabler.
Detta kommando skriver man i CONFIG.SYS.
DOS-miljö är en area i minnet som DOS sätter upp vid starten och
använder för att lagra systemvariabler (miljövariabler).
T.ex.
PATH Lagrar de aktuella sökvägarna enligt det senaste
PATH-kommandot.
PROMPT Lagrar systemets prompt enligt det senaste
PROMT-kommandot.
APPEND Lagrar sökvägarna enligt det senaste APPEND-
kommandot om man har skrivit APPEND /E i
AUTOEXEC.BAT.
©Copyright Peter Kan
COMSPEC Lagrar sökvägen till kommandoprocessorn
COMMAND.COM (eller annan) så som den
är angiven i SHELL-kommandot (om detta finns).
DOS-miljön ligger i det
konventionella minnet, mellan
DOS-kärnan (som innehåller
en resident del av
COMMAND.COM) och de
minnesresidenta TSR-
programmen (som t.ex. PRINT,
DOSKEY, KEYB).
Förutom den alltid residenta
delen av COMMAND.COM,
finns det också en transient del
av COMMAND.COM.
Denna del kan skrivas över av användar programmen och måste då på nytt
läsas in i minnet efter det att användarprogrammen har avslutats. Då den
transienta delen av COMMAND.COM skall läsas in i minnet, letar DOS
efter sökvägen i DOS-miljön, som kan anges med variabeln COMSPEC.
DOS kan inte expandera DOS-miljön efter det att minnesresidenta program
har laddats in. Därför måste man vid DOS-starten i SHELL-kommandot
ange ett tillräckligt stort utrymme.
©Copyright Peter Kan
SMARTDRV
Vad gör
SMARTDRV?
SMARTDRV skapar en
CACHE-buffert i RAM
och när man laddar in filer
och program från
hårddisken så kopierar den
använda delar till RAM
och på så sätt ”lurar” SMARTDRV systemet att RAM(XMS) är
hårddisken, så nästa gång som man laddar in samma fil så hämtas den ifrån
RAM-minnet. Det finns följaktligen både läs och skriv-cache.
Cachen töms till hårddisken vid ledig tid och om man skulle vara tvingad
att avsluta WINDOWS med <CTRL> + <ALT> + <DEL>.
Cachebuffertens storlek är olika vid olika stort utökat minne, men det finns
standardvärden:
Utökat minne
InitCacheStorlek
WinCacheStorlek
Upp till 1 MB
Allt utökat minne
Noll
Upp till 2 MB
1 MB
256 kB
Upp till 4 MB
1 MB
512 kB
Upp till 6 MB
2 MB
1 MB
6 MB eller mer
2 MB
2 MB
InitCacheStorlek - - - CacheStorlek i DOS
WinCacheStorlek - - - CacheStorlek i WINDOWS
Det gäller att skilja mellan SMARTDRV.SYS (DOS 5.0) och
SMARTDRV.EXE (DOS 6.X och WINDOWS 3.X).
SMARTDRV.SYS installeras i CONFIG.SYS med följande syntax:
DEVICE=[enhet]:[sökväg]SMARTDRV.SYS[InitCache]
[WinCache][/a]
©Copyright Peter Kan
Där /a talar om att man laddar SMARTDRV.SYS i det
expanderade minnet. Utelämnas parametern laddas SMARTDRV.SYS i
det utökade minnet.
När man laddar SMARTDRV.EXE så gör man det i AUTOEXEC.BAT
(DOS 6.X,WINDOWS 3.X), men man bör titta lite i HELP.COM innan
man kör igång. Det finns faktiskt lite att hålla reda på.
Syntax:
[Enhet:] [sökväg] SMARTDRV [/X] [[enhet [+|-]...] [/U] [/C|/R] [/F|/N]
[/L] [/V|/Q|/S] [InitCachStorlek] [WinCachStorlek]] [/E:ElelementStorlek]
[/B:BuffertStorlek]
SMARTDRV delar sig gärna och om inget annat anges så laddar den sig
högt.
När du skriver SMARTDRV /S vid DOSprompten så får du upp en liten
tabell. Skulle det vid Buffring stå ”JA” isåfall måste du tala om för
SMARTDRV i CONFIG.SYS att Dubbelbuffring krävs. Detta gör du med
kommandot:
DEVICE=C:\DOS\SMARTDRV.EXE /DOUBLE_BUFFER
Dubbelbuffring ger kompabilitet för vissa styrenheter som inte kan arbeta
med minne tillhandahållet av EMM386 eller Windows körd i avancerat
läge.
Man bör alltid använda de senaste versionerna av drivrutinerna,
därför bör man använda SMARTDRV.EXE om man t.ex. använder
både DOS 5.0 och WINDOWS 3.1.
DOS 5.0 91-07-12
DOS 6.0 93-03-18
DOS 6.2 93-10-27,29
DOS 6.22 94-05-31
WINDOWS 3.1 92-03-21
WINDOWS 3.11 93-11-11
(Spexigt datum, men stämmer det?)
©Copyright Peter Kan
SHADOW - SKUGGA
Shadow BIOS, man
kan ”spegla” ROM i
RAM för att få
snabbare åtkomst till
BIOS eftersom RAM är
snabbare än ROM.
Men...
det funkar inte alltid
eftersom skuggningen
kan hamna på fel ställe
och på så vis skapa konflikt.
Skuggningen utför man i SetUp:en.
Man bör tänka på hur stor del av ROM som man speglar, så att man
inte försöker spegla till del av RAM som man inkluderat i EMM386.
©Copyright Peter Kan
WINDOWS
WINDOWS vill ha mycket övre minne, och tar gärna hand om
minneshanteringen själv (vid installation) och kan köra applikationer i
XMS-minne. WINDOWS kan dela sig och lägger sig i det
konventionella, övre och det utökade minnet, och arbetar enligt utsago
bäst med stor mängd övre minne, vilket återstår att bevisas.
©Copyright Peter Kan
SAMMANFATTNING
HIMEM ger tillgång till XMS
HIMEM skapar HMA
EMM386 emulerar expanderat
minne EMS
EMM386 RAM emulerar
expanderat minne
EMS och skapar
UMB.
EMM386 NOEMS skapar
UMB
©Copyright Peter Kan
Kringgå startfiler med DOS 6.X
Man kan kringgå CONFIG.SYS och AUTOEXEC.BAT genom att
trycka på <F5>-tangenten eller hålla nere <SHIFT>-tangenten när
följande text visas:
Startar MS-DOS...
Datorn kommer då att starta med en grundkonfiguration istället för
den vanliga konfigurationen.
Bekräfta kommandon i CONFIG.SYS med DOS 6.X
Om man av någon anledning skulle vilja välja bort någon
kommandorad i CONFIG.SYS eller AUTOEXEC.BAT så kan man
göra det i DOS 6.X genom att trycka på <F8>-tangenten när följande
text visas:
Startar MS-DOS...
DOS kommer då att vilja ha en bekräftelse på varje kommandorad i
CONFIG.SYS.
När CONFIG.SYS har körts visas prompten:
Bearbeta AUTOEXEC.BAT [J,N]?
Om man vill att kommandona i Autoexec.bat skall utföras skriver man
J, om man vill att AUTOEXEC.BAT skall hoppas över skriver man N.
©Copyright Peter Kan
Alternativ konfiguration med DOS 6.X
Genom att DOS 6.X ger användaren möjlighet att skapa en meny
innan CONFIG.SYS och AUTOEXEC.BAT körs, så kan man
verkligen optimera sina inställningar.
Första gången som man gör en meny i CONFIG.SYS så kan man
tycka att det verkar lite krångligt, men innehar man en viss kunskap
om batch-filer så skall det inte vara så krångligt.
Tillvägagångssätt i CONFIG.SYS:
Först måste man inom hakparenteser markera menyn.
[MENU]
Sedan bestämmer man vilken färg det skall vara på menyn.
MENUCOLOR X,Y (se tabell)
Därefter bestämmer man vilken post som skall starta om man inte
markerar ett visst menyval inom en viss tid (anges i sekunder).
MENUDEFAULT [post],[tid]
Nu kan man bestämma de valmöjligheter som man vill ha i sin meny.
MENUITEM=[post],[text]
exempel:
[MENU]
MENUCOLOR 7,1
MENUDEFAULT WIN,10
MENUITEM=DOS,DOS 6.0
MENUITEM=WIN,WINDOWS 3.11
Nu är själva menyn klar, nu måste man skapa de olika posterna.
[COMMON]
Denna post körs av alla poster. Här har man generella inställningar för
CD-rom, keyboard, ev minneshantering m.m..
[DOS]
Denna post körs av menyvalet DOS 6.0
[WIN]
Denna post körs av menyvalet WINDOWS 3.11
©Copyright Peter Kan
Exempel:
[MENU]
MENUCOLOR 7,1
MENUDEFAULT WIN,10
MENUITEM=DOS,DOS 6.0
MENUITEM=WIN,WINDOWS 3.11
[COMMON]
SHELL=C:\DOS\COMMAND.COM C:\DOS /E:1024 /P
C:\DRV\HIMEM.SYS
C:\DRV\EMM386.EXE I=B000-B7FF I=E000-EFFF NOEMS
DOS=HIGH,UMB
DEVICEHIGH=C:\DOS\SETVER.EXE
COUNTRY=046,437,C:\DOS\COUNTRY.SYS
FILES=30
BUFFERS=20
[DOS]
DEVICEHIGH=C:\DOS\ANSI.SYS
[WIN]
©Copyright Peter Kan
Tillvägagångssätt i AUTOEXEC.BAT:
Efter @ECHO OFF sätter man alla gemensamma kommandon och
avslutar med följande rad:
GOTO %CONFIG%
Därefter skapar man postetiketter med samma namn som man valt i
CONFIG.SYS.
:DOS
Avsluta varje post med ett kommando som ser till att man inte av
misstag kommer in i nästa post.
GOTO SLUT
Exempel:
@ECHO OFF
SET PROMPT=$P$G
SET PATH=C:\DOS;
LH C:\DOS\KEYB SV,,C:\DOS\KEYBOARD.SYS
C:\DRV\SMARTDRV
GOTO %CONFIG%
:DOS
LH C:\DRV\MOUSE
LH C:\DOS\DOSKEY
DIR *.BAT
GOTO SLUT
:WIN
SET PT=%PATH%
SET PATH=C:\WINDOWS;%PT%
WIN.COM
SET PATH=%PT%
SET PT=
GOTO SLUT
:SLUT
©Copyright Peter Kan
MENUCOLOR (TABELL)
FÄRG
MENYTEXT(X)
BAKGRUND(Y)
SVART
0
0
BLÅ
1
1
GRÖN
2
2
CYAN
3
3
RÖD
4
4
MAGENTA
5
5
BRUN
6
6
VIT
7
7
GRÅ
8
8
LYSANDE BLÅ
9
9
LYSANDE GRÖN
10
10
LYSANDE CYAN
11
11
LYSANDE RÖD
12
12
LYSANDE MAGENTA
13
13
GUL
14
14
LYSANDE VIT
15
15