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.