FAQ související s DOS - Často Kladené Otázky
 

DOS

FreeBASIC port do DOS je založen na DJGPP portu GNU (?)toolchain do 32-bitového chráněného režimu DOS.

Stávajícím správcem tohoto portu je DrV.

Zde je popsáno: Informace specifické pro platformu, Rozdílnost od Win32/Linux, Rozdílnost od QB?, Návody atd.

Pozn.překl.: Jelikož DOS režim vůbec nepoužívám a výklad tohoto FAQ v EN je velice technický, což se špatně překládá, považujte tento FAQ za orientační. Překlad je často jen odhadovaným derivátem skutečnosti. Děkuji za pochopení a budu rád, pokud mi mé chyby pomůžete opravit. Stránka odpovídá (resp. má odpovídat) identické stránce v EN na freebasic.net/wiki.


 WANTED TESTERS - Hledáme testery 

Cílová DOS verze FreeBASICu potřebuje více testerů. Máte-li zájem o využití FreeBASIC pro DOS, prosím nečekejte se založenýma rukama na další verze a sdílením svých zkušeností a poznatků, pomozte již teď. Testy spouštění v DOS, na starých i nových počítačích jsou vítány (grafika, soborové I/O, sériový port ...) Pokud něco nefunguje, prosím umístěte co nejpodrobnější zprávu do fóra, nebo na bug Tracker. Pokud Vám vše funguje, jak má, napište také. Popište vše, co funguje. Ujistěte se vždy, že používáte aktuálně nejnovější verzi FB (zprávy o FB starší než 0.9 jsou už bohužel zastaralé a nevyužitelné), a prostudujte si tento dokument předtím, než svou zprávu odešlete.

Limity

Cílový DOS poměrně dobře pracuje a je podporován FreeBASIC a updaty. Několik rozdílů ve srovnání s jinými platformami však existuje. Chybějící vlastnosti jsou většinou ty, které nejsou kompatibilní s OS, DOS extenderem nebo C runtime:
  • Křížová kompilace (Cross-compiling) na jiný cíl - platformu.
  • Multithreading (viz FAQ 23).
  • Grafika v režimu okna nebo pomocí OpenGL.
  • Nastavení ScreenRes na velikost neodpovídající rozlišení podporované grafickou kartou.
  • V DOS není podporován Unicode, WString je totéž co ZString, znakové sady, jiné než latin, nejsou podporovány = Udělej si sám.
  • Sdílené knihovny (DLL) nelze vytvořit či používat (alespoň ne snadno), množství dostupných statických knihoven, využitelných v DOS, je omezené.

FreeBASIC DOS související otázky:

- 1. FB je 32-bitový kompilátor - potřebuji 32-bitový DOS?
- 2. Jak je to s FreeDOS-32? Funguje a bude fungovat se současnou i vyšší verzí FB?
- 3. Při spuštění FreeBASIC v systému DOS, dostanu zprávu "Error: No DPMI" !
- 4. Je možnost, jak se zbavit CWSDPMI.EXE a CWSDPMI.SWP?
- 5. Mohu používat jiné extendery DOS, jako DOS/4GW, Causeway, DOS/32A?
- 6. Kdepak je pěkná modrá obrazovka se všemi.../, kde je IDE?
- 7. Jak si v DOSu mohu prohlédnout dokumentaci v souboru CHM nebo ve formátu PDF?
- 8. Jak mohu napsat/upravit svůj zdrojový kód?
- 9. Jak mohu přehrát zvuk v DOSu?
- 10. Jak mohu použít USB v systému DOS?

- 11. Jak mohu použít grafiku v DOSu?
- 12. V FB chybí DEF SEG! Dá se to nějak v mém kódu obejít?
- 13. Jak mohu přepsat QB příkaz CALL INTERRUPT/access, přerušení DOS a BIOS?
- 14. Jak mohu přepsat manipulaci XMS/EMS, známou z QB?
- 15. FBC mi vrací chybu "nelze najít lsupcxx '!
- 16. Jak mohu použít sériový nebo paralelní port?
- 17. Jak mohu použít tiskárnu?
- 18. Jak si mohu udělat snímek obrazovky FreeBASIC programem spuštěným v DOSu?
- 19. Grafický režim nefunguje (freeze / black screen / garbage output)!
- 20. Problém s myší! Myš nefunguje v DOS / arrow 'jumps' / etc. ...

- 21. 64 KiB a 640 KiB problém - kolik paměti FB v DOS podporuje?
- 22. Můj program spadne při pokusu o použití více než cca 1 MiB RAM! Je to chyba ve FreeBASIC?
- 23. Pomoc ! Vláknové (threading) funkce v DOS nefungují?
- 24. Spustitelný soubor vyrobený FB DOS je obrovský!
- 25. Kompilace s FB je velice pomalá!
- 26. SLEEP nepracuje! Jak vytvořím zpoždění?
- 27. Výkon v DOS je velmi špatný!
- 28. Mohu přistupovat sektorům disku pomocí FB?
- 29. Mohu použít inline ASM s pokročilými instrukcemi jako SSE v DOSu?

Viz též


Zpět na Hlavní stránku




FreeBASIC DOS související - Odpovědi na Vaše otázky


1. FB je 32-bitový kompilátor - potřebuji 32-bitový DOS?
Ne. DOS verze FreeBASIC používá DOS extender, který umožňuje spustit 32-bitový kód nad 16-bitovým DOS kernelem. Můžete použít FreeDOS (16-bit), Enhanced-Dr-DOS, staré zavřené Dr-DOS, nebo dokonce MS-DOS snad až někde k verzi 4. Budete potřebovat CPU alespoň 80386. Viz též Požadavky.

2. Jak je to s FreeDOS-32? Funguje a bude fungovat se současnou i vyšší verzí FB?
FreeDOS-32 je experimentální v době psaní, ale měla by spouštět FreeBASIC i aplikace, které generuje beze změn. Spolehlivě ověřena je podpora FB DOS na FreeDOS (16), FreeDOS-32 by měl být také bez problémů.

3. Při spuštění FreeBASIC v systému DOS, dostanu zprávu "Error: No DPMI" !
Potřebujete DPMI host (DPMI kernel, DPMI server), prostředníka souboru "CWSDPMI.EXE" (cca 20 KiB) nebo HDPMI32.EXE (cca 34 KiB). Viz požadavky a FAQ 4 (níže) pro více informací.

4. Je možnost, jak se zbavit CWSDPMI.EXE a CWSDPMI.SWP?
Ano, jsou 2 možnosti. Jak se zbavitet CWSDPMI.EXE a vytvořit samostatně spustitelný DOS vložením CWSDPMI, potřebujete balík CWSDPMI a soubor "EXE2COFF.EXE". Použití EXE2COFF odebere loader CWSDPMI.EXE (soubor ztratí 2 KiB velikosti, výsledek v souboru "COFF" bez přípony), a pak přilepte soubor "CWSDSTUB.EXE" před tento COFF. Nový spustitelný soubor je cca o 21 KiB větší, než originální, ale je samostatný, žádné další soubory už nepotřebujete (?pozn.překl.: nejsem si jist, jak to vše okolo básník myslí). Chcete-li se zbavit CWSDPMI.SWP, pak můžete upravit spustitelný soubor s CWSPARAM.EXE, a zakázat odkládání (swapping) (někdy také nesprávně označován jako stránkovací). Uvědomte si však, že to omezí paměť, která může být připojena k fyzické paměti, nainstalované v systému. Tato akce může být provedena jak se souborem FBC.EXE, tak i s ostatními spustitelnými soubory, vytvořenýmí v FBC. Tato metoda je také popsána v .docs CWSDPMI balíku. Případně můžete použít WDOSX nebo D3X extender. Neswapují RAM a vytvářejí samostatně spustitelné soubory. Pokud spustíte váš spustitelný soubor v Ring 0, manipulace s pády není moc dobrá a může způsobovat zamrzání a restarty při chybách, kde ostatní hostitlé opustí proces "civilní" cestou s výpisem registru. Také reprodukce nemusí fungovat dobře/vůbec s WDOSX nebo D3X. Finálně můžete použít HDPMI. Stáhněte soubor "HXRT.ZIP" (zde: japheth.de/HX.html), rozbalte "HDPMI32.EXE" (cca 34 KiB) a "HDPMI.TXT" (není vyžadován kódem, jsou v něm však důležité informace), a vložte do svého DOS startupu ("HDPMI32 -r"). To umožní, aby HDPMI běžel rezidentně (na pozadí) a zabránil všem programům FreeBASIC (také FreePASCAL a DJGPP) plakat nad chybějícím DPMI a swappingem (odkládáním). HDPMI zatím nelze začlenit přímo do vašich spustitelných souborů. Spuštění spustitelných souborů, obsahujících D3X, CWSDPMI nebo jiný DPMI host uvnitř, pod HDPMI nebo jiným externím 'host'itelem je v pořádku - vestavění 'host'itelé budou jednoduše přeskočeni. Použití DPMI je rozhodně nutné pro FreeBASIC, protože nemůže generovat 16-bitový kód v reálném režimu, a neexistuje žádný jiný dobrý způsob, jak provádět 32-bitový kód v DOS.

5. Mohu používat jiné extendery DOS, jako DOS/4GW, Causeway, DOS/32A?
Ne. Takzvané WATCOM-like extendery nelze použít, protože existují značné rozdíly v řízení paměti a struktury spustitelného souboru. WDOSX a D3X pracují, protože jsou multistandardními extendery, nepodobné WATCOM. Můžete také použít PMODE/DJ (ne "original" Tran's PMODE, ne PMODE/W (!), ušetří cca 5 KiB ve srovnání s CWSDPMI, mohou být zahrnuty do EXE, ale můžou mít vliv na stabilitu nebo výkon), nebo výše popsané HDPMI.

6. Kdepak je pěkná modrá obrazovka se všemi.../, kde je IDE?
Projekt FreeBASIC je zaměřen na kompilátor, generující spustitelné soubory z vašich zdrojových BAS souborů. Vypadá nenápadně, ale je velice důležitý pro kvalitu Vámi vyvinutého software. Projekt nezahrnuje IDE. Existuje několik externích IDE pro FreeBASIC, ale asi nikdo v současnosti nemá IDE pro DOS. Pokud jej opravdu potřebujete, můžete zkusit Rhide, ale vemte na vědomí, že je složitý a zabugovaný, takže jen na vlastní nebezpečí. Viz také níže FAQ 7 a 8.

7. Jak si v DOSu mohu prohlédnout dokumentaci v souboru CHM nebo ve formátu PDF?
Žádný dobrý způsob pro DOS neexistuje. Ale přesto dokumentaci FreeBASIC zobrazit můžete. Jeden z vývojářů FreeBASIC (coderJeff) poskytuje prohlížeč dokumentace speciálních formátů také pro verzi DOS. Vypadá podobně jako v QB vestavěný prohlížeč nápovědy, ale neobsahuje editor nebo IDE. Ke stažení zde: http://www.execulink.com/~coder/FreeBASIC/docs.html

8. Jak mohu napsat/upravit svůj zdrojový kód?
Je několik editorů pro DOS, ale jen málo z mála je dobrých - možnosti jsou: FreeDOS EDIT (použijte verzi 0.7d (!!) nebo 0.9, 64 KiB limit optimální stability znamená pravidelně ukládat svou práci), SETEDIT, INFOPAD (dodáván s CC386 kompilátorem, lze upravovat velké texty, má zvýrazňování syntaxe pro C a ASM, nikoliv však pro BASIC).

9. Jak mohu přehrát zvuk v DOSu?
Jsou 2 způsoby, jak v DOSu přehrát zvuk. Buďto archaický PC speaker s famózním beep-em, když se něco pokazí, nebo zvuková karta. PC speaker je snadné ovládat, umožňuje více, než se může zdát, dokonce přehrávat zvukové soubory (WAV s dekompresním kódem i OGG Vorbis, MP3 etc.). Můžete použít většinu QB kódů (např. o-bizz.de/qb...speaker.zip) nebo ASM kód v inline ASM, ale poskytuje jen jeden kanál a pouze 6 bitů. Samozřejmě má oproti zvukové kartě naprosto mizernou kvalitu, a také na novějších počítačích nemusí být vůbec. Pro staré ISA zvukovky je třeba hodně programování, k novějším (PCI) lze přistupovat pomocí driveru (SB16 kompatibilní "emulace"), pokud je pro vaši kartu k dispozici, nebo přistupovat přímo, nízkoúrovňovým programováním , k čemuž potřebujete dokumentaci a Assembler. Pro vaši inspiraci existují zdroje, jako DOS audio přehrávač MPXPLAY (napsán v C s nějakým Assemblerem), podporující obě metody (nativní + "emu" drivers), viz update seznam zde: drdos.org/...wiki...SoundCardChip. Podpora zvuku v DOS není zabudována ve FreeBASIC DOS portu. I ve FB pro WIN/LIN je řešena API a knihovnami. Pro přehrávání komprimovaných formátů (MP3, OGG Vorbis, FLAC, ...), budete navíc potřebovat dekompresní kód , pro což by měly být použitelné stávající DJGPP porty těchto knihoven.

10. Jak mohu použít USB v systému DOS?
Opět platí, že FB nemá přímou podporu a budete potřebovat ovladač. FB přímo nepodporuje USB ani na Win32 nebo Linuxu, více na wiki: drdos.org/...wiki...USB o možnostech využití USB v systému DOS.

11. Jak mohu použít grafiku v DOSu?
GUI nebo grafika v DOS je dostupné a přístupů existuje několik:
    • Použijte grafickou knihovnu FB. Ta používá VESA pro přístup ke grafice a podporuje všechna rozlišení VESA VBE driveru, navíc standardní režimy VGA.
Pozn.: Používejte FB verze 0.20 a novější, 0.17 nespolupracuje dobře a starší nepracují s grafikou vůbec.
    • VGA režim 320x200x8bpp: velmi jednoduchý, maximálně spolehlivý a kompatibilní, ale nízké rozlišení s jen 256 barvami. Viz příklad.
    • VGA "ModeX" 320x240x8bpp: podobný předchozímu, méně snadný, dobrá spolehlivost a kompatibilita, ale nízké rozlišení s jen 256 barvami. Viz příklad.
    • VGA "planed" režim 640x480x4bpp: obtížné nastavení pixelů, spolehlivost a kompatibilita výborná, rozlišení nízké a jen 16 barev.
    • Některé další "odd" VGA "ModeX" režimy (jako 360x240x8bpp): možné, ale jen pro nadšence ;-)
    • Napsání vlastního VESA kódu: Těžší, dobrá kompatibilita, dostupné high-res a true color, může znamenat problémy se spolehlivostí, je třeba k němu přistupovat opatrně.
    • Použití externí knihovny (DUGL, Allegro, MGL, WxWidgets): Umožňuje pracovat s bohatší grafikou a GUI, větší velikost EXE, je třeba respektovat licenci knihovny, potencionální omezení spolehlivosti.
Všimněte si, že některé grafiky hlásí omezené funkce při použití VESA. Často méně paměti (např. 8 MiB namísto 64 MiB), nebo méně režimů (např. režim 24 bpp přizná a 32 bpp ne, jen nižší rozlišení (do cca 1280x1024) a vyšší skryje, přizná "4:3" režim a širokoúhlý ne). To je problém karty, nikoliv DOS či FreeBASIC. Další funkce uvidíte v jiných, než DOS systémech, nebo i v DOSu, pomocí detekce hardwarovými nástroji, obcházející VESA low-level programingem.

12. V FB chybí DEF SEG! Dá se to nějak v mém kódu obejít?
DEF SEG se vztahuje k 16-bitovému RM adresování a byl odstraněn, protože "přímý" přístup k VGA nebo jiným, 'low memory' oblastem, není možný, neboť FreeBASIC-ovský model paměti (stejně jako DJGPP's) nemá zero-based (nezačíná od nuly). Pro přístup k low DOS memory, použijte DOSMEMGET a DOSMEMPUT, viz např. "vga13h.bas", nebo "_dos_ds" selektor pro inline ASM. Viz příklad:

'' Příklad jen pro DOS, inline ASM přístup k low memory 
'' Spuštění pouze v textovém režimu 80x25

'' Vložení dos/go32.bi definuje "_dos_ds"
'' "směrující" do GO32 bloku

#include "dos/go32.bi" 

Dim As UInteger DDS

DDS=_dos_ds

? : ? "Hello world !"
? "_dos_ds=$";Hex$(DDS) 
? "This is just a tEst - abcd ABCD XYZ xyz @[`{ - press any key ..."

Do
  Sleep 1000
  If Inkey$<>"" Then Exit Do
  Asm
    mov  eax,[DDS] '' Přímé použití "_dos_ds" zde nebude fungovat !!!
    push eax
    pop  gs        '' Jen pro jistotu. Obvykle je to nastaveno vždy stejně
    Xor  ebx,ebx
    aa3:
    mov  al,[gs:0xB8000+2*ebx]
    cmp  al,65  '' "a"
    jb   aa1
    cmp  al,122 '' "z"
    ja   aa1   
    cmp  al,90  '' "Z"
    jbe  aa2
    cmp  al,97  '' "a"    
    jb   aa1 
    aa2: 
    Xor  al,32  '' Swap případ
    aa1:
    mov  [gs:0xB8000+2*ebx],al
    inc  ebx
    cmp  ebx,2000
    jne  aa3
  End Asm  
Loop
? : ? "Bye"
End


13. Jak mohu přepsat QB příkaz CALL INTERRUPT/access, přerušení DOS a BIOS?
K těmto přerušením lze přistupovat pouze pomocí DOS verze/cíle FreeBASICu.

Přístup k přerušení je pomalejší než v QB: s FB DPMI host je třeba udělat 2 související přepnutí, přejít do real-mode a zpět. To dokáže zbaštit stovky hodin v syrovém (raw) DOS a tisíce hodin, pokud je spuštěn v emm386, nebo uvnitř DOS boxu Windowsu. Zpomalení může být zanedbatelné, nebo naopak. Snažte se minimalizovat počet takových volání a zároveň zpracovat co nejvíce dat při každém z volání - alespoň několik KiB, ne jen jeden či několik bytů.

Použítí DJGPP's DPMI balíku:

#include "dos/dpmi.bi"

Type RegTypeX As __dpmi_regs

#define INTERRUPTX(v,r) __dpmi_int( v, @r )


Alternativně můžete volat INT přes inline ASM. 2 důležité věci, o které se musíte starat, jsou skutečnost, že paměťový modul nezačíná od nuly (viz také FAQ 12), a navíc "přímé" předávání adres (jako DS:[E]DX) do INT nebude fungovat , s výjimkou DPMI host s "DOS API translation".

14. Jak mohu přepsat manipulaci XMS/EMS, známou z QB?
Záleží, proč to původní kód používá. Jestli jen proto, aby se vyhnul nízkým paměťovým limitům, pak je jednosuše vyjměte a použijte své oblíbené FB datové typy a paměťové manipulace namísto těchto funkcí. Pokud se používá pro DMA (zvukový doprovod), máte to blbé... budete muset kompletně překopat kód, viz FAQ 9. Používjete pro DMA přednostně low-memory (neměl by to být problém, protože většina kódů aplikací a bufferů má umístění v DPMI paměti), DMA přímo v DPMI paměti je možné, ale obtížnější.

15. FBC mi vrací chybu "nelze najít lsupcxx '!
Zdrojem tohoto problému je souborlibsupcxx.a v adresáři LIB\DOS\, s 9 znaky v názvu. Vniklo to Vaší vinou, extrahováním souborů ze ZIP s povolenými dlouhými názvy souborů (obvykle ve Windows), a pak použitím FB v DOS bez LFN (podpora dlouhých názvů souborů), což v tomto případě způsobí název souboru LIBSUP~1.A a "can't be found" ("nelze najít"). Přejmenujte soubor na LIBSUPCX.A (jen jedno X), nebo ZIP rozbalte znovu v DOS.

16. Jak mohu použít sériový nebo paralelní port?
DOS INT14 není moc efektivní v tom, jak odesílá/čte jeden znak při každém volání. Je lepší použít externí DOS32 komunikační knihovnu. /* znáte někdo nějakou dobrou ? */ FB od 0.18.2 nepodporuje OPEN COM v DOS, součástí FB je experimentální knihovna/ovladač od coderJeff, funkční od verze 0.18.3.

17. Jak mohu použít tiskárnu?
DOS kernel vám v tomto nepomůže, takže budete muset sami připravit (triviální) text, nebo data pixel po pixelu (přijatelně snadná pro tiskárny kompatibilní se standardem "ESC/P") a poslat je na tiskárnu přes paralelní port, nebo USB, za použití příslušného ovladače (viz FAQ 10). S tzv. "GDI" nebo "Windows" tiskárnami nelze v DOS očekávat výsledky, přiměřené vašemu úsilí.

18. Jak si mohu udělat snímek obrazovky FreeBASIC programem spuštěným v DOSu?
Ideálně zabudujte tuto funkci do svého vlastního kódu. DOS TSR základní screenshootery jako SNARF, budou pracovat s textovými screeny, ale ne s FreeBASIC's GFX knihovnou. Není to chyba na žádné straně, je to problém designu.

19. Grafický režim nefunguje (zamrzání / černá obrazovka / na výstupu jen zmetky)!
Každopádně umístěte hlášení o chybě do fóra. Aby to bylo zároveň užitečné a produktivní, věnujte prosím pozornost následujícím bodům jak postupovat a jaká učinit opatření a poskytněte o všem příslušné informace.
    • Podívejte se na omezení na stránce GfxLib
    • Grafika nemusí správně fungovat na velmi starých PC s frekvencí pod cca 500 MHz. Pro info o skutečném taktu můžete použít např. RayeR's CPUID nebo obdobný testovací program.
    • Je třeba mít přesné informace o GK. Testujte na DOS použitím DrV's VBEDIAG (pro info) a RayeR's VESATEST (který se pokusí i o režim s vizuální kontrolou výsledku). Zjistěte, jaké jsou podporovány "užitečné" režimy (640x480, 800x600) s jakou bitovou hloubkou (8, 16, 24, 32 bpp), a zda při jejich nastavení fungují správně.
    • Zjistěte a popište, co se přesně děje. Např.: "Režim pracuje s VESATEST ale ne s FB", "žádná grafika ani žádná chyba", "černá obrazovka a zamrzání", "Grafika je rozbitá či nekompletní", atp...
    • Pokud nepracují ani jinak spolehlivé programy, zkuste něco jednoduchého, jako třeba nakreslit kruh ve středu obrazovky.
    • Zkuste vyřadit ovladače myši (snižuje to zátěž procesoru).
    • Zjistěte jaké režimy jsou ovlivněny. Jestli režim nefunguje, snižujte rozlišení nebo bitovou hloubku. K testování používejte bezpečné, ověřené režimy, jako 640x480 s 32/24/16/8 bpp, 640x480 s 4 bpp a 320x200 s 8bpp.
    • U některých starých karet jsou k dispozici ovladače VESA (S3VBE/UVIVBE). Testujte s nimi i bez a zahrňte výsledek do zprávy.
    • Odstraňte potencionálně problémový obsah (správce paměti, ovladače) ze spouštěcích souborů DOS. Nic z toho není zapotřebí na FB, krom DPMI host (viz také FAQ 4.).
    • Postněte na fórum info o vaší GK, CPU (i stáří), typ DOS a jeho verze,m příznaky chyb a jednoduchý příklad kódu.
RayeR's VESATEST a CPUID lze stáhnout tady rayer.ic.cz/programm/programe.htm, VBEDIAG tady drv.nu/vbediag/.

20. Problém s myší! Myš nefunguje v DOS / arrow 'jumps' / etc. ...
Pro použití myši v DOS, potřebujete kompatibilní ovladač, rozpoznávající vaši myš a uznaný FB knihovnou. Pro optimální výsledek potřebujete dobrý driver a vhodnou myš.

Myš: Optimální volba je alespoň PS/2, podporovány jsou i novější USB typy (mohou ale potřebovat kompatibilní (INT33) nativní USB ovladač - nebo emulaci BIOS). Nedoporučují se prastaré myši se sériovým portem, i když by měly být také funkční.

Driver: preferovaný je (byl) CTMOUSE z FreeDOS projektu. Je součástí FreeDOS (ale neomezuje se jen na něj) nové verze ke stažení z: ibiblio.org/pub/...mouse . Žádný z nich není dokonalý, ale jsou funkčnější než většina konkurečních.Kooperují s BIOS, emulují USB. Ovladače myši Logitech také obvykle odvádějí dobrou práci, stažení zde: uwe-sieber.de/util_e.html - verze 6.50 a vyšší je pro začátek dobrá. DRMOUSE a některé starší (možná nejen starší) MSMOUSE způsobují problémy a nejsou doporučeny.

Pokud myš nefunguje vůbec, pak s největší pravděpodobností není ovladač načten, nerozpozná myš (viz zprávy ovladačů), nebo není kompatibilní s funkcí INT33 "standard". Pro USB myš může pomoci nastavení v BIOSu "USB emulace myši", nebo vůbec zapnutí podpory USB jako takového.

Je-li ovládání myši nepřesné (přeskakuje, zamrzá). Pak může být buď špatný ovladač, nebo nefunguje emulace v BIOS. Nejjednodušším řešením je koupit jinou myš. Standardně by jste měli mít PS/2 a USB myš a při problémech je zaměnit.

21. 64 KiB a 640 KiB problém - kolik paměti FB v DOS podporuje?
Řízení paměti je záležitostí DPMI host, spíše než kompilátoru. FreeBASIC a spustitelné soubory tímto problémem netrpí, protože používají 32-bitový DPMI kód. Můžete využít téměř veškerou paměť vašeho PC (s určitými omezeními), limity jsou však daleko nad 64 nebo 640 KiB. CWSDPMI r5 je ověřen pro práci s pamětí větší než jen 512 MiB. HDPMI podporuje až 4 GiB (limit 32-bitového adresování). FreeBASIC a jím generované kódy nevyžadují klasické DOS správce paměti založené na HIMEM/XMS a EMM386/EMS, ale pokud jsou přítomny, mají s nimi koexistovat. To vše samozřejmě platí hlavně pro opravdové DOS, "Dos Box" si bude držet vlastní kontrolu nad pamětí a poskytne vám jen její malou část (někdy jen do 64 MiB).

22. Můj program spadne při pokusu o použití více než cca 1 MiB RAM! Je to chyba ve FreeBASIC?
Ne, není. A není to ani specifická chyba DOS, viz také FAQ FreeBASIC Kompilátoru. Pro začátečníka je snadným řešením použití Shared (sdílených) polí. Zběhlejší uživatelé mohou zvážit použití funkcí pro správu paměti, jako je Allocate (přidělení). To je důležité zvláště v DOS, protože to umožňuje spuštění aplikací na starých PC s malou pamětí, jakož i využívat obrovské RAM a zpracovávat velké objemy dat.

23. Pomoc ! Vláknové (threading) funkce v DOS nefungují?
Funkce podporující vláknové zpracování v DOS nejsou podporovány, možná dokonce nebudou podporovány nikdy. Důvod je prostý: Jádro DOS, ani DPMI host/standard, ani "GO32" DOS Extender vlákna nepodporují, narozdíl od jádra Win32 a jádra Linuxu. Avšak možnosti v DOS jsou: můžete nadřadit váš 'threading' nad DPMI, a z několika dalších např.:
    • Nastavit ISR, viz "ISR_TIMER.BAS" kupříkladu. Nejedná se o úplnou náhradu, ale v některých případech postačí.
    • K dispozici je knihovna pthreads pro DJGPP umožňující, do určité míry, emulovat (napodobovat) Linuxový způsob vláknového zpracování. Funguje přijatelně pro [P]7-ZIP DJGPP port (napsaný v C++), testy pro FB zatím probíhají.
    • Viz fórum t=21274

24. Spustitelný soubor vyrobený FB DOS je obrovský!
To je běžné, neboť zatím není způsob, jak to jednoduše opravit. FB je 32-bitový HLL kompilátor a většina velikosti pochází z DJGPP. !Napište mi! (viz fórum: t=11757)

25. Kompilace s FB je velice pomalá!
Problém: "FBC trvá 10 sekund zkompilovat 'Hello world' program ! TurboBASIC / QBASIC / VBDOS / PowerBASIC zvládnou stejnou práci za < 1 sekundu..."

Ano, to je pravda, ale ne chyba. FB kompiluje své zdrojáky ve 3 krocích a ukládá zprostředkující soubory, jak je popsáno v Příkazový řádek kompilátoru, zatímco mnoho starších překladačů dělá jen jeden průchod pamětí. To se pak dotýká především výkonu v oblasti I/O, viz FAQ 27 níže o možnostech zlepšení, přičemž lze dosáhnout malých zlepšení i využitím rezidentní DPMI host (HDPMI32 -r nebo CWSDPMI -p , viz FAQ 4 výše). Všimněte si, že zpoždění má vždy téměř standardní délku, takže čím větší projekt, tím méně se projevuje.

26. SLEEP nepracuje! Jak vytvořím zpoždění?
Sleep funguje ... ale má rozlišení jen cca 55ms = 1/18s, takže třeba "SLEEP 500" bude v pořádku, zatímco "SLEEP 2" pro 2 milisekundy se vůbec neprojeví. !Napište mi/Opravte mne!
    • PIT / BIOS časovače (běží standardně na 18.2 Hz) můžete číst z BIOSu, nebo můžete nastavit vlastní, viz "ISR_TIMER.BAS" např., a zvýšit frekvenci PIT (používejte obezřetně).
    • Dotazováním BIOS timeru + PIT counteru, motodou z TIMERHLP.ASM z DKRNL32, umožňuje zvyšování přesnosti, bez zvyšování frekvence PIT.
    • RDTSC instrukce (Pentium a novější)
    • RTC hodiny
    • Zpožďovací smyčky

27. Výkon v DOS je velmi špatný!
Problém: "Výkon v DOS je nízký v porovnání s Win32 / Linux binárkami ze stejného zdrojáku!" nebo "Ta samá binárka běží mnohem rychleji v NTVDM než v DOS !"

To se může skutečně stát, nicméně, není důvod, aby byl DOS předurčen jako pomalejší. Je třeba najít neefektivity a určit oblasti, kde se výkon ztrácí.

Soborové I/O: DOS ve výchozím stavu používá velmi málo RAM pro své buffery, zatímco jiné systémy jsou agresivnější a pro ukládání souborů do mezipaměti využívají mnohem více RAM. Při zpracovávání velkého množství malých souborů pak dochází k degradaci výkonu. Řešením je nainstalovat filecache (např. LBACache), nebo RAMDISK (dobrý je: SRDISK) a nakopírovat tam "obtěžující" soubory (např. instalaci FB), aby pracovaly tam (nezapomínejte raději často zálohovat svou práci). Obojí bude potřebovat XMS host (použijte HIMEMX). DOS také defaultně používá BIOS pro přístup k HDD, zatímco jiné systémy se snaží najít a použít DMA. Test util: IDECHECK od Japheth (Download: japheth.de/Download/IDECheck.zip) - spustit v "I13" a "DMA" režimu a porovnat výsledky. Když je "DMA" mnohem rychlejší (může být i 1x...10x, podle modelu PC), pak instalace DOS DMA ovladače (např. vyzkoušejte XDMA 3.1) může přinést velké zrychlení, zvláště pro velké soubory. Také čtení a zápis dat ve větších objemech (alespoň 16 KiB) přináší zrychlení oproti jednobajtovým. Jiné operační systémy data zpracovávají odlišně, ale na DOSu každé souborové I/O volání způsobuje malé zpoždění (nejméně 13 ms při roztočeném HDD), a tak je pro rychlost rozhodující kód s dobrým využíváním bufferů.

Grafika: Pentium 2 a novější CPUs mají vlastnost související s mezipamětí s názvem "MTRR", která zápis do videoRAM urychluje. Ovladače jiných OS to obvykle dělají samy. DOS ne (protože se na grafiku neorientuje vůbec), ani FB GFX ne. Použijte "VESAMTRR" nástroj od Japheth (obsažený v "HXGUI.ZIP" balíku), což umožní zrychlení, více režimů a většina "non-fatal" aplikací nespadne až do restartu. Možný faktor zrychlení se mění v závislosti na modelu PC, a to 20x i více. Také manipulace s myší žere hodně výkonu procesoru na DOSu, což je známá slabina, dá se ovlivnit změnou ovladače, ale moc od toho nečekejte (viz FAQ 20).

28. Mohu přistupovat sektorům disku pomocí FB?
Můžete... ale FreeBASIC vám s tím moc pomáhat nebude, přenosné řešení není, jen se dá použít OS specifická low-level cesta. 3 metody pro DOS:
    • Použít logických funkcí k přístupu disku pod DOS a pro přístup k sektoru obcházet souborový systém, viz fórum: freebasic.net/forum/viewtopic.php?t=11830.
    • Použít fyzický disk BIOS INT 13, a obejít DOS.
    • Použít CPU porty, nejnižší úroveň, a obejít jak DOS, tak BIOS, viz fórum freebasic.net/forum/viewtopic.php?t=16196, zdroj IDECHECK z FAQ 27, Flat Assembler fórum nebo některý z rozvíjených zdrojáků OS.
Pozn.: Takové experimenty jsou trochu nebezpečné. Můžete si smazat nechtěně data, či již dokonce vůbec nespustíte vaše PC, když něco poděláte ... Ale co? Koupíte si jiné...

29. Mohu použít inline ASM s pokročilými instrukcemi jako SSE v DOSu?
Můžete, ale SSE2 potřebuje předevšim polit provádění. To je obvykle považováno za starost DPMI host, HDPMI32 a CWSDPMI 7 bude předstírat, že většina ostatních hosts neexistuje. Ujistěte se, že jste pro CPUID použili správné instrukce (pokyny), nejlépe ještě před jejich použitím. Jako nápad je to dobré, pokud si jste jisti kompatibilitou se staršími CPU (... Pentium, 80386), že podporují stejné instrukce a zabráníte konfliktům v CMOV.

Viz též
Překlad: Gmisiycs 23.2.2016