INFO LIBRARY (c)1997,98 Štěpán Roh ---------------------------------- verze 0.20 Dokumentace ke knihovně 1.1 rev. 5 6.3.1998 Obsah ----- Stručný popis Soubory Informace o jednotlivých částech knihovny Chyby a nefunkčnosti Budoucí verze a projekty Upozornění autora Stručný popis ------------- Info Library (dále INFOLIB) je knihovna napsaná v jazyce C mající za úkol ulehčit práci programátorovi tvořícímu v prostředí DOS s určením konfigurace počítače. V současné době pokrývá téměř celý počítač od procesoru přes disky po operační systém. Není pokryto zcela všechno a leccos by šlo vylepšit, leč vývoj pokračuje, a tak se vše postupem času zlepší. Malé varování - knihovna je určena k práci pouze pod DOS či jeho emulací (např. DOS Box ve Windows) ve standardním módu. Pokoušení se o její start z protected módu či z Windows programu může způsobit nečekané věci. Jediným řešením je inicializovat ji před přepnutím do chráněného módu procesoru a poté využívat jejích datových struktur. Důvodem k tomuto opatření je nepřístupnost některých přerušení či služeb ve chráněném módu či použití standardních služeb místo chráněných (příkladem budiž VESA VBE). Soubory ------- Knihovna se skládá z těchto souborů : INFO.ASM kód knihovny v asembleru INFO.DOC tato dokumentace INFO.H hlavičkový soubor INFO.HIS historie verzí INFO.LIB soubor knihovny INFO.OBJ obj soubor vzniklý z INFO.ASM INFO.PRJ soubor projektu Celá knihovna vznikla za použití Borland C++ 3.1, s jinými překladači nebyla testována. INFO.ASM je přeložitelný pod asemblerem, který zvládá IDEAL mód (mód asembleru TASM) - testováno pouze s TASM 3.1. INFO.H je standardní hlavičkový soubor jazyka C - testováno s Borland C++ 3.1. Informace o jednotlivých částech knihovny ----------------------------------------- Celá knihovna je poměrně dobře zdokumentována ve zdrojovém kódu a hlavičkovém souboru. Obsahuje jedinou funkci initInfo, kterou se inicializují datové struktury. Veškeré informace jsou poté dostupné přes globální proměnnou systemInfo. Jedná se o strukturu obsahující několik podstruktur a položku valid. Proměnná valid značí, zda-li je obsah systemInfo platný, tj. byla-li již knihovna inicializována (v tom případě obsahuje hodnotu 80 hexa). Všechny podstruktury jsou vysvětleny níže a to touto formou : jméno bloku - jméno podstruktury (ve formě systemInfo.jméno) seznam a vysvětlení jednotlivých položek omezení které hodnoty byly potvrzeny testem seznam pramenů, odkud se čerpalo Operační systém - systemInfo.OS ------------------------------- Položky : unsigned char type; typ operačního systému : #define OS_DOS 0 // MS DOS a kompatibilní #define OS_WIN 1 // MS Windows a kompatibilní #define OS_OS2 2 // IBM OS/2 unsigned char majorVer; majoritní číslo verze OS (majoritní.minoritní) unsigned char minorVer; minoritní číslo verze OS (majoritní.minoritní) unsigned char DOS_majorVer; majoritní číslo verze DOS či jeho emulace (majoritní.minoritní) unsigned char DOS_minorVer; minoritní číslo verze DOS či jeho emulace (majoritní.minoritní) Omezení : Verze OS_WIN a OS_OS2 nejsou zjišťovány. Testy (0.20) : DOS 6.22 Windows 3.11 - DOS Prompt Windows 95 - DOS 7.0 Windows 95 - DOS Box Windows NT 4.0 - DOS Box DOSEMU 0.66.7 - DOS 6.22 Prameny : knihovna C.I.A. - Dement Procesor a matematický koprocesor - systemInfo.proc --------------------------------------------------- Položky : unsigned char CPU_type; typ procesoru #define CPU_86 0 // Intel 8088/86 a kompatibilní #define CPU_186 1 // Intel 80186 a kompatibilní #define CPU_286 2 // Intel 80286 a kompatibilní #define CPU_386 3 // Intel 80386 a kompatibilní #define CPU_486 4 // i486 (tm) a kompatibilní #define CPU_586 5 // Intel Pentium (tm) a kompatibilní #define CPU_686 6 // Intel Pentium Pro (tm) a kompatibilní význam vyšších čísel mi není znám unsigned char isProtected; 1 značí, že procesor běží v chráněném režimu (V86 módu) unsigned char hasCPUID; 1 značí, že procesor disponuje instrukcí CPUID, tím je podmíněna platnost hodnot vendorName, stepLevel, modelNumber a isMMX. char vendorName[13]; jméno procesoru - např. originální Intel procesory mají 'GenuineIntel' unsigned char stepLevel; ?stepping level? - nevím unsigned char modelNumber; ?model number? - nevím unsigned char isMMX; 1 značí, že se jedná o procesor podporující MMX instrukce unsigned char FPU_type; typ matematického koprocesoru #define FPU_NO 0 // nepřítomen #define FPU_87 1 // Intel 8087 a kompatibilní #define FPU_287 2 // Intel 80287 a kompatibilní #define FPU_387 3 // Intel 80387 a kompatibilní #define FPU_487 4 // vestavěný koprocesor v CPU_486 #define FPU_587 5 // vestavěný koprocesor v CPU_586 unsigned char isEmulated; 1 značí, že je koprocesor emulován softwarově Testy (0.20) : i486 DX4 (i486 je registrovaná značka Intelu) Intel Pentium neznámá 80386 SX Intel Pentium II (hlásí se jako PPro s MMX) Intel Pentium MMX Prameny : knihovna SuperVGA Kit 5.0 - autorem SciTech Software Intel iAPx86 instruction set - October 1996 Fyzická paměť - systemInfo.mem ------------------------------ Položky : unsigned int conv; celková velikost paměti pod 1 MB (v KB), bez 384 KB rezervované a BIOS unsigned int ext; celková velikost paměti nad 1 MB (v KB) Testy (0.20) : 12 MB, 4 MB, 32 MB, 16 MB - není důvod k nefunkčnosti i při jiných velikostech Prameny : TechHelp z roku 1990 - Flambeaux Software Myš - systemInfo.mouse ---------------------- Položky : unsigned char isPresent; 1 značí, že je ovladač myši přítomen a ostatní informace jsou platné unsigned char minorVer; minoritní číslo verze ovladače myši (majoritní.minoritní) unsigned char majorVer; majoritní číslo verze ovladače myši (majoritní.minoritní) unsigned char type; typ myši #define MOUSE_BUS 1 // přímo na systémové sběrnici #define MOUSE_SERIAL 2 // sériová (COMx) #define MOUSE_INPORT 3 // Inport #define MOUSE_PS2 4 // IBM PS/2 #define MOUSE_HP 5 // HP unsigned char IRQ; IRQ obsazené myší (0 znamená myš PS/2) unsigned int buttNo; počet tlačítek myši Testy (0.20) : Microsoft Mouse 10.20 Genius Mouse 10.20 neznámý ovladač 8.3 neznámý ovladač 8.20 DOSEMU 0.66.7 ovladač verze 7.0 Prameny : TechHelp z roku 1990 - Flambeaux Software Expanded Memory Specification - systemInfo.EMS ---------------------------------------------- Položky : unsigned char isPresent; 1 značí, že je přítomen expanded Memory Manager a ostatní informace jsou platné unsigned char minorVer; minoritní číslo verze EMM (majoritní.minoritní) unsigned char majorVer; majoritní číslo verze EMM (majoritní.minoritní) unsigned int totalMem; celková dostupná Expanded Memory (v 16 KB stránkách) unsigned int frameSeg; číslo segmentu, kde začíná EMS rámec Testy (0.20) : EMM386 z DOS 6.22 - EMM 4.0 EMM 4.0 z Windows 95 v DOS Boxu EMM 4.0 z DOSEMU 0.66.7 Prameny : Lotus/Intel/Microsoft EMS 4.0 October 1987 Extended Memory Specification - XMS ----------------------------------- Položky : unsigned char isPresent; 1 značí přítomnost eXtended Memory Manager a platnost zbylých informací int far (*func) (void); adresa obslužné rutiny XMM unsigned char minorVer; minoritní číslo verze XMS (majoritní.minoritní) unsigned char majorVer; majoritní číslo verze XMS (majoritní.minoritní) unsigned char minorRev; minoritní číslo verze XMM (majoritní.minoritní) unsigned char majorRev; minoritní číslo verze XMM (majoritní.minoritní) unsigned char HMA; 1 značí přítomnost High Memory Area unsigned char A20; 1 značí zapnutí A20 Testy (0.20) : HIMEM.SYS 3.1 (XMS 3.0) z DOS 6.22 XMM 3.5 (XMS 3.0) z Windows 95 XMM 2.1 (XMS 2.0) z Windows 3.11 XMM 2.77 (XMS 2.0) z Windows NT 4.0 XMM 3.1 (XMS 3.0) z DOSEMU 0.66.7 Prameny : eXtended Memory Specification 2.0 July 19, 1988 eXtended Memory Specification 3.0 January 1991 Videoadaptér - systemInfo.video -------------------------------- Položky : unsigned char type; typ videoadaptéru #define VIDEO_NO 0 // žádný #define VIDEO_UNKNOWN 1 // neznámý #define VIDEO_MDA 2 // MDA #define VIDEO_CGA 3 // CGA #define VIDEO_MCGA 4 // MCGA #define VIDEO_EGA 5 // EGA #define VIDEO_VGA 6 // VGA #define VIDEO_VESA 7 // VESA unsigned char color; 1 značí, že je videoadaptér schopen barev unsigned int memory; velikost paměti videoadaptéru (v 64 KB blocích) struct S_VBEinfo VESA; dodatečné informace k VESA adaptérům (viz níže) char signature[4]; obsahuje 'VESA', je-li VESA adaptér přítomen unsigned char minorVer; minoritní číslo verze VBE (majoritní.minoritní) unsigned char majorVer; majoritní číslo verze VBE (majoritní.minoritní) musí být alespoň 2, aby platil obsah položek minorSWver, majorSWver, vendorName, productName, productRev a dup2 char far * OEMstr; text od výrobce (většinou jméno adaptéru) unsigned char capabBits[4]; pole vlastností karty unsigned far char *modeList; adresa pole podporovaných módů unsigned int memory; paměť adaptéru (v 64 KB blocích) unsigned char minorSWver; minoritní číslo revize software adaptéru (majoritní.minoritní) unsigned char majorSWver; majoritní číslo revize software adaptéru (majoritní.minoritní) char far * vendorName; jméno výrobce char far * productName; jméno adaptéru char far * productRev; revize adaptéru unsigned char dup[222]; volných 222 bytů unsigned char dup2[256]; pole obsahující všechny texty Omezení : Velikost paměti videoadaptéru je zjišťována až u EGA karet a vyšších Testy (0.20) : Avance Logic 2301 (1 MB) - VBE 1.2 ATI Mach64 VT (2 MB) - VBE 2.0 Trident (512 KB) - asi falešná VBE 1.2 Diamond Stealth s S3 Vision864 čipem (2 MB) - VBE 1.2 STB Velocity 128 s RIVA 128 čipem (4 MB) - VBE 3.0 (?) DOSEMU 0.66.7 VGAemu (1 MB) - VBE 1.1 - pod X windows (xdos) Prameny : Generic BIOS' Programers Reference VESA VBE 2.0 specification 1.1 Disky, diskety, CD-ROM ... - systemInfo.disk[26] ------------------------------------------------ Disk A: je 0, B: je 1, atd. Položky : struct S_diskInfo { unsigned char type; typ disku #define DISK_NONE 0 // žádný disk #define DISK_REMOVE 1 // vyjímatelný disk (disketa) #define DISK_REMOVE360 11 // vyjímatelný disk (disketa) - 360 KB #define DISK_REMOVE120 12 // vyjímatelný disk (disketa) - 1.2 MB #define DISK_REMOVE720 13 // vyjímatelný disk (disketa) - 720 KB #define DISK_REMOVE144 14 // vyjímatelný disk (disketa) - 1.44 MB #define DISK_HARD 2 // harddisk #define DISK_REMOTE 3 // síťový disk (chybné?) #define DISK_CDROM 4 // CD-ROM #define DISK_RAMDISK 5 // RAM-DISK (nefunkční) #define DISK_REMOVESH 6 // stínová disketa (zrcadlo) unsigned int HD_sectorSize; velikost sektoru (v B) - pouze harddisk unsigned int HD_clusterSize; velikost clusteru (v sektorech) - pouze harddisk unsigned int HD_clusters; pocet clusteru - pouze harddisk Omezení : Nedetekuje ramdisk. Nepozná 2.88 MB diskety. Detekuje CD-ROM spravované MSCDEX 2.00 a vyšší. Testy (0.20) : 1.44 MB disketa IDE pevný disk EIDE pevný disk ATAPI CD-ROM s MSCDEX 2.23 EIDE pevný disk Western Digital Caviar 3.8 GB s EZ-Drive Prameny : Generic BIOS' Programers Reference Dos Protected Mode Interface - systemInfo.DPMI ---------------------------------------------- Položky : unsigned char isPresent; 1 značí přítomnost DPMI serveru a platnost ostatních informací unsigned char type; typ DPMI serveru #define DPMI_16BIT 0 // 16-bitové DPMI #define DPMI_32BIT 1 // 32-bitové DPMI unsigned char minorVer; minoritní číslo verze DPMI (majoritní.minoritní) unsigned char majorVer; majoritní číslo verze DPMI (majoritní.minoritní) void far * enterProt; adresa vstupního bodu do chráněného módu (nevolat přímo!) Testy (0.20) : 32-bitové DPMI 0.9 z Windows 3.11 16-bitové DPMI 0.9 z Borland C++ 3.1 32-bitové CWSDPMI 0.9 z DJGPP V2 32-bitový PMODE 0.9 z DJGPP V2 32-bitové DPMI 0.9 z Windows 95 32-bitové DPMI 0.9 z Windows NT 4.0 32-bitové DPMI 0.9 z DOSEMU 0.66.7 Prameny : DPMI specification 0.9 DPMI specification 1.00 Virtual Control Program Interface - systemInfo.VCPI --------------------------------------------------- Položky : unsigned char isPresent; 1 značí přítomnost VCPI a platnost ostatních informací unsigned char minorVer; minoritní číslo verze VCPI (majoritní.minoritní) unsigned char majorVer; majoritní číslo verze VCPI (majoritní.minoritní) Testy (0.20) : EMM386 VCPI 1.0 z DOS 6.22 Prameny : PMODE extender z DJGPP V2 - Charles Schefford a Thomas Pytel Protected Mode Tutorial 0.02 - Till Gerken Virtual DMA Specification - VDS ------------------------------- Položky : unsigned char isPresent; 1 značí přítomnost VDS a platnost ostatních informací unsigned char minorVer; minoritní číslo verze VDS (majoritní.minoritní) unsigned char majorVer; majoritní číslo verze VDS (majoritní.minoritní) unsigned int prodNumber; číslo produktu unsigned int revNumber; číslo revize Testy (0.20) : XMM VDS 1.0 z DOS 6.22 XMM VDS 1.0 z Windows 3.11 XMM VDS 1.0 z Windows 95 XMM VDS 129.2 z DOSEMU 0.66.7 (možná chyba?) Prameny : Protected Mode Tutorial 0.02 - Till Gerken Chyby a nefunkčnosti -------------------- Novell Netware 3.12 (a asi i všechny ostatní verze) diskety hlásí jako DISK_REMOTE (místo DISK_REMOVE....) mapované disky hlásí jako DISK_HARD (místo DISK_REMOTE) Windows NT 4.0 (a asi i ostatní verze NT) hlásí DOS 5.0 (a asi to bude pravda) hlásí MOUSE_INPORT místo MOUSE_SERIAL předstírá, že není připojena videokarta hlásí jen tolik celkové paměti kolik je povoleno DOS aplikaci DOSEMU 0.66.7 (a asi i ostatní verze) hlásí MOUSE_PS2 se 2 tlač. místo MOUSE_SERIAL se 3 tlač. hlásí 16 MB videopaměti místo 2 MB diskety hlásí jako DISK_REMOTE hlásí jen takový procesor jaký je povolen v dosemu.conf hlásí jen tolik celkové paměti jako je povoleno v dosemu.conf Budoucí verze a projekty ------------------------ Budoucí verze bude možná obsahovat některá z těchto vylepšení : Větší informace o CD-ROM a MSCDEX. Informace o fyzických harddiscích. Velikost paměti videoadaptéru i pro nižši než EGA. Detekce CD-ROM s jakýmkoliv MSCDEX. Detekce RAMDISKu. Detekce Zip, Jaz, a:drive (LS-120) apod. vyměnitelných zařízení. Upozornění autora ----------------- Tímto se zříkám veškeré odpovědnosti za jakékoliv škody způsobené touto knihovnou (tj. USE AT OWN RISK!). Tato knihovna je šířena jako FREEWARE, který však můžete měnit k obrazu svému (jediné, co MUSÍ zbýt z původního kódu, je můj copyright :-). Veškeré chyby a připomínky mi neváhejte napsat. (c)1997,98 Štěpán Roh mail_to : src@post.cz Veškeré ochranné značky a registrovaná jména jsou zajisté někým vlastněny.