Non da Windows, altrimenti *TAC* schermata blu... Quello lo puoi fare in DOS, segmento 0xA000 o A000h:0h (16-bit), o ancora 0xA0000 o A0000h (32-bit). E non serve per forza l`assembly, basta un puntatore far all`indirizzo nel caso di un puntatore a 16-bit o flat per quello a 32-bit... In soldoni:
codice:
unsigned char* memoria_video_16bit = MK_FP( 0xA0000, 0 );
unsigned char* memoria_video_32bit = ( unsigned char* ) 0xA0000;
Da quell`indirizzo in poi, per tutti i 64k del segmento, ogni byte (per risoluzioni a 256 colori) corrisponde ad un colore della paletta. Il buffer e` lineare, quindi 320x200 a 256 colori (mode 13h) occupano esattamente 64000 bytes. Per colorare un pixel basta assegnare un numero (colore) ad un byte indirizzato a partire da quel puntatore. Se vogliamo, il modo piu` semplice e` trattarlo come un array:
codice:
memoria_video_16bit[ 1284 ] = 4;
Colora il 1285° pixel di rosso (4 in genere), ed a 320x200 significa:
1285 / 320 = (4+1)^ = 5^ riga
1285 % 320 = (5+1)^ = 6^ colonna
La paletta la modifichi direttamente tramite le porte dell`adattatore VGA.
Questo indirizzo vale per le basse risoluzioni VGA in modalita` reale (16-bit) o protetta (32-bit) e per gli antiquati e iper-ostici Mode X (ARRRGH!). Se invece vuoi usare risoluzioni alte dovresti leggere un minimo sulle specifiche VBE (VESA) perche` il discorso e` un po` piu` articolato.
Ciao.