First upload of the code.
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@2 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
7
testvesa/comp.bat
Normal file
7
testvesa/comp.bat
Normal file
@@ -0,0 +1,7 @@
|
||||
@echo off
|
||||
50
|
||||
wmake
|
||||
if errorlevel 1 goto END
|
||||
if not exist testvesa.exe goto END
|
||||
if %0==COMP testvesa %1
|
||||
:END
|
||||
4
testvesa/make.inc
Normal file
4
testvesa/make.inc
Normal file
@@ -0,0 +1,4 @@
|
||||
system dos4g
|
||||
op stub=weoslite.exe
|
||||
file vesa,testvesa
|
||||
name testvesa
|
||||
8
testvesa/makefile
Normal file
8
testvesa/makefile
Normal file
@@ -0,0 +1,8 @@
|
||||
testvesa.exe : testvesa.obj vesa.obj
|
||||
wlink @make.inc
|
||||
|
||||
testvesa.obj : testvesa.c vesa.h
|
||||
wcc386 /we /4s /fp3 testvesa
|
||||
|
||||
vesa.obj : vesa.asm vesa.h
|
||||
tasm /mx /zn /os vesa
|
||||
196
testvesa/testvesa.c
Normal file
196
testvesa/testvesa.c
Normal file
@@ -0,0 +1,196 @@
|
||||
|
||||
typedef unsigned char byte;
|
||||
typedef unsigned short word;
|
||||
typedef unsigned long dword;
|
||||
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "vesa.h"
|
||||
|
||||
|
||||
|
||||
char * Version_to_string(word Version)
|
||||
{
|
||||
static char Chaine[20];
|
||||
|
||||
sprintf(Chaine,"%d",(Version>>8));
|
||||
strcat(Chaine,".");
|
||||
sprintf(Chaine+strlen(Chaine),"%d",(Version & 0xFF));
|
||||
|
||||
return Chaine;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Lire_infos_VESA(void)
|
||||
{
|
||||
struct S_Buffer_VESA Buffer_VESA;
|
||||
struct S_Buffer_mode_VESA Buffer_mode_VESA;
|
||||
word Retour;
|
||||
int Nombre_de_modes;
|
||||
word * Liste_des_modes;
|
||||
int Offset1;
|
||||
int Offset2;
|
||||
char Libelle_du_nombre_de_couleurs[16];
|
||||
int Nombre_de_bits;
|
||||
|
||||
Retour=Get_VESA_info(&Buffer_VESA);
|
||||
|
||||
if (Retour==0x004F)
|
||||
{
|
||||
if (memcmp(Buffer_VESA.Signature,"VESA",4)==0)
|
||||
{
|
||||
printf("VESA version : %s\n",Version_to_string(Buffer_VESA.Version));
|
||||
printf("Builder : %s\n",Buffer_VESA.Fabricant);
|
||||
printf("Capabilities : %d\n",Buffer_VESA.Capacite);
|
||||
printf("Video memory : %dK\n",Buffer_VESA.Memoire*64);
|
||||
|
||||
if (Buffer_VESA.Version>=0x0200)
|
||||
{
|
||||
printf("OEM version : %s\n",Version_to_string(Buffer_VESA.Version_bios));
|
||||
printf("Vendor : %s\n",Buffer_VESA.Vendeur);
|
||||
printf("Product : %s\n",Buffer_VESA.Produit);
|
||||
printf("Revision : %s\n",Buffer_VESA.Revision);
|
||||
}
|
||||
|
||||
// Comptage du nombre de modes:
|
||||
Nombre_de_modes=0;
|
||||
for (Offset1=0;Buffer_VESA.Liste_des_modes[Offset1]!=0xFFFF;Offset1++)
|
||||
Nombre_de_modes++;
|
||||
|
||||
// Allocation d'une liste dupliqu‚e des modes:
|
||||
Liste_des_modes=(word *)malloc(sizeof(word)*Nombre_de_modes);
|
||||
|
||||
// Copie de la liste des modes originale vers la dupliqu‚e:
|
||||
memcpy(Liste_des_modes,Buffer_VESA.Liste_des_modes,sizeof(word)*Nombre_de_modes);
|
||||
|
||||
// Affichage de la liste des modes:
|
||||
for (Offset1=0;Offset1<Nombre_de_modes;Offset1++)
|
||||
{
|
||||
// Lecture des infos du mode:
|
||||
Retour=Get_VESA_mode_info(Liste_des_modes[Offset1],&Buffer_mode_VESA);
|
||||
|
||||
// Affichage des infos de ce mode:
|
||||
|
||||
if (Retour==0x004F)
|
||||
{
|
||||
if (Buffer_mode_VESA.Nb_bits_par_pixel<=8)
|
||||
{
|
||||
Nombre_de_bits=0;
|
||||
sprintf(Libelle_du_nombre_de_couleurs,"%d col.",1<<Buffer_mode_VESA.Nb_bits_par_pixel);
|
||||
}
|
||||
else
|
||||
{
|
||||
Nombre_de_bits=Buffer_mode_VESA.Taille_masque_rouge+
|
||||
Buffer_mode_VESA.Taille_masque_vert+
|
||||
Buffer_mode_VESA.Taille_masque_bleu;
|
||||
|
||||
switch (Nombre_de_bits)
|
||||
{
|
||||
case 15:
|
||||
strcpy(Libelle_du_nombre_de_couleurs,"32K");
|
||||
break;
|
||||
case 16:
|
||||
strcpy(Libelle_du_nombre_de_couleurs,"64K");
|
||||
break;
|
||||
case 24:
|
||||
if (Buffer_mode_VESA.Nb_bits_par_pixel==24)
|
||||
strcpy(Libelle_du_nombre_de_couleurs,"16M");
|
||||
else
|
||||
strcpy(Libelle_du_nombre_de_couleurs,"16M 32-bits");
|
||||
break;
|
||||
default:
|
||||
sprintf(Libelle_du_nombre_de_couleurs,"%d col.",1<<Nombre_de_bits);
|
||||
}
|
||||
}
|
||||
|
||||
printf("\nMode : %Xh\t(",Liste_des_modes[Offset1]);
|
||||
|
||||
if (Buffer_mode_VESA.Attributs&16)
|
||||
printf("Graphmode: ");
|
||||
else
|
||||
printf("Textmode : ");
|
||||
|
||||
printf("%dx%d - %s - ",Buffer_mode_VESA.Largeur,
|
||||
Buffer_mode_VESA.Hauteur,Libelle_du_nombre_de_couleurs);
|
||||
|
||||
switch (Buffer_mode_VESA.Attributs&192)
|
||||
{
|
||||
case 0 : printf("Banked)\n"); break;
|
||||
case 128 : printf("Banked/LFB)\n"); break;
|
||||
case 192 : printf("LFB)\n"); break;
|
||||
default : printf("BUGGED!)\n");
|
||||
}
|
||||
|
||||
printf(" Attributes : %Xh\n",Buffer_mode_VESA.Attributs);
|
||||
printf(" Window A attributes : %Xh\n",Buffer_mode_VESA.Attributs_fenetre_A);
|
||||
printf(" Window B attributes : %Xh\n",Buffer_mode_VESA.Attributs_fenetre_B);
|
||||
printf(" Granularity : %dK\n",Buffer_mode_VESA.Granularite);
|
||||
printf(" Window size : %dK\n",Buffer_mode_VESA.Taille_fenetres);
|
||||
printf(" Window A segment : %Xh\n",Buffer_mode_VESA.Segment_fenetre_A);
|
||||
printf(" Window B segment : %Xh\n",Buffer_mode_VESA.Segment_fenetre_B);
|
||||
printf(" WinFunction pointer : %p\n",Buffer_mode_VESA.WinFuncPtr);
|
||||
printf(" Bytes per line : %d\n",Buffer_mode_VESA.Octets_par_ligne);
|
||||
printf(" Width : %d\n",Buffer_mode_VESA.Largeur);
|
||||
printf(" Height : %d\n",Buffer_mode_VESA.Hauteur);
|
||||
printf(" Character width : %d\n",Buffer_mode_VESA.Largeur_de_char);
|
||||
printf(" Character height : %d\n",Buffer_mode_VESA.Hauteur_de_char);
|
||||
printf(" Number of planes : %d\n",Buffer_mode_VESA.Nb_plans);
|
||||
printf(" Bits per pixel : %d\n",Buffer_mode_VESA.Nb_bits_par_pixel);
|
||||
printf(" Number of banks : %d\n",Buffer_mode_VESA.Nb_banques);
|
||||
printf(" Memory model : %d\n",Buffer_mode_VESA.Modele_de_memoire);
|
||||
printf(" Bank size : %d\n",Buffer_mode_VESA.Taille_des_banques);
|
||||
printf(" Number of pages : %d\n",Buffer_mode_VESA.Nombre_de_pages);
|
||||
|
||||
if (Nombre_de_bits)
|
||||
{
|
||||
printf(" Red mask size : %d\n",Buffer_mode_VESA.Taille_masque_rouge);
|
||||
printf(" Red mask position : %d\n",Buffer_mode_VESA.Pos_masque_rouge);
|
||||
printf(" Green mask size : %d\n",Buffer_mode_VESA.Taille_masque_vert);
|
||||
printf(" Green mask position : %d\n",Buffer_mode_VESA.Pos_masque_vert);
|
||||
printf(" Blue mask size : %d\n",Buffer_mode_VESA.Taille_masque_bleu);
|
||||
printf(" Blue mask position : %d\n",Buffer_mode_VESA.Pos_masque_bleu);
|
||||
printf(" Reserved mask size : %d\n",Buffer_mode_VESA.Taille_masque_res);
|
||||
printf(" Reserved mask pos. : %d\n",Buffer_mode_VESA.Pos_masque_res);
|
||||
}
|
||||
|
||||
printf(" Direct screen mode : %d\n",Buffer_mode_VESA.Direct_screen_mode);
|
||||
printf(" LFB address : %p\n",Buffer_mode_VESA.Adresse_LFB);
|
||||
printf(" Offscreen address : %p\n",Buffer_mode_VESA.Adresse_offscreen);
|
||||
printf(" Offscreen size : %dK\n",Buffer_mode_VESA.Taille_offscreen);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\nMode : %Xh",Liste_des_modes[Offset1]);
|
||||
printf(" Mode not supported (not enough memory or bad monitor)\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Lib‚ration de la liste dupliqu‚e:
|
||||
free(Liste_des_modes);
|
||||
}
|
||||
else
|
||||
printf("VESA bugged.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Retour==0xFF00)
|
||||
printf("Memory allocation impossible.\n");
|
||||
else
|
||||
printf("No VESA supported: %d\n",Retour);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main(void)
|
||||
{
|
||||
printf("\nÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»");
|
||||
printf("\nºÛ²±° VESA tester - Copyright (c)1997 Sunset Design °±²Ûº");
|
||||
printf("\nÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n\n");
|
||||
Lire_infos_VESA();
|
||||
return 0;
|
||||
}
|
||||
BIN
testvesa/testvesa.exe
Normal file
BIN
testvesa/testvesa.exe
Normal file
Binary file not shown.
237
testvesa/vesa.asm
Normal file
237
testvesa/vesa.asm
Normal file
@@ -0,0 +1,237 @@
|
||||
.386P
|
||||
.MODEL FLAT
|
||||
|
||||
_TEXT Segment dword public 'code'
|
||||
Assume cs:_TEXT, ds:_DATA
|
||||
|
||||
|
||||
; -- Fonctions VESA --
|
||||
public Get_VESA_info
|
||||
public Get_VESA_mode_info
|
||||
|
||||
|
||||
|
||||
|
||||
; - -- --- ----\/\ Lecture des informations VESA : /\/---- --- -- -
|
||||
|
||||
Convertir_adresse_MR_MP proc near
|
||||
|
||||
; EDI = Adresse d'une adresse … corriger
|
||||
|
||||
push eax
|
||||
push ecx
|
||||
|
||||
mov eax,[edi] ; EAX = adresse … corriger
|
||||
mov ecx,eax
|
||||
shr eax,16
|
||||
shl eax,4
|
||||
and ecx,0FFFFh
|
||||
add eax,ecx
|
||||
mov [edi],eax
|
||||
|
||||
pop ecx
|
||||
pop eax
|
||||
|
||||
ret
|
||||
|
||||
Convertir_adresse_MR_MP endp
|
||||
|
||||
|
||||
|
||||
Get_VESA_info proc near
|
||||
|
||||
push ebp
|
||||
mov ebp,esp
|
||||
|
||||
arg Buffer:dword
|
||||
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
|
||||
; On commence par allouer un buffer en mode r‚el de 1024+64 octets
|
||||
mov ax,0100h ; "DPMI : Allocate Dos memory blocks"
|
||||
mov bx,68d ; BX = (1024+64)/16 = 68 paragraphes
|
||||
int 31h
|
||||
jc GVI_Erreur
|
||||
|
||||
; On sauve l'handle du buffer dans la pile
|
||||
push dx
|
||||
|
||||
; On place dans EDX l'adresse du buffer
|
||||
xor edx,edx
|
||||
mov dx,ax
|
||||
shl edx,4
|
||||
|
||||
; On nettoie ce(s) buffer(s)
|
||||
mov edi,edx ; On place en EDX
|
||||
xor eax,eax ; ... la valeur 0
|
||||
mov ecx,0110h ; ... sur 1024+64 positions
|
||||
rep stosd ; !!! Maintenant !!!
|
||||
|
||||
; On demande les infos VESA: (AX=4F00, ES:DI=Adresse du buffer)
|
||||
mov edi,edx ; Adresse des valeurs des registres … passer … l'interruption
|
||||
add edx,40h ; EDX=segment du buffer d'infos VESA
|
||||
shr edx,4
|
||||
mov dword ptr[edi+1Ch],00004F00h ; EAX pass‚ … l'interruption
|
||||
mov dword ptr[edi+00h],00000000h ; EDI pass‚ … l'interruption
|
||||
mov word ptr[edi+22h],dx ; ES pass‚ … l'interruption
|
||||
shl edx,4
|
||||
mov dword ptr[edx],32454256h ; valeur hexa de "VBE2"
|
||||
mov ax,0300h ; Service DPMI simuler une interruption en mode r‚el
|
||||
mov bl,10h ; Interruption … appeler (int vid‚o)
|
||||
xor bh,bh ; Flags de mode d'appel d'interruption
|
||||
xor cx,cx ; Nb d'elements de la pile … passer
|
||||
int 31h ; Appel de l'interruption du DPMI
|
||||
|
||||
; On place dans EBX la valeur EAX de retour de l'interruption
|
||||
mov ebx,dword ptr[edi+1Ch]
|
||||
|
||||
; On recopie le buffer du mode r‚el vers le mode prot‚g‚
|
||||
mov ecx,256 ; (256 dword = 1024 octets)
|
||||
mov esi,edx
|
||||
mov edi,Buffer
|
||||
rep movsd
|
||||
|
||||
; Puis on corrige chacune des adresses:
|
||||
mov edi,Buffer
|
||||
add edi,06h
|
||||
call Convertir_adresse_MR_MP ; Fabricant
|
||||
add edi,08h
|
||||
call Convertir_adresse_MR_MP ; Liste des modes
|
||||
add edi,08h
|
||||
call Convertir_adresse_MR_MP ; Vendeur
|
||||
add edi,04h
|
||||
call Convertir_adresse_MR_MP ; Produit
|
||||
add edi,04h
|
||||
call Convertir_adresse_MR_MP ; R‚vision
|
||||
|
||||
; On libŠre le buffer en mode r‚el de 1024+64 octets
|
||||
mov ax,0101h ; "DPMI : Free Dos memory blocks"
|
||||
pop dx ; DX = handle du buffer
|
||||
int 31h
|
||||
jnc GVI_Pas_d_erreur
|
||||
|
||||
|
||||
GVI_Erreur:
|
||||
|
||||
mov bx,0FF00h
|
||||
|
||||
GVI_Pas_d_erreur:
|
||||
|
||||
mov ax,bx
|
||||
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
|
||||
mov esp,ebp
|
||||
pop ebp
|
||||
|
||||
ret
|
||||
|
||||
Get_VESA_info endp
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Get_VESA_mode_info proc near
|
||||
|
||||
push ebp
|
||||
mov ebp,esp
|
||||
|
||||
arg Mode:word,Buffer:dword
|
||||
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
|
||||
; On commence par allouer un buffer en mode r‚el de 256+64 octets
|
||||
mov ax,0100h ; "DPMI : Allocate Dos memory blocks"
|
||||
mov bx,20d ; BX = (256+64)/16 = 20 paragraphes
|
||||
int 31h
|
||||
jc GVMI_Erreur
|
||||
|
||||
; On sauve l'handle du buffer dans la pile
|
||||
push dx
|
||||
|
||||
; On place dans EDX l'adresse du buffer
|
||||
xor edx,edx
|
||||
mov dx,ax
|
||||
shl edx,4
|
||||
|
||||
; On nettoie ce(s) buffer(s)
|
||||
mov edi,edx ; On place en EDX
|
||||
xor eax,eax ; ... la valeur 0
|
||||
mov ecx,0080d ; ... sur 256+64 positions
|
||||
rep stosd ; !!! Maintenant !!!
|
||||
|
||||
; On demande les infos VESA: (AX=4F01, CX=Mode, ES:DI=Adresse du buffer)
|
||||
mov edi,edx ; Adresse des valeurs des registres … passer … l'interruption
|
||||
add edx,40h ; EDX=segment du buffer d'infos VESA
|
||||
shr edx,4
|
||||
mov ax,Mode ; ECX=Mode vid‚o dont ont recherche les informations
|
||||
mov dword ptr[edi+1Ch],00004F01h ; EAX pass‚ … l'interruption
|
||||
mov word ptr[edi+18h],ax ; ECX pass‚ … l'interruption
|
||||
mov dword ptr[edi+00h],00000000h ; EDI pass‚ … l'interruption
|
||||
mov word ptr[edi+22h],dx ; ES pass‚ … l'interruption
|
||||
shl edx,4
|
||||
mov ax,0300h ; Service DPMI simuler une interruption en mode r‚el
|
||||
mov bl,10h ; Interruption … appeler (int vid‚o)
|
||||
xor bh,bh ; Flags de mode d'appel d'interruption
|
||||
xor cx,cx ; Nb d'elements de la pile … passer
|
||||
int 31h ; Appel de l'interruption du DPMI
|
||||
|
||||
; On place dans EBX la valeur EAX de retour de l'interruption
|
||||
mov ebx,dword ptr[edi+1Ch]
|
||||
|
||||
; On recopie le buffer du mode r‚el vers le mode prot‚g‚
|
||||
mov ecx,64 ; (64 dword = 256 octets)
|
||||
mov esi,edx
|
||||
mov edi,Buffer
|
||||
rep movsd
|
||||
|
||||
; Puis on corrige chacune des adresses:
|
||||
mov edi,Buffer
|
||||
add edi,0Ch
|
||||
call Convertir_adresse_MR_MP ; Adresse WinFuncPtr (Mode r‚el)
|
||||
|
||||
; On libŠre le buffer en mode r‚el de 256+64 octets
|
||||
mov ax,0101h ; "DPMI : Free Dos memory blocks"
|
||||
pop dx ; DX = handle du buffer
|
||||
int 31h
|
||||
jnc GVMI_Pas_d_erreur
|
||||
|
||||
|
||||
GVMI_Erreur:
|
||||
|
||||
mov bx,0FF00h
|
||||
|
||||
GVMI_Pas_d_erreur:
|
||||
|
||||
mov ax,bx
|
||||
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
|
||||
mov esp,ebp
|
||||
pop ebp
|
||||
|
||||
ret
|
||||
|
||||
Get_VESA_mode_info endp
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
_TEXT ENDS
|
||||
END
|
||||
82
testvesa/vesa.h
Normal file
82
testvesa/vesa.h
Normal file
@@ -0,0 +1,82 @@
|
||||
|
||||
#ifndef _VESA_H_
|
||||
#define _VESA_H_
|
||||
|
||||
|
||||
|
||||
struct S_Buffer_VESA
|
||||
{
|
||||
// VESA 1.0
|
||||
char Signature[4]; // = 'VESA'
|
||||
word Version; // Nø de version
|
||||
char * Fabricant; // Nom du fabricant
|
||||
dword Capacite; // Bits de capacit‚ du DAC
|
||||
word * Liste_des_modes; // Liste des modes vid‚os support‚s par le VESA
|
||||
word Memoire; // Taille de la m‚moire en blocs de 64K
|
||||
|
||||
// VESA 2.0
|
||||
word Version_bios; // Version du BIOS du fabricant
|
||||
char * Vendeur; // Nom du vendeur
|
||||
char * Produit; // Nom du produit
|
||||
char * Revision; // Nom de la r‚vision
|
||||
|
||||
// Filler
|
||||
byte Filler[990]; // Reserv‚
|
||||
};
|
||||
|
||||
|
||||
|
||||
struct S_Buffer_mode_VESA
|
||||
{
|
||||
// VESA 1.0
|
||||
word Attributs; // Attributs du mode (00h)
|
||||
byte Attributs_fenetre_A; // Attributs de la fenˆtre A (02h)
|
||||
byte Attributs_fenetre_B; // Attributs de la fenˆtre B (03h)
|
||||
word Granularite; // Granularit‚ des fenˆtres en Ko (04h)
|
||||
word Taille_fenetres; // Taille des fenˆtres en Ko (06h)
|
||||
word Segment_fenetre_A; // Segment de la fenˆtre A (08h)
|
||||
word Segment_fenetre_B; // Segment de la fenˆtre B (0Ah)
|
||||
byte * WinFuncPtr; // Fonction d'AX=4F05 en mode r‚el(0Ch)
|
||||
word Octets_par_ligne; // Nombre d'octets par ligne (10h)
|
||||
|
||||
// Optionnels ou OEM
|
||||
word Largeur; // Largeur en pixels (12h)
|
||||
word Hauteur; // Hauteur en pixels (14h)
|
||||
byte Largeur_de_char; // Largeur des caractŠres en pxls (16h)
|
||||
byte Hauteur_de_char; // Hauteur des caractŠres en pxls (17h)
|
||||
byte Nb_plans; // Nombre de plans de m‚moire (18h)
|
||||
byte Nb_bits_par_pixel; // Nombre de bits par pixel (19h)
|
||||
byte Nb_banques; // Nombre de banques (1Ah)
|
||||
byte Modele_de_memoire; // ModŠle de m‚moire (1Bh)
|
||||
byte Taille_des_banques; // Taille des banques en Ko (1Ch)
|
||||
byte Nombre_de_pages; // Nombre de pages d'image (1Dh)
|
||||
byte Reserve; // Reserv‚ (=1) (1Eh)
|
||||
|
||||
// VESA 1.2
|
||||
byte Taille_masque_rouge; // Taille du masque des rouges (1Fh)
|
||||
byte Pos_masque_rouge; // Position du masque des rouges (20h)
|
||||
byte Taille_masque_vert; // Taille du masque des verts (21h)
|
||||
byte Pos_masque_vert; // Position du masque des verts (22h)
|
||||
byte Taille_masque_bleu; // Taille du masque des bleus (23h)
|
||||
byte Pos_masque_bleu; // Position du masque des bleus (24h)
|
||||
byte Taille_masque_res; // Taille d'un masque reserv‚ (25h)
|
||||
byte Pos_masque_res; // Position d'un masque reserv‚ (26h)
|
||||
byte Direct_screen_mode; // Direct screen mode info (27h)
|
||||
|
||||
// VESA 2.0
|
||||
byte * Adresse_LFB; // Adresse du LFB (28h)
|
||||
byte * Adresse_offscreen; // Pointeur vers le d‚but de la m‚moire offscreen (2Ch)
|
||||
word Taille_offscreen; // Taille de la m‚moire offscreen en Ko (30h)
|
||||
|
||||
// Filler
|
||||
byte Filler[206];
|
||||
};
|
||||
|
||||
|
||||
|
||||
word Get_VESA_info ( struct S_Buffer_VESA * Buffer_VESA);
|
||||
word Get_VESA_mode_info(word Mode, struct S_Buffer_mode_VESA * Buffer_mode_VESA);
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
BIN
testvesa/weoslite.exe
Normal file
BIN
testvesa/weoslite.exe
Normal file
Binary file not shown.
Reference in New Issue
Block a user