2016-02-14 2 views
3

Récemment, j'ai expérimenté des choses comme arch Linux et cela a soulevé quelques questions. Je vois constamment l'utilisation des graphiques dans les parties de très bas niveau d'un système d'exploitation (des choses comme le GRUB ou presque tous les menus de démarrage). Certains d'entre eux comportent même des images. Je peux aussi voir la manipulation graphique dans des choses comme la commande "pacman", où la barre de chargement va changer sans perturber le texte au-dessus. Un autre exemple serait un programme comme cfdisk. Je voudrais juste savoir comment ces types de fonctionnalités sont programmées?Comment les interfaces graphiques de bas niveau sont-elles programmées?

Éditer: Par là, je veux dire quels appels système sont utilisés pour rendre cela possible?

Boot menu

+0

La barre de chargement est probablement implémentée via un retour chariot. Je ne suis pas sûr du reste. –

+0

"Comment les interfaces graphiques de bas niveau sont-elles programmées?" - Utilisation d'un éditeur de texte et éventuellement d'un IDE. - Désolé, la question est trop large. – Olaf

+0

Bien qu'il s'agisse d'une question très vaste, elle utilise probablement la manipulation directe des pixels, comme la spécification de la couleur au pixel en position (x, y) et le dessin du caractère réel. – DMH

Répondre

4

Ce genre de chose est très courante dans MSDOS quand j'apprenais à code. Il y avait un ensemble de modes d'écran matériel de base qui pouvaient être consultés à l'aide de simples instructions d'assemblage.

Pour ceux qui supportent les jeux de caractères ASCII, il était possible de modifier les images glyphes réelles pour les caractères en mémoire. Chaque caractère disponible était un simple bitmap, qui pouvait être modifié en mémoire pour ressembler à ce que vous vouliez. Par exemple, dans les modes d'écran couleur (par exemple CGA, EGA), le texte pouvait être rendu via une zone de mémoire spécifique où un octet spécifiait le caractère et l'autre octet spécifiait une couleur (premier plan et arrière-plan 4 bits chacun). pour EGA). Vous venez d'écrire les valeurs et elles apparaissent à l'écran. Si vous aviez modifié votre table de caractères, les caractères modifiés s'afficheront.

Je ne peux pas croire que je me suis souvenu de cela tout à l'heure, mais l'adresse de la mémoire A000 est apparemment brûlé dans mon cerveau. Vous pouvez lire plus à https://en.wikipedia.org/wiki/Enhanced_Graphics_Adapter

Bien sûr, il existe des modes d'écran plus élevés qui prennent en charge l'écriture de pixels réels, et c'est ainsi que nous écrivions des jeux. Célèbre, le mode 320x200 VGA était super facile et rapide pour obtenir des graphismes animés "réalistes" et lisses dans des couleurs époustouflantes 256 sans se soucier des plans de bits ou quoi que ce soit.

Et c'est essentiellement ce qui se passe au niveau bas. La prise en charge du BIOS pour ces modes graphiques oubliés existe depuis très longtemps, mais le matériel moderne nous a éloignés de ces modes et nous avons maintenant tendance à communiquer directement avec les cartes graphiques via un pilote ou des abstractions d'OS.

+0

Avez-vous une idée de comment j'irais dans C? Je connais une bonne quantité d'assemblages mais je sais que Linux est programmé en C. – bobby

+0

Rechercher un ancien code traitant des modes de paramétrage de l'écran, de la modification des tables de glyphes ASCII ou du segment d'adressage/de la carte graphique DMA. Probablement nécessite une petite quantité d'assemblage. Doit être en train de fouiller dans beaucoup de livres des années 80. Je ne sais pas sur la portabilité ou la pertinence pour le matériel moderne. Probablement pas un problème pour vous. – paddy

+0

Peut-être que [cela vous aidera à démarrer] (http://assemblytutorial.blogspot.co.nz/2010/09/interrupt-10h-service-0-set-screen-mode.html). Cela semble familier. Ensuite, vous venez de trouver l'adresse de base et la disposition de la mémoire pour le mode d'écran spécifique que vous voulez, et allez à partir de là. Créez une fonction simple en C avec un bloc asm en ligne pour définir l'interruption. – paddy

0

J'ai beaucoup appris sur la façon d'initialiser et d'opérer sur les modes graphiques d'accès direct à la mémoire de bas niveau depuis le vénérable Fractint (original fonctionnant sous DOS). Tous les goodies sont dans un fichier appelé video.asm. En plus de EGA/VESA et. al., il a également manipulé certaines des cartes graphiques disponibles à l'époque, comme Hercules.

Ils ont choisi le serveur X pour le porter sur Linux sous XFractint. Une grande partie de l'apparence originale et esprit de l'application reste la même. C'est probablement un bon moyen et pour commencer.

Pour le niveau inférieur peut être essayer SVGAlib (je n'ai pas essayé cela). La plupart des graphismes Linux de bas niveau semblent utiliser VESA BIOS Extensions.