DJGPP
^^^^^
Tak kompiler máme za sebou. Ted něco napíšu o jeho dosáckem
portu. Ten začal dělat Dj Delorie. Jak on píše začal o tom uvažovat
v roce 1986(tehdy se jmenovalo djgcc), kdy se ptal RMS, jestli GNU
plánuje dosácký port. Ten se mu ale jen vysmál, že na tak ošklivý OS
GNU nikdy dělat nebude.
Napřed trochu historie. Jako první verzi zkompiloval gcc pod ICS
Unixem na 386/16. Přepsal systémová volání, potom slinkoval s ICS c
knihovnou a pomocí programu výsledek předelal do 32 bitového EXE pro
Phar Lab extender. Protože ale Phar Lab neměl virtualní pamět,
napsal vlastní extended go32. A byla na světě první verze gcc(1.32)
která sama sebe zkompilovala. Potom vzal BSD zdrojáky a preportil c
knihovnu pro DOS. První použitelná verze byla 1.03. Práce mu trvala
opravdu dlouho, protože 1.03 vyšla před třema rokama. 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 v Borlandech a to nebylo zrovna nejlepší - vůbec to
nebyl IMO dobrý extender. Dost nesnášenlivý. Verze 1.03 mě tehdy
dost zklamala. Prací na odstranění tohoto nedostatku začala pro
verzi 2. Jako první napsali assembler, který vygeneruje 16ti bitový
zavadeč. Tento zavaděč ale vyžadoval DPMI a tak aplikace už zase
neběžely všude. A tak se go32 používalo dál, jako DPMI server. To se
vyřešílo až pomoci CWSDPMI, to je dost dobrý DPMI server dodávaný z
djgpp. Zavaděč ho umí sám spustit když dpmi není k dizpozici, takže
vpodstatě to vypadá skoro jako extender, ale není. Vyvinout verzi 2
trvalo celé dva roky. Byla vypuštěna v polovině roku 1996.
Verzi 2 jsem si ztáhnul jen tak ze zvedavosti a opravdu mě
nadchla. Jen několik parametrů:
Plně 32 bitový (jako Watcom)
Funguje jako DPMI client (tedy se snáší z windowsema atd)
Nepoužívá extender (ušetří se cca 200KB za něco jako dos4gw. Taky
by to mělo být rychlejší - uštří se context switch
mezi programem a extenderem.)
Má vlastní DPMI server - takže stejne .exe navíc ale jenom 20KB
místo 200..
DPMI server umí swapovat..tedy 4GB ram...
Podpora win95kových dlouhých názvů atd..
To dělá z djgpp nejlepší mně známý kompiler pro dos. Je velice
podobný watcomu. Vyznačuje se opravdu slušnou stabilitou. Testoval
jsem ho pod windows, čistým dosem, emm386, qemm386, qemm386 s jeho
DPMI serverem, Linuxovým dosemulátorem a všude fungoval skvěle.
Autoři uvádějí problémy s novell dos DPMI serverem, který ma bugy a
tak to moc nefunguje. Stačí ho jenom vypnout a už to funguje.
Potobný problém je se starým QEMM DPMI serverem.
Poslední verze je dneska 2.01. Ta odstraňuje pár chyb, které
byly ve verzi 2. Zejména kolem dlouhých názvů ve woknech.
Ve srovnání s watcomem mě opravdu žádná výhoda watcomu nenapadá.
U Borlandů jsem jednu vymyslel. To je rychlost volání služeb
dosu/biosu. Každé takové volání si vynucuje několikanásobné
přepínaní mezi v86 a realným modem. (to je u každé DPMI aplikace).
Takže čtení souboru je asi o 10% pomalejší. Druhá, co mě napadí je
velikost exe souboru. U klasického hello word jde velikost stáhnout
na cca 10KB což ke sice hodně ale je v tom celý 32 bitový zavaděč.
Oproti 200KB dos4gw to je ale pořád krásné.
Bylo samozdřejmě přeportěno hodně programů pod GNU (EMACS,
indent, make ...) ale vzniklo i hodně zajímavých nový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ě modu X (
třeba 256x256), práci s fonty, sprajty, zvuky (SB), VESA mody
ale má i svoje drivery pro S3, tridenta atd.. v případě, že
vesa není, podporuje VESA2, 3D grafiku, jednoduchá GUI,
časování atd.
Rhide - To je docela věrná kopie Borlandího prostředí. Je sice
často plná bug (alespoň poslední verze, kterou jsem
testoval..nepoužívám ho) Umí skoro všechno co borland9 -
debugovaní, syntax highigting ( pro C, C++, pascal, ASM a
další, co si nadefinujete) atd.. Volá samozdřejmě externí
kompiler, takže to není taková prasárna. A ma 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ček. Je pomalejší než alegro. Stejně v
tom jde ale napsat akční hry. Umí ale víc bgi style grafickej
funkcí, taky pracuje s VESA a má svoje drivery a umí i
černobíle, 16ti barevné, 256ti barevné, hi color a truecolor
mody.
Djp - Velice kvalitní pakovač exáčů-rozbalí 10MB do sekundy, takže
ja tím mam zabalenej i kompiler
jptui - celkem hezke GUI co vypadá jako z nortonových utilit
mikmod - player modu apod. Nechá se použít pro zvuk ve hrách/demách
ta2as - převaděč klasického assembleru to AT&T syntaxe
djgpptsr- ukázka, že v djgpp lze psát i rezidenty.
cwsdpmi - velmi kvalitní DPMI server
pmode - port watcomího extenderu, když nechcete cwsdpmi(víc
nesnášenlivý než cwsdpmi ale trochu rychlejší. Má víc bug)
xlib - port borlandí xliby
jlib - jiná herní knihovna
midas - přeportěný zvukový server (zatím v alpha verzi)
A samozdřejmě fůra dalších (jako třeba turbovision, emulace BGI,
3D knihovny apod).
Pokud chcete nějaký příklad programu pod DJGPP můžete zkusit
třeba Quake, demo Hard Rox, Info-ZIP (teď archivuje i dlouhé názvy),
GhostScript, Executor - emul8tor MACu, WatTCP, Xemu, DESQview/X
developers kit, náš zoomer XaoS, naše demo BB atd.
Djgpp funguje také pod okny ale to jsem netestoval.
Ti, co dočetli až sem se možná už zajímají o tak, jak se DJGPP
instaluje
výheň