Velmi pěkný článek – díky za něj. Sice asi nikdy nebudu psát vlastní os, ale určitš se takové znalosti vyplatí, až zase někdy budu mít tendence něco nastavovat v kernelu.
Takže se těším na další díly a začínám mít dojem, že je to další serial, který by si zasloužil vyjít též v knihovně roota, v PDF formátu…
To blikani afaik ovlivnuje bios a zalezi na jeho nastaveni. V podstate jsou dva mody – bud to umi blikat a je 8 barev pozadi nebo to blikat neumi a je 16 barev pozadi. To se da nastavit nejakou funkci VESA biosu. Takze kdyz to nefunguje treba v QEMU, tak by mozna stacilo zavolat prislusnou funkci a nastavit si, jestli chce clovek blikani nebo vic barev
ASCII je opravdu 7bitový a za svých časů se používal 8. bit jako paritní, dnes se jednalo o ASCII + ASCII Extended, což 8bitu má a využije se všech 8bitů – více na wiki.
Dobry clanek :-)
Jinak zmena palety samozrejmne bez problemu jde, pomoci zapisu do registru VGA. Jde pouze o to, ze ta paleta je globalni, takze i kdyz ji zmenim, stale mam pouze 16 (i kdyz jinych) barev k dispozici.
Stejne tak blikani – da se nastavit dalsim registrem, kterym lze prepinat mod 16 barev versus 8 barev + blikani.
I ‚tvar‘ kurzoru se da pres registry VGA menit :-)
„což dovoluje použít např. stránkování, virtuální paměť nebo bezpečnější multitasking.“
WTF?! Stránkování a virtuální paměť jsou záležitostí správy paměti, multitasking je záležitostí správy procesů. Asi jsem to pochopil jinak, než to autor myslel, ale tak, jak to je napsané, tak to nedává smysl – něco ve stylu „což dovoluje použít např. sandály, kopačky nebo pohodlnější maliny“.
Nejsem sice odborník, ale osobně bych to chápal trochu jinak – v té větě není, že to dovoluje multitasking, ale „bezpečnější multitasking“, tj. v případě, že z jiných důvodů (správa procesoru, jak jste podotkl) lze používat multitasking, pak daná funkce umožňuje, aby byl bezpečnější, než kdyby nebyla přístupná. Na Vašem příkladě bych si dovolil upravit větu na „což dovoluje použít např. sandály, kopačky nebo bezpečnější sběr malin“. Opravte mě někdo, pokud se mýlím.
Pouzivat bitova pole pro reprezentaci atributu neni dvakrat vhodne, protoze jejich organizace v pameti neni standardem definovana a i GCC pouziva odlisne zpusoby v zavislosti na architekture (na big endian strojich je uklada v opacnem poradi nez na little endian strojich). Obvykle reseni je pouzit tam unsigned byte a k subpolozkam pristupovat pres bitove operace.
Mimochodem, VGA karta v zavislosti na nastaveni umoznuje i pouziti 512 znaku, kde jako nejvyssi bit se pouzije jeden z ‚atributovych‘ bitu.
My ale jádro píšeme pro x86 (jak už jsem psal v minulém díle), a navíc na jiných architekturách se s VGA v praxi téměř nesetkáte. Dalším důvodem proč je to tak napsáno je to, že se to dá lépe pochopit – v minulém díle se používaly ještě bitové operace, které to sice všechno urychlí (zjednoduší), ale ten kdo jim nerozumí, nepochopí. Jak jsem psal v článku – cílem není vytvořit dokonalou věc.
> navíc na jiných architekturách se s VGA v praxi téměř nesetkáte
To neni uplne pravda – v mezidobi, kdy vyrobci ne-PC desktopovych pocitacu jeste existovali, ale uz presli na PCI sbernice, byly tyto pocitace bezne vybavovany stejnymi grafickymi chipy jako bezna PC. Sice obvykle nestartovali v textovem rezimu, ale v rezimu linearniho framebufferu (zalezi na firmware, jak grafickou kartu nastavi) a registry mely take mapovane jinam, ale jinak slo o VGA kompatibilni karty.
Mimochodem, osobne bych tipoval, ze vic lidi zna bitove operace, nez bitfieldy. Ale je to celkem jedno.
Proto jsem napsal „téměř“, ne „vůbec“. Myslím, že je pochopitelná výše uvedená struktura mnohem více, než kdybychom si hráli s maskami – normálně bych je použil taky, ale takhle to je, jak už jsem také psal, jednodušší k pochopení – pokud víte jak vypadá „sled“ dat v celém poli, pak není problém to napsat pomocí bitových operací.
> Proto jsem napsal „téměř“, ne „vůbec“
No ono to mezidobi bylo pomerne dlouhe, napr. tam spadaji vsechny novejsi (ale jeste PPC) Macintosche a znacna cast Ultrasparcovych workstations. Osobne bych tipoval, ze kdyz se nekdo jeste dneska setka s ne-PC (relativne) modernim desktopovym pocitacem, tak spis bude mit VGA-kompatibilni grafiku nez ze ne.
Ono to neni ani tak cesta do praveku ci neduvera k novinka, ale prosty dusledek faktu, ze standard C nerika, zda prvni jednobitovy bitfield je MSB nebo LSB. Jsou tu dve stejne smysluplne interpretace (a v pripade mnoziny bitfieldu presahujicich jeden byte dokonce ctyri).
Obecne bitfieldy jsou natolik podspecifikovane, ze vyuzivat je v pripade, kdy na reprezentaci v pameti zalezi, je zbytecne riziko.
> Výpočet vypadá následovně: adresa = 0×b8000 + [(3–1) * 80] + (5–1)
Tady je věcná chyba. Jeden pár znak-atribut zabírá 2 bajty, takže se musí násobit dvěma:
adresa = (char*)0xb8000 + (((3–1) * 80) + (5–1)) * 2
Je třeba mít stále na paměti, že pointerová aritmetika v C/C++ pracuje nad ‚poli‘ referencovaného typu, ne nad bajty.
Jen bych rád podotkl, že čtenář článku, který neví ani jak vypsat písmenko na textovou obrazovku, by se rozhodně neměl pokoušet psát vlastní operační systém. To je jako kdyby se člověk, který netuší k čemu slouží šroubovák pokusil postavit letadlovou loď. :) Proto se musí nejdřív vzdělat. Doporučil bych mu nabootovat do DOSu (dneska asi spíš v nějakém virtuálním stroji) a začít si hrát s hardwarem, osahat si všechno, napsat nějaké grafické demo, pochopit co mu ten jednoduchý systém nabízí (a co ne) a teprve pak přemýšlet jak to napsat jinak, líp a během útržku jednoho krátkého života… (Tak, a teď mně ukamenujte)
doporucil bych serial poznavame naprogramovane OS a pridavame pouze nove a uzitecne (chybejici) casti. Pote by se vyvoj ZaXOS zastavil a autor by mohl treba full-time hackovat kernel a psat kvalitni drivery pro novy HW z cehoz by mel dvojanosbny uzitek a ostatni take.
Tenhle seriál ale nemá nic s mým OS společného – jeho vývoj nehodlám zastavit a pokud jde např. o linuxové jádro občas tam napíšu taky něco. Navíc pracuji na několika dalších projektech, nejnovějším je hra ArenaLive. Mimochodem s titulkem souhlasím, nic 16bitového se nepoužívá jak v seriálu, tak ani v ZeX/OS.
Nejsem přesvědčen o tom, že vývoj operačních systémů byl završen Unixem, Windowsy či „MASoX“em. Nebo-li vývoj nových systémů jistě svůj smysl má. Ne, že by to byl případ autorova OS, ale ze všech hackerů jen pár zvládne napsat OS a z těchto pár jen pár (a to v podstatě doslova) zvládne vymyslet vlastní přístup. Takže práce na vývoji OS, ač pro počítačovou komunitu zcela bezcenného, je rozhodně velkým přínosem a poučením pro jeho autora.