Differences

This shows you the differences between two versions of the page.

gui_design_by_dak [2010/02/03 11:07]
finarfin created
gui_design_by_dak [2010/02/03 11:10] (current)
finarfin
Line 90: Line 90:
questo scopo esistono pero' vari metodi: questo scopo esistono pero' vari metodi:
-- Switching con Grub +==== Switching con Grub ==== 
-  Alcuni volenterosi programmatori hanno creato una patch per i sorgenti di grub, che + 
-  permette di fare lo switching alle modalita' vesa tramite il bootloader (http://www.smksoftware.co.za/products/vbe-grub/). +Alcuni volenterosi programmatori hanno creato una patch per i sorgenti di grub, che 
-  Per patchare grub, elenco velocemente i passaggi: +permette di fare lo switching alle modalita' vesa tramite il bootloader (http://www.smksoftware.co.za/products/vbe-grub/). 
-    1. Scaricate ftp://alpha.gnu.org/gnu/grub/grub-0.97.tar.gz e vbe_grub-0.97.patch (dal link) +Per patchare grub, elenco velocemente i passaggi: 
-    2. Decomprimete i sorgenti di grub +  - Scaricate ftp://alpha.gnu.org/gnu/grub/grub-0.97.tar.gz e vbe_grub-0.97.patch (dal link) 
-    3. Applicate la patch con +  - Decomprimete i sorgenti di grub 
-            patch -i vbe_grub-0.97.patch sorgenti_grub (da verificare) +  - Applicate la patch con 
-    4. Entrate nella cartella dei sorgenti e date un make +      patch -i vbe_grub-0.97.patch sorgenti_grub (da verificare) 
 +  - Entrate nella cartella dei sorgenti e date un make
   
-  Dopo aver messo il grub patchato nella vostra iso, img, o quel che e', sara' necessario aggiungere al file +Dopo aver messo il grub patchato nella vostra iso, img, o quel che e', sara' necessario aggiungere al file 
-  di configurazione di grub (menu.lst) la linea:+di configurazione di grub (menu.lst) la linea: 
 +  vbeset modalita'
-        vbeset modalita' +Dove modalita' e' un valore numerico che indica appunto la risoluzione e la profondita' del colore 
- +desiderata (per 800x600x32 il valore e' 0x115). Dovrete ora aggiungere al vostro kernel il supporto 
-  Dove modalita' e' un valore numerico che indica appunto la risoluzione e la profondita' del colore +per il multiboot header; in particolare i campi del multiboot che ci serviranno saranno: 
-  desiderata (per 800x600x32 il valore e' 0x115). Dovrete ora aggiungere al vostro kernel il supporto +<code c>
-  per il multiboot header; in particolare i campi del multiboot che ci serviranno saranno: +
- <code c>+
        uint32_t boot_loader_name;        ///< Nome del bootloader         uint32_t boot_loader_name;        ///< Nome del bootloader
        uint32_t apm_table;                ///< Tabella specifiche apm         uint32_t apm_table;                ///< Tabella specifiche apm
Line 118: Line 118:
        uint32_t vbe_interface_len;        ///< Lunghezza interfaccia vesa bios         uint32_t vbe_interface_len;        ///< Lunghezza interfaccia vesa bios
</code>         </code>        
-    In particolare vbe_control_info e vbe_mode_info, che sono due puntatori alle strutture viste in precedenza. +In particolare vbe_control_info e vbe_mode_info, che sono due puntatori alle strutture viste in precedenza. 
-    L'accesso a queste strutture sara' necessario per conoscere la risoluzione, i bit del colore, e l'indirizzo +L'accesso a queste strutture sara' necessario per conoscere la risoluzione, i bit del colore, e l'indirizzo 
-    fisico dove e' mappato il buffer vesa "phys_base_ptr".+fisico dove e' mappato il buffer vesa "phys_base_ptr".
   
-  
-- utilizzare gli interrupt del bios in emulazione della modalita' 8086 
-- ... 
- 
- 
- 
==== Disegniamo ==== ==== Disegniamo ====
Per disegnare un pixel nello schermo, sara' necessario prima di tutto individuare le coordinate Per disegnare un pixel nello schermo, sara' necessario prima di tutto individuare le coordinate
x e y del buffer. x e y del buffer.
-    x e' uguale alla coordinata x del pixel da disegnare moltiplicata per la dimensione del singolo pixel +  * x e' uguale alla coordinata x del pixel da disegnare moltiplicata per la dimensione del singolo pixel 
-    y e' uguale alla coordinata y del pixel da disegnare moltiplicata per il numero di bytes per ogni scan line+  * y e' uguale alla coordinata y del pixel da disegnare moltiplicata per il numero di bytes per ogni scan line
        (bytes_per_scan_line).         (bytes_per_scan_line).
-         +       
-    Per scrivere nella memoria video le info del pixel, sara' necessario scrivere nell'indirizzo "phys_base_ptr" +Per scrivere nella memoria video le info del pixel, sara' necessario scrivere nell'indirizzo "phys_base_ptr" 
-    con un offset di x+y, il valore del colore, nella sequenza r, g e b.+con un offset di x+y, il valore del colore, nella sequenza r, g e b.
 +==== Ottimizzare ====
-4. Ottimizzare 
Per ottimizzare la velocita', conviene allocare un buffer nella ram di dimensione uguale al buffer video, Per ottimizzare la velocita', conviene allocare un buffer nella ram di dimensione uguale al buffer video,
scrivere li le informazioni dei pixel, e dopo tutte le operazioni, copiare il buffer in ram nella memoria scrivere li le informazioni dei pixel, e dopo tutte le operazioni, copiare il buffer in ram nella memoria
video con memcpy. video con memcpy.
 
gui_design_by_dak.txt · Last modified: 2010/02/03 11:10 by finarfin
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki