Počítač s 286 jsem měl. Ten mikroprocesor mi připadl jako trošku z jiné planety :-) Sice uměl chráněný režim, ale každej si to musel programovat sám, protože extender se k DOSu nedodával. To by asi nevadilo, ale možná spíš mohli místo chráněného režimu zvětšit adresovací registry aspoň na těch 24 bitů, jako měla Motorola. Takto se furt šmudlalo s 16bitovými offsety, i když asi každý ATčko mělo 1MB RAM.
Jestli si to pamatuju, tak Borland Pascal 7 to treba umel, v podstate kazdy moderni prekladac mel extender.
Ale byla tam srandicek celkem hodne, treba s navratem zpatky do real mode - design 286 byl zjevne z hlediska bezpecnosti, takze protected mode nesel vypnout, takze se to delalo (tusim pres 8042? fakt uz je to nejaka doba) HW resetem procesoru :) Teprve 386 se zacala chovat rozumneji.
A pak tam byl jeste jeden vtipny rozdil (doufam, ze to po tech mesicich nepomotam), v real mode ffff:0010 byl na 8086/8088 pamet na adrese 0, kdezto na 286 na 1048576.
Nebo treba takhle se merila na 86-compatible delka instrukcni fronty, nejsem si uplne jistej, jestli to byla uz 286, nebo az 386, kde se konecne fronta po zapisu spravne zinvalidovala a tim padem pak bylo v BX spravnych 0
MOV AL, 0x90 ; NOP
MOV DI,offset xxx
MOV CX,16
XOR BX,BX
REP STOSB
xxx: INC BX
INC BX
...3. 12. 2024, 09:06 editováno autorem komentáře
Ah A20 Gate - o tom se jeste musim zminit, to byla brutalita (a vlastne jeste je ;)
Jinak ta situace byla trosku zvlastni, protoze fakt mel malokdo vic nez tech 1-2 MB (takze strikte receno nebyl chraneny rezim az tak uzitecny*), ale kazdej potreboval adresovat pres vic segmentu. Takze jsme meli tiny, small, large a ja nevim kolik rezimu aplikace (treba ty Turbo prekladace to nabizely), to Amigisti a STckari neznali :)
* vsak XMS/EMS byl pokus o real mode, ale s vic pameti, proste takova obezlicka
EMS nebyl pokus o real mód, EMS bylo víc paměti v real módu, ale stránkované.
Ano, situace byla zvláštní. Chráněný mód 286 byl navržený pro víceuživatelský víceúlohový systém. Píše se, že segmentace, tak jak je v chráněném módu 286, vychází z Mulťixu. Netware jej úspěšně využil, tak to asi fungovalo.
Mno, NetWare a uspesne - predpokladam, ze mate na mysli NW2.15, ktera jela bud dedikovane v protected mode, nebo nededikovane na DOSove masine a cele to bylo takove zvlastni (treba linkovani printserveru :) )
Znormalizovalo se to na NW3.1, ktery uz jel v 32bitovem flat memory s kooperativnim multitaskem na ring0 vcetne NLMek, vicemene to same i 4.x a k vetsimu prepracovani doslo az na NW5.
jo s EMS jsem to myslel stejně, jen jsem to blbě napsal.
Pořád si myslím (a asi si rozumíme), že v té době by možná bylo lepší mít CPU s rozumnějším adresováním (třeba i se segmenty, ale s delšími offsety), než CPU s podporou chráněného režimu, kdy se stejně muselo se segmentací pořád bojovat.
Protože ano, chráněný režim je pěkný na papíře, ale pokud mám slabé CPU s 1 nebo 2MB paměti, navíc s jednotaskovým OS, tak na tom moc chráněný režim ani nepotřebuju. Spíš je to obezlička jen proto, abych mohl použít větší paměť, a to za cenu hodně velké práce.
Nabízela by se možnost přepnout výpočet fyzické adresy z toho strašného posuň segment a sečti na pouhé sečti - nebo cokoliv jiného, ale rázem by zhebly všechny programy, které spoléhají na to, že na 8086 to tak bylo.
Ano, v jednoúlohovém DOSu chráněný mód potřeba nebyl. Ale ono se asi moc nepředpokládalo, že počítač s nejnovějším mikroprocesorem a 1 MB paměti si někdo koupí proto, aby na něm jel 1-2-3 nebo T602.
Chráněný režim není jen na papíře hezký, to je nutná podmínka toho, aby na počítači mohl běžet operační systém svého jména hodný, taky si všimněte, že úvodní otázka rozhovoru s člověkem z Microsoftu "Padají Vám Windows?" zmizela z počítačových časopisů jenom chvilku předtím, než zmizely ty časopisy (odpovědi byly, pro úplnost, 95 už ne, 98 už ne, 2000 už ne, XP už ne).
No jo, jenže cena pamětí se mezi roky 1979 (kdy se 286 asi tak začala navrhovat) a 1990 (kdy my jsme ji s tím jedním megem dostali do rukou a začali jsme si dělat názor, co je málo a co hodně paměti). Máte pocit, že tehdy býval problém nemoct v kuse adresovat víc než 64k, když to tak mělo milované PDP, nově navrhovaná iAPX 432 i úplně všechny osmibity? Bylo by to pěkné, kdyby 286 měla 24-bitové registry i ALU a uměla svých 16 MB adresovat jako jeden velký flák a Intelu by to nepochybně přineslo nehynoucí slávu a asi tak tři nadšené komentáře na Rootu. Ale důležité otázky znějí: přineslo by to nějaké peníze? Vypadalo to tehdy, že by to přineslo nějaké peníze?
jj byval to problem, omezeni na 64kB (zejmena dat) bylo vlastne v hodne SW. A to, ze to Intel neumel, je videt - 286 se pouzivala kde? Jen v PC, kdezto ostatni "lepsi" platformy jako Amiga, STcko, Mac a i ten Sun a nektery herni konzole, ktery z hlavy uz nereknu, mely 68k, ktera to vice ci mene zvladala (externe ne, ale interne se adresovalo bez problemu). Takze 286ku nikdo jinej neadaptoval a paradoxne na PC se jelo prakticky jen v DOSu v real model.
"tri nadsene komentare" - no programovani segment+offset bylo zlo, to si dovolim tvrdit, ze potvrdi kazdy, kdo v tom realne musel delat.
no vsak to pisu, ale zkusim tedy konkretneji. 286 vysla v roce 1982. V te dobe existoval na papire navrh Atari ST, ale jen jako blokove schema + vlastnosti zakaznickych obvodu. Hledali vhodnej mikroprocesor a mohli si vybrat cokoli (novej pocitac, zadna kompatibilita se neresila).
Urcite a to vime z dobovych clanku zahodili nejaky CPU od NS a skoncili u 68k, i kdyz z toho pry taky nebyli nadseni. Tady se dalo rict, ze 286 byl ve spravnem case na spravnem miste, ale nebyl adaptovan.
(Amiga, Macintosh - tam to tak podrobne neznam, ale casove se to shoduje taky)
To by se kompatibilita změnila dost výrazně, bo software by stále potřeboval předávat segment+offset, zatímco nový kód by v principu potřeboval jen offset.
Nicméně nesouhlasím ani s předchozím, že pokračování segment+offset kompatibility zachovalo, bo část kódu pro větší struktury operovala s pravidlem, že adresa = 16 * segment + offset .
Takže krok u 386 nevyhnutelný, stejně tak cena za nekompatilitu...
386 v reálném režimu je prakticky 8086 (buď reálná nebo virtualizovaná). Pokud se bavíme o tom, zda dokáže 386 pustit 8086 kód - pak ano a taky to fungovalo. Pokud se bavíme o interakci mezi dvěma knihovna 8086 a 386 v rámci jednoho programu, tak ne - bo 386 kód nemá způsob, jak předat adresu tomu 8086 kódu, neboť po ořezání bude nejspíš neúplná - a zde je ta nekompatibilita. Pominu-li fakt, že záměrná nekompatibilita byla ve změně velikostí operandů.
Nejsem si teď jistý, ale nemá v reálném módu mov ax, [di] stejný opcode jako mov eax,[edi] v chráněném? A ty velikostní prefixy se tam začnou rojit, až když začnu vynucovat šestnácti nebo osmibitové operandy?
Podstatné je, že když začnu pro adresy používat širší registry, což by se nám v DOSu velice líbilo, tak se rozsypou všechny datové struktury postavené na tom, že registry jsou šestnáctibitové. Ono by se nám asi dvojnásob líbilo, kdyby po vzoru Z80 přibyly širší indexové registry, které by uměly proindexovat celou fyzickou paměť, ale přijde mi, že na konci sedmdesátek vypadal zajímavěji počítač, který bude umět izolovat uživatele a jejich prasecky napsané programy od jiných uživatelů s jinak naprasenými programy, než počítač, který bude umět najednou manipulovat s megabajty dat.
To jsem myslel tou poslední větou "Záměrná nekompatibilita ve velikost operandů" . Pochopil jsem původní otázku jako co kdyby to Intel udělal stejně pro oba 8086 a 386 režimy, kde to selže na useknutých offsetech. Varianta implicitně pro offsety a explicitně pro operandy je taky špatně, bo offset je občas inkrementován jako normální operand.
Intel tehdy udělal relativně správnou věc. Pominu-li alternativu celou x86 už tehdy zahodit (což nebylo realistické tak jako je dnes).