DJGPP je port GCC pro DOS, kter² zaΦal vyvφjet Dj Delorie. Jak pφ╣e, zaΦal o tom uva╛ovat v roce 1986, kdy se ptal RMS, jestli GNU plßnuje port pro DOS. Ten ale °φkal, ╛e to nenφ mo╛nΘ, proto╛e DOS nespl≥uje p°edpoklady GCC na operaΦnφ systΘm.
Jako prvnφ verzi zkompiloval GCC pod ICS Unixem na 386/16Mhz. P°epsal systΘmovß volßnφ, potom slinkoval s ICS C knihovnou a pomocφ programu v²sledek p°ed∞lal do 32 bitovΘho EXE pro Phar Lap extender. Proto╛e ale Phar Lap nem∞l virtußlnφ pam∞╗, napsal vlastnφ extender go32. A byla na sv∞t∞ prvnφ verze GCC(1.32), kterß sama sebe zkompilovala. Potom vzal knihovnu z BSD a p°evedl ji pro DOS. Prvnφ pou╛itelnß verze byla DJGCC1.03. Prßce mu trvala opravdu dlouho, proto╛e 1.03 vy╣la p°ed t°emi roky. Verze 1 pou╛φvala go32. Ten ale nebyl zrovna nejlep╣φ. VyznaΦoval se velkou nesnß╣enlivostφ (neb∞╛el ani pod emm386). Potom p°idal G++ a p°ejmenoval v²tvor na DJGPP. Verze 1.05 u╛ podporovala VCPI, 1.10 DPMI a 1.11 p°idala DPMIEMU. Byl tu ale po°ßd jeden nedostatek. Go32 se kompilovalo pomocφ p°ekladaΦe firmy Borland a to nebylo zrovna nejlep╣φ. Prßce na odstran∞nφ tohoto nedostatku zaΦala pro verzi 2. Jako prvnφ napsali assembler, kter² vygeneruje 16ti bitov² zavad∞Φ. Tento zavad∞Φ ale vy╛adoval DPMI a tak aplikace u╛ zase neb∞╛ely v╣ude, proto se go32 pou╛φvalo dßl, jako DPMI server. To se vy°e╣ilo a╛ pomocφ CWSDPMI, to je velmi kvalitnφ DPMI server dodßvan² s DJGPP. Zavad∞Φ ho umφ sßm spustit, kdy╛ DPMI nenφ k dispozici, tak╛e v podstat∞ CWSDPMI vypadß skoro jako extender, ale nenφ. Vyvinout verzi 2 trvalo celΘ dva roky. Byla zve°ejn∞na v polovin∞ roku 1996.
Verzi 2 jsem si nainstaloval jen tak ze zv∞davosti a opravdu m∞ nadchla. Jen n∞kolik parametr∙:
Poslednφ verze je dnes 2.01. Ta odstra≥uje pßr chyb, kterΘ byly ve verzi 2. ZejmΘna kolem dlouh²ch nßzv∙ ve win95.
Oproti 16ti bitov²ch p°ekladaΦ∙m (jako je Borland C) ma ale i n∞kterΘ nev²hody. To je rychlost volßnφ slu╛eb DOSu a BIOSu. Jako v ka╛dΘ protected m≤dovΘ aplikaci v DOSu, ka╛dΘ takovΘ volßnφ si vynucuje n∞kolikanßsobnΘ p°epφnanφ mezi v86 a protected modem. Tak╛e Φtenφ souboru je asi o 10% pomalej╣φ. Druhß v²hoda je velikost .exe souboru. U klasickΘho hello word jde velikost stßhnout na cca 10KB, co╛ je sice hodn∞, ale je v tom cel² 32 bitov² zavad∞Φ. Oproti 200KB dos4gw to je ale po°ßd krßsnΘ.
Bylo samoz°ejm∞ zkompilovßno hodn∞ GNU program∙ (EMACS, indent, make atd.), ale vzniklo i mnoho nov²ch zajφmav²ch DOSov²ch v∞cφ:
grafickß knihovna specializovanß na hry a dema. Umφ jenom 256 barevnΘ mody, ale zato je dost rychlß, umφ hodn∞ mod∙ X ( t°eba 256x256), prßci s fonty, sprite, zvuky (SB), VESA mody, ale mß i svoje drivery, pro S3, trident atd. Pro p°φpad, ╛e VESA nenφ. Umφ VESA2, 3D grafiku, jednoduchΘ GUI, Φasovßnφ atd.
To je docela v∞rnß kopie Borlandφho IDE. Umφ skoro v╣echno, co Borlandφ IDE - debugger, syntax highlighting (pro C, C++, Pascal, ASM a dal╣φ, co si nadefinujete) atd. Volß externφ p°ekladaΦ, tak╛e nenφ tak monolitickΘ. A mß n∞kterß hezkß roz╣φ°enφ, jako dal╣φ textovΘ mody apod.
Pascal byl p°ed∞lßn tak, aby se co nejvφc podobal Borlandφmu.
n∞co jako GNU verze BGI. Je pomalej╣φ ne╛ Allegro, ale stßle dost rychlß na akΦnφ hry. Umφ ale vφce grafick²ch primitiv, pracuje s VESA a mß svoje drivery. Umφ ΦernobφlΘ, 16ti barevnΘ, 256ti barevnΘ, hi color a truecolor mody.
Velice kvalitnφ kompresor spustiteln²ch soubor∙ - rozbalφ 10MB do sekundy, proto tφm mßm zabalen² i samotn² p°ekladaΦ.
celkem hezkΘ GUI, kterΘ vypadß jako to z Nortonov²ch utilit.
player modu apod. Jde pou╛φt pro zvuk ve hrßch.
p°evad∞Φ klasickΘho assembleru do AT&T syntaxe.
ukßzka, ╛e v DJGPP lze psßt i rezidenty. (U╛ jste n∞kdy vid∞li rezident v protected modu?)
velmi kvalitnφ DPMI server
port extenderu urΦenΘho p∙vodn∞ pro assembler. Je o n∞co rychlej╣φ a krat╣φ, ne╛ CWSDPMI a jde spojit do jednoho .exe souboru. Na druhou stranu je vφce nesnß╣enliv² a neumφ celΘ DPMI.
jinß knihovna pro hry.
A dal╣φ (jako nap°φklad emulace Turbovision, BGI, 3D knihovny apod). Byly p°eneseny i n∞kterΘ knihovny z Watcom C (jako npa°φklad MIDAS) a Borland C (nap°φklad xlib).
Pokud chcete n∞jak² p°φklad program∙ pod DJGPP, m∙╛ete zkusit t°eba Quake, demo Hard Rox, Info-ZIP (te∩ archivuje i dlouhΘ nßzvy), GhostScript, Executor - emulßtor MACu, WatTCP, Xemu, DESQview/X developers kit, real-time zoomer fraktßl∙ XaoS, demo BB atd.
Djgpp funguje takΘ pod okny. Vφce se o tom dozvφte v kapitole o EMX.
ZaΦneme od zaΦßtku - tedy stahovßnφ z internetu. Hlavnφ distribuce DJGPP se nachßzφ na ftp.simtel.net v adresß°i /pub/simtelnet/gnu/djgpp. ╚esk² mirror je na ftp.kolej.mff.cuni.cz v adresß°i /pub/dos/programming/djgpp/distribution. SamotnΘ stahovßnφ nenφ nic jednoduchΘho. Adresß° je pln² podadresß°∙ a velkß Φßst soubor∙ v∙bec nenφ t°eba. Proto tu uvedu seznam, kterΘ soubory je nutnΘ nahrßt, i s krßtk²m popisem (Φφsla v nßzvech jsou verze, pokud tam budou pozd∞j╣φ verze, stßhn∞te je.):
Nejd∙le╛it∞j╣φ programy, konfiguraΦnφ soubory a knihovny
Linker, assembler a dal╣φ
Vlastnφ p°ekladaΦ GNU C
DPMI server
Dal╣φ u╛iteΦnΘ soubory jsou (podle d∙le╛itosti):
Make utilita - nutnß pro kompilaci v∞t╣iny program∙
FAQ - odpov∞di na Φasto kladenΘ otßzky
Dobr² kompresor .EXE soubor∙
Borland-like IDE
Kompilßtor C++ (bez knihoven)
C++ knihovna - nutnß pro C++
Prohlφ╛eΦ dokumentace
Allegro - grafickß knihovna
GRX - jinß grafickß knihovna
Indent - formßtuje C zdrojßky
Gzip - kompresnφ program pou╛φvan² v UNIXu
Kompilßtor Pascalu
GNU debugger - neumφ grafiku atd.. Jin² debugger je t°eba fsdb v djdev nebo Borland-style v RHIDE.
*s.zip
obsahujφ zdrojovΘ k≤dy.
Samoz°ejm∞, ╛e tam je hodn∞ jin²ch u╛iteΦn²ch v∞cφ.
Potom, co
programy nahrajete na sv∙j poΦφtaΦ, rozbalte je do adresß°e, kde
chcete mφt DJGPP (t°eba c:\djgpp
) pomocφ:
pkunzip -d (jmΘno)
(u djgpp je unzip386, kter² d∞lß automaticky i adresß°e)
Programy se samy rozlezou po adresß°ovΘ struktu°e. Jedinou
vyjφmkou je allegro, kterΘ je t°eba rozbalit stranou (t°eba
v adresß°i contrib
). Potom staΦφ p°idat to autoexecu:
set DJGPP=(cesta1)/djgpp.env
- POZOR! Tady se v cest∞ pφ╣ou normßlnφ / mφsto \Potom rebootujte, zkontrolujte, jestli je environment v po°ßdku a m∙╛ete napsat n∞jak² hello world a zkusit kompilaci:
gcc hello.c
Pokud kompilace prob∞hne, vytvo°φ se a.exe
. Ten potom m∙╛ete
otestovat. Pokud n∞co nefunguje, jsou nßsledujφcφ mo╛nosti:
To asi nemßte dob°e nastavenou cestu do bin adresß°e, nebo tam nenφ cwsdpmi.exe
n∞co chybφ, nebo nejsou sprßvn∞ nastavenΘ prom∞nnΘ v autoexec.bat.
Tady jsou nßsledujφcφ mo╛nosti:
╚asto se stane, ╛e na cest∞ je make z jinΘho C (nap°φklad Borland
C) a to potom v∞t╣inou nefunguje, ujist∞te se, ╛e prvnφ na cest∞ je
make z balφku mak375b.zip
Tady si musφte poradit sami, nebo se obrßtit na
mailing list djgpp@delorie.com
.
Je╣t∞ pßr tip∙ na konfiguraci:
Konfigurace je v souboru djgpp.env
v hlavnφm adresß°i s DJGPP. Je
dobrΘ p°esm∞rovat doΦasn² adresß° tam, kde mßte ostatnφ soubory.
TakΘ si m∙╛ete ud∞lat
konfiguraci s co nejvφce volnou pam∞tφ, n∞jakou cache a CWSDPMI
spu╣t∞n²m jako resident (cwsdpmi /r
). Pom∙╛e takΘ ud∞lat tmp
adresß° na ramdisku.
Mφsto u╣et°φte, kdy╛ zabalφte cel² podadresß° bin pomocφ djp (mlp105b.zip
).
Zpomalenφ se bßt nemusφte, proto╛e djp rozbalφ 10MB do sekundy a to je
pravd∞podobn∞ vφce, ne╛ rychlost Va╣eho disku. Kdy╛ je kompilovßnφ pomalΘ,
pom∙╛e zv∞t╣enφ transfer bufferu u ld.exe
pomocφ programu
stubedit
.
To samΘ urychlφ i ostatnφ fßze kompilace - cc1
, cpp
a as
.
ObΦas p°ekladaΦi C++ a C dojde zßsobnφk, potom je t°eba jej
pomocφ programy stubedit
zv∞t╣it (u cc1
, cc1plus
a cc2
). Je lep╣φ pou╛φvat
CWSDPMI mφsto jin²ch DPMI server∙, proto╛e potom programy detekujφ
vφc problΘm∙ s pam∞tφ. TakΘ doporuΦuji p°eΦφst FAQ.
Dotazy a p°ipomφnky ohledn∞ strßnky posφlejte na hubicka@paru.cas.cz