Logo GNU
Kodovani P°edchozφ Nßsledujφcφ Obsah

6. DJGPP - GNU p°ekladaΦ pro DOS

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∙:

To d∞lß z DJGPP jeden z nejlep╣φch p°ekladaΦ∙ pro DOS. Je velice podobn² Watcom C. VyznaΦuje se opravdu dobrou stabilitou. Programy kompilovanΘ pod DJGPP fungujφ bez potφ╛φ pod windows, Φist²m DOSem, EMM386, Qemm386, Qemm386 s jeho DPMI serverem, Linuxov²m dosemulßtorem a pod. Auto°i uvßd∞jφ problΘmy s Novell DOS DPMI serverem, kter² mß chyby a tak n∞kterΘ v∞ci zlobφ. StaΦφ ale DPMI vypnout a u╛ v╣echno chodφ tak, jak mß. Podobn² problΘm je se star²m Qemm DPMI serverem.

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φ:

Allegro

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.

Rhide

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.

Gpc

Pascal byl p°ed∞lßn tak, aby se co nejvφc podobal Borlandφmu.

Grx

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.

Djp

Velice kvalitnφ kompresor spustiteln²ch soubor∙ - rozbalφ 10MB do sekundy, proto tφm mßm zabalen² i samotn² p°ekladaΦ.

jptui

celkem hezkΘ GUI, kterΘ vypadß jako to z Nortonov²ch utilit.

mikmod

player modu apod. Jde pou╛φt pro zvuk ve hrßch.

ta2as

p°evad∞Φ klasickΘho assembleru do AT&T syntaxe.

djgpptsr

ukßzka, ╛e v DJGPP lze psßt i rezidenty. (U╛ jste n∞kdy vid∞li rezident v protected modu?)

cwsdpmi

velmi kvalitnφ DPMI server

pmode

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.

jlib

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.

6.1 Instalace DJGPP

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

v2\djdev201.zip (1538295)

Nejd∙le╛it∞j╣φ programy, konfiguraΦnφ soubory a knihovny

v2gnu\bnu27b.zip (1712024)

Linker, assembler a dal╣φ

v2gnu\gcc2721.zip (1096967)

Vlastnφ p°ekladaΦ GNU C

v2misc\cwsdpmi4b.zip (40719)

DPMI server

Dal╣φ u╛iteΦnΘ soubory jsou (podle d∙le╛itosti):

v2gnu\mak375b.zip 209185

Make utilita - nutnß pro kompilaci v∞t╣iny program∙

v2\faq210b.zip 399350

FAQ - odpov∞di na Φasto kladenΘ otßzky

v2misc\mlp105b.zip 40583

Dobr² kompresor .EXE soubor∙

v2apps\rhide14b.zip 1413201

Borland-like IDE

v2gnu\gpp2721b.zip 681045

Kompilßtor C++ (bez knihoven)

v2gnu\lgb2721b.zip 970199

C++ knihovna - nutnß pro C++

v2gnu\txi390b.zip 466929

Prohlφ╛eΦ dokumentace

v2tk\alleg22.zip 1007783

Allegro - grafickß knihovna

v2tk\grx20.zip 659602

GRX - jinß grafickß knihovna

v2gnu\ind191b.zip 74952

Indent - formßtuje C zdrojßky

v2gnu\gzp124b.zip 71947

Gzip - kompresnφ program pou╛φvan² v UNIXu

v2gnu\gpc20b.zip 1125151

Kompilßtor Pascalu

v2gnu\gdb416b.zip 520271

GNU debugger - neumφ grafiku atd.. Jin² debugger je t°eba fsdb v djdev nebo Borland-style v RHIDE.

Soubory *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:

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:

P°ekladaΦ pφ╣e, ╛e nenalezl DPMI a ╛e chce cwsdpmi.

To asi nemßte dob°e nastavenou cestu do bin adresß°e, nebo tam nenφ cwsdpmi.exe

P°ekladaΦ n∞co nenalezne

n∞co chybφ, nebo nejsou sprßvn∞ nastavenΘ prom∞nnΘ v autoexec.bat.

P°eklada° spadne.

Tady jsou nßsledujφcφ mo╛nosti:

Make nefunguje

╚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

N∞co jinΘho,

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, cppas. 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, cc1pluscc2). 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.


P°edchozφ Nßsledujφcφ Obsah

Dotazy a p°ipomφnky ohledn∞ strßnky posφlejte na hubicka@paru.cas.cz