
Program GraphDetector;
{$G+}
const
HS: array [0..15] of Char = '0123456789ABCDEF';
type
TSVGAMode = record
Mode:Byte;
NClearVM, Stdrt, NStdrt, AppFast, LFB, NCVM : Boolean;
Res : Byte;
end;
type
TS = array [0..65500] of Char;
TW = array [0..32765] of Word;
TNM = array [1..1024] of Word;
type
TGeneralSVGAInfoBuffer = record
VESA_VBE2 : array [0..3] of Char;
VBEversion : Word;{! BCD}
ProdIdentStr : ^TS;
FlagFirst : Byte;
FlagReserv : array [0..2] of Byte;
SVGAModeList : ^TW;
VMSize : Word; {� ������ �� 64 Kb}
InteriorVersion : Word;
ProdNameStr : ^TS;
VAdaptNameStr : ^TS;
VerAdaptStr : ^TS;
VBE_AFversion : Word;{1 BCD}
AppFastModesList : ^TW;
VESAReserv : array [0..215] of Byte;
VBEDataReserv : array [0..255] of Byte;
end;
type
TSVGAModeInfoBuffer = record
AttribMode : Word;
WinA_Attr : Byte;
WinB_Attr : Byte;
WinGranul : Word;{ Kb}
WinSize : Word;{ Kb}
WinA_Seg : Word;
WinB_Seg : Word;
TransLockProc : Pointer;
LogStrSize : Word;{����� ����}
Width : Word;{� �������� ��� ��������}
Height : Word;{� �������� ��� ��������}
SimbolWidth : Byte;{Pix}
SimbolHeight : Byte;{Pix}
Planes : Byte;
BitPerPix : Byte;
Banks : Byte;
MemoryModel : Byte;
BankSize : Byte;
VideoPages : Byte;
Reserv1 : Byte;
BitMaskRed : Byte;
FirstBitRed : Byte;
BitMaskGreen : Byte;
FirstBitGreen : Byte;
BitMaskBlue : Byte;
FirstBitBlue : Byte;
BitMaskReserv : Byte;
FirstBitReserv : Byte;
Addition : Byte;
LFB_Physics : Pointer;
LFB_Offset : LongInt;
NoMapLFB : Word;{ Kb}
Reserv2 : array [0..205] of Byte;
end;
type
TFlag = record
ADC_8bit : Boolean; {Analog-Digital Converter, ���, �������-�������� ������-��}
VGAIncompatible : Boolean;
ADC_RevRayTrace : Boolean;
VBE_AF_Support : Boolean;
EnableDirectAccessReq : Boolean;
AppMouseInd : Boolean;
AppClipping : Boolean;
AppBitBlt : Boolean;
end;
type
TAttribMode = record
ModePresent : Boolean;
PaddInfoPresent : Boolean;{Padding - �������������� ���-���}
TxBIOSOutpSupport : Boolean;
ColoredMode : Boolean;
GraphicsMode : Boolean;
VGAIncomp : Boolean;
BankSwitchNotSupp : Boolean;
LFBNotSupp : Boolean;
Undef : Boolean;
EnableDirectAccessRq : Boolean;
Undef7Bit : Byte;
end;
type
TWinAttr = record
WinPresent : Boolean;
ReadPermit : Boolean;{������ ���������}
WritePermit : Boolean;{������ ���������}
OddMent : Byte;{������}
end;
var
i, j, k : Word;
xt, yt : Byte;
St : String;
var
SVGAMode: TSVGAMode;
GeneralSVGAInfo : TGeneralSVGAInfoBuffer;
SVGAModeInfo : TSVGAModeInfoBuffer;
Flag : TFlag;
ModeAttr : TAttribMode;
WinAttr : TWinAttr;
NM : TNM;
{------------------}
Procedure DecodeSVGAMode(SVGA:Word);
begin
asm
push ds
mov bx, seg SVGAMode
mov ds, bx
mov bx, offset SVGAMode
mov ax, word ptr SVGA
push ax
and ax, 01111111b
mov byte ptr [bx], al
pop ax
push ax
and ax, 10000000b
shr ax, 7
mov byte ptr [bx+1], al
pop ax
push ax
and ax, 100000000b
shr ax, 8
mov byte ptr [bx+2], al
pop ax
push ax
and ax, 1000000000b
shr ax, 9
mov byte ptr [bx+3], al
pop ax
push ax
and ax, 10000000000000b
shr ax, 13
mov byte ptr [bx+4], al
pop ax
push ax
and ax, 100000000000000b
shr ax, 14
mov byte ptr [bx+5], al
pop ax
push ax
and ax, 1000000000000000b
shr ax, 15
mov byte ptr [bx+6], al
pop ax
push ax
and ax, 1110000000000b
shr ax, 10
mov byte ptr [bx+7], al
pop ax
pop ds
end
end;
{------------------}
Function Conv2SVGAMode:Word;{����������� � ����� �����������}
begin
asm
push ds
mov bx, seg SVGAMode
mov ds, bx
mov bx, offset SVGAMode
mov ax, 0
mov al, byte ptr [bx]
mov dl, byte ptr [bx+1]
and dl, 1
shl dx, 7
or ax, dx
mov dl, byte ptr [bx+2]
and dl, 1
shl dx, 8
or ax, dx
mov dl, byte ptr [bx+3]
and dl, 1
shl dx, 9
or ax, dx
mov dl, byte ptr [bx+4]
and dl, 1
shl dx, 13
or ax, dx
mov dl, byte ptr [bx+5]
and dl, 1
shl dx, 14
or ax, dx
mov dl, byte ptr [bx+6]
and dl, 1
shl dx, 15
or ax, dx
pop ds
end
end;
{------------------}
Function GetGeneralSVGAInfo:Word;Assembler;
asm
mov ax, 4F00h
mov bx, seg GeneralSVGAInfo
mov es, bx
mov di, offset GeneralSVGAInfo
int 10h
end;
{------------------}
Function GetSVGAInfo(Mode : Word):Word;Assembler;
asm
mov ax, 4F01h
mov bx, seg SVGAModeInfo
mov es, bx
mov di, offset SVGAModeInfo
mov cx, word ptr Mode
int 10h
end;
{------------------}
Procedure DecodeFlag(Flag_:Byte);
begin
asm
push ds
mov bx, seg Flag
mov ds, bx
mov bx, offset Flag
mov al, byte ptr Flag_
push ax
and al, 1
mov byte ptr [bx], al
pop ax
push ax
shr al, 1
and al, 1
mov byte ptr [bx+1], al
pop ax
push ax
shr al, 2
and al, 1
mov byte ptr [bx+2], al
pop ax
push ax
shr al, 3
and al, 1
mov byte ptr [bx+3], al
pop ax
push ax
shr al, 4
and al, 1
mov byte ptr [bx+4], al
pop ax
push ax
shr al, 5
and al, 1
mov byte ptr [bx+5], al
pop ax
push ax
shr al, 6
and al, 1
mov byte ptr [bx+6], al
pop ax
push ax
shr al, 7
and al, 1
mov byte ptr [bx+7], al
pop ax
pop ds
end
end;
{------------------}
Procedure DecodeAttribMode(Attr : Word);
begin
asm
push ds
mov bx, seg ModeAttr
mov ds, bx
mov bx, offset ModeAttr
mov ax, word ptr Attr
push ax
and ax, 1
mov byte ptr [bx], al
pop ax
push ax
shr ax, 1
and ax, 1
mov byte ptr [bx+1], al
pop ax
push ax
shr ax, 2
and ax, 1
mov byte ptr [bx+2], al
pop ax
push ax
shr ax, 3
and ax, 1
mov byte ptr [bx+3], al
pop ax
push ax
shr ax, 4
and ax, 1
mov byte ptr [bx+4], al
pop ax
push ax
shr ax, 5
and ax, 1
mov byte ptr [bx+5], al
pop ax
push ax
shr ax, 6
and ax, 1
mov byte ptr [bx+6], al
pop ax
push ax
shr ax, 7
and ax, 1
mov byte ptr [bx+7], al
pop ax
push ax
shr ax, 8
and ax, 1
mov byte ptr [bx+8], al
pop ax
push ax
shr ax, 9
and ax, 1
mov byte ptr [bx+9], al
pop ax
push ax
shr ax, 10
mov byte ptr [bx+10], al
pop ax
pop ds
end
end;
{------------------}
Procedure DecodeWinAttrib(Attr : Byte);
begin
asm
push ds
mov bx, seg WinAttr
mov ds, bx
mov bx, offset WinAttr
mov al, byte ptr Attr
push ax
shr al, 1
and al, 1
mov byte ptr [bx], al
pop ax
push ax
shr al, 2
and al, 1
mov byte ptr [bx+1], al
pop ax
push ax
shr al, 3
and al, 1
mov byte ptr [bx+2], al
pop ax
push ax
pop dx
and al, 1
shr dl, 3
or al, dl
mov byte ptr [bx+3], al
pop ds
end
end;
{------------------}
Function ReadKey : Char;Assembler;
asm
mov ah, 10h
int $16
end;
{----------------}
Procedure ResetTimer;Assembler;
asm
mov cx, 0
mov dx, 1
mov ah, $86
int $15
jnc @1
mov ah, 83h
mov al, 1
int 15h
@1:
end;
{------------------}
Function HexW(X: Word): String;
{���������� 16-������ ��������� �}
var
S: String;
k: Byte;
begin
S := '';
for k := 3 downto 0 do
begin
if (X shr (k*4)) and 15 = 0 then
if Length(S)=0 then Continue;
S := S+HS[(X shr (k*4)) and 15];
end;
if Length(S) = 0 then S := '0';
if S=' ' then S := '0';
HexW := S
end; {HexW}
{=+=+=+=+=+=+=+=+=+=++=+=+=+=+=+=+}
Procedure Delay(V, W : Word);Assembler;
asm
@1:
mov cx, Word Ptr V
mov dx, Word Ptr W
mov ah, $86
int $15
jc @1
end;
{------------------------}
Function KeyPressed : Boolean;Assembler;
asm
mov ah, $0B
int $21
end;
{----------------}
Procedure PutCursor(xx, yy : Byte);
begin
xt := xx;
yt := yy;
if xt > 80 then
begin
inc(yt);
xt:=1;
end;
if yt > 25 then
begin
yt := 1;
xt := 1;
if ReadKey=#27 then Halt;
asm
mov ax, 3
int 10h
end
end;
asm
mov ah, 2
mov dh, Byte Ptr yt
mov dl, Byte Ptr xt
dec dh
dec dl
mov bh, 0
int $10
end;
end;
{------------------------}
Procedure PutChr(C:Char);
begin
asm
mov ah, $09
mov bh, 0
mov bl, 00000111b
mov al, Byte ptr C
mov cx, 1
int $10
end;
PutCursor(xt+1, yt);
end;
{---------------------}
Procedure Wrt(S:String);
var
i : Byte;
begin
for i := 1 to Byte(S[0]) do
PutChr(S[i]);
end;
{------------------------}
Procedure NL;
begin
PutCursor(1, yt+1);
end;
{------------------------}
Procedure WrtLn(S:String);
begin
Wrt(S);
NL;
end;
{------------------}
Procedure ModeInfo(Mode_ : Word);
var
i : Word;
begin
WrtLn('##### ���������� � ������ '+HexW(Mode_)+'h: ##### ');
DecodeSVGAMode(Mode_);
with SVGAMode do
begin
WrtLn('����� SVGA: '+HexW(Mode)+'h');
WrtLn('������: '+HexW(Res)+'h');
if NClearVM then
WrtLn('---> ����������� �� ���������, ���� ��������� - ����')
else
WrtLn('---> ��� ��������� ������ ����������� ���������');
if Stdrt then
WrtLn('---> ����������� VBE SVGA-�����')
else
WrtLn('---> ������������� VBE SVGA-�����');
if NStdrt then
WrtLn('---> ������������� SVGA-�����')
else
WrtLn('---> ����������� SVGA-�����');
if AppFast then
WrtLn('---> ���������� ���������� ���������')
else
WrtLn('---> �� ���������� ���������� ���������');
if LFB then
WrtLn('---> ���������� LFB')
else
WrtLn('---> �� ���������� LFB');
if NCVM then
WrtLn('---> ��� ��������� ������ ����������� ���������')
else
WrtLn('---> ��� ��������� ������ ����������� �� ���������');
end;
GetSVGAInfo(Mode_);
with SVGAModeInfo do
begin
DecodeAttribMode(AttribMode);
with ModeAttr do
begin
if ModePresent then
WrtLn('---> ����� ������������')
else
WrtLn('---> ����� �����������');
if PaddInfoPresent then
WrtLn('---> �������������� ���������� ������������')
else
WrtLn('---> �������������� ���������� �����������');
if TxBIOSOutpSupport then
WrtLn('---> �������������� ����� ������ �� ����� ���������� BIOS')
else
WrtLn('---> ����� ������ �� ����� ���������� BIOS �� ��������������');
if ColoredMode then
WrtLn('---> ����� �������')
else
WrtLn('---> ����� �����-�����');
if GraphicsMode then
WrtLn('---> ����� �����������')
else
WrtLn('---> ����� ���������');
if VGAIncomp then
WrtLn('---> ����������� � VGA')
else
WrtLn('---> ��������� � VGA');
if BankSwitchNotSupp then
WrtLn('---> �� �������������� ������������ ������')
else
WrtLn('---> ������������ ������ ��������������');
if LFBNotSupp then
WrtLn('---> �� �������������� LFB')
else
WrtLn('---> LFB ��������������');
if UnDef then
WrtLn('---> ������������� ��� ����� 1')
else
WrtLn('---> ������������� ��� ����� 0');
if EnableDirectAccessRq then
WrtLn('---> ��������� ����� EnableDirectAccess ����� ������������� ������')
else
WrtLn('---> ����� EnableDirectAccess ����� ������������� ������ �� ���������');
Wrt('���� ������������� ��� �����: ');
WrtLn(HexW(Undef7Bit));
end;
DecodeWinAttrib(WinA_Attr);
WrtLn('^^^ ^^ ���� A ^^ ^^^');
with WinAttr do
begin
if WinPresent then
WrtLn('---> ���� ����������')
else
WrtLn('---> ���� ���');
if ReadPermit then
WrtLn('---> ������ �� ���� ���������')
else
WrtLn('---> ������ �� ���� ���������');
if WritePermit then
WrtLn('---> ������ � ���� ���������')
else
WrtLn('---> ������ � ���� ���������');
Wrt('������� �����: ');
WrtLn(HexW(OddMent));
end;
DecodeWinAttrib(WinB_Attr);
WrtLn('^^^ ^^ ���� B ^^ ^^^');
with WinAttr do
begin
if WinPresent then
WrtLn('---> ���� ����������')
else
WrtLn('---> ���� ���');
if ReadPermit then
WrtLn('---> ������ �� ���� ���������')
else
WrtLn('---> ������ �� ���� ���������');
if WritePermit then
WrtLn('---> ������ � ���� ���������')
else
WrtLn('---> ������ � ���� ���������');
Wrt('������� �����: ');
WrtLn(HexW(OddMent));
end;
Str(WinGranul, St);
WrtLn('������������� ���� - '+St+' Kb');
Str(WinSize, St);
WrtLn('������ ���� - '+St+' Kb');
WrtLn('���������� ����� ���� A: '+HexW(WinA_Seg)+'h');
WrtLn('���������� ����� ���� B: '+HexW(WinB_Seg)+'h');
Wrt('����� ��������� ����������� ����: ');
WrtLn(HexW(Seg(TransLockProc^))+'h:'+HexW(Ofs(TransLockProc^))+'h');
Str(LogStrSize, St);
WrtLn('� ���������� ������ '+St+' ����� ����');
Str(Width, St);
WrtLn('������ � �������� ��� ��������: '+ St);
Str(Height, St);
WrtLn('������ � �������� ��� ��������: '+ St);
Str(SimbolWidth, St);
WrtLn('������ �������� � ��������: '+ St);
Str(SimbolHeight, St);
WrtLn('������ �������� � ��������: '+ St);
Str(Planes, St);
WrtLn('����� ���������� ������: '+ St);
Str(BitPerPix, St);
WrtLn('����� ��� �� ������: '+ St);
Str(Banks, St);
WrtLn('����� ������: '+ St);
Wrt('������ ������('+HexW(MemoryModel)+'h): ');
case MemoryModel of
$00:WrtLn('�����');
$01:WrtLn('CGA-�������');
$02:WrtLn('HGC-�������');
$03:WrtLn('EGA-�������(16 ������)');
$04:WrtLn('VGA-�������(256 ������ � ����� ���������)');
$05:WrtLn('����� X (256 ������ � ������ ����������)');
$06:WrtLn('RGB(15-������ ��� ����)');
$07:WrtLn('YUV');
$08..$0F:WrtLn('VESA');
$10..$FF:WrtLn('������������� ������');
end;
Str(BankSize, St);
WrtLn('������ �����: '+St+' Kb');
Str(VideoPages, St);
WrtLn('����� ������������: '+St);
WrtLn('�������� ������������������ �����: '+HexW(Reserv1)+'h');
WrtLn('������� ����� ������� ����������: '+HexW(BitMaskRed)+'h');
Str(FirstBitRed, St);
WrtLn('������ ��� ������� ����������: '+St);
WrtLn('������� ����� ������ ����������: '+HexW(BitMaskGreen)+'h');
Str(FirstBitGreen, St);
WrtLn('������ ��� ������ ����������: '+St);
WrtLn('������� ����� ����� ����������: '+HexW(BitMaskBlue)+'h');
Str(FirstBitBlue, St);
WrtLn('������ ��� ����� ����������: '+St);
WrtLn('������� ����� ����������������� ����������: '+HexW(BitMaskReserv)+'h');
Str(FirstBitReserv, St);
WrtLn('������ ��� ����������������� ����������: '+St);
case Addition and 1 of
1:WrtLn('�������������� �������������������� ������ (�/� 09h)');
0:WrtLn('�������������������� ������ �� ��������������');
end;
case Addition and 2 of
0:WrtLn('���������� �� ����� ������������ ���� � ����������������� ����������');
1:WrtLn('���������� ����� ������������ ���� � ����������������� ����������');
end;
WrtLn('�������������� ����^^^: '+HexW(Addition)+'h');
Wrt('���������� ����� ������ LFB: ');
WrtLn(HexW(Seg(LFB_Physics^))+'h:'+HexW(Ofs(LFB_Physics^))+'h');
Wrt('�������� �� ������ LFB �� ������� ����� �� ������: ');
WrtLn(HexW(Hi(LFB_Offset))+'|'+HexW(Lo(LFB_Offset)));
Str(NoMapLFB, St);
WrtLn('������ ������ � LFB, �� �������������� �� ������: '+St+' Kb');
WrtLn('������: ');
for j := 0 to 12 do
begin
for i := 1 to 16 do Wrt(HexW(Reserv2[16*j+i-1])+' ');
WrtLn('')
end;
WrtLn('---CHAR--- "������" ---CHAR--- ');
for i := 0 to 205 do Wrt(Char(Reserv2[i])+' ');
WrtLn('');
WrtLn('----- ����� "������" -------- ');
WrtLn('================================================');
end;
end;
{------------------------}
begin
asm
mov ax, 3
int 10h
end;
xt := 1;
yt := 1;
WrtLn('-=-=-=-=-=-=-=-=-=-==========================-=-=-=-=-=-=-=-=-=-=--=');
WrtLn(' ��������� ����� SVGA ����������...');
WrtLn('-=-=-=-=-=-=-=-=-=-==========================-=-=-=-=-=-=-=-=-=-=--=');
GeneralSVGAInfo.VESA_VBE2:='VBE2';
k := GetGeneralSVGAInfo;
with GeneralSVGAInfo do
begin
if k = $004F then WrtLn('������ ��������!')
else
begin
WrtLn('��������� ������!');
if Lo(k) <> $004F then WrtLn('������� �� ��������������.');
if Hi(k) = 1 then WrtLn('������ �� ��������.');
Halt;
end;
Wrt('���������: ');
WrtLn(VESA_VBE2);
WrtLn('������: '+HexW(Hi(VBEversion))+'.'+ HexW(Lo(VBEversion)));
Wrt('���������� ������ ������ ���������� VBE: ');
St :=HexW(InteriorVersion shr 8)+'.'+HexW(InteriorVersion and $00FF);
WrtLn(St);
WrtLn('������: VBE/AF: '+HexW(Hi(VBE_AFversion))+'.'+ HexW(Lo(VBE_AFversion)));
WrtLn('����� ������ �������������: '+HexW(Seg(ProdIdentStr^))+':'+HexW(Ofs(ProdIdentStr^)));
Wrt('����� ������ � ��������� �������������: ');
Wrt(HexW(Seg(ProdNameStr^))+':');
WrtLn(HexW(Ofs(ProdNameStr^)));
Wrt('����� ������ � ��������� ��������: ');
Wrt(HexW(Seg(VAdaptNameStr^))+':');
WrtLn(HexW(Ofs(VAdaptNameStr^)));
Wrt('����� ������ � ������� ��������: ');
Wrt(HexW(Seg(VerAdaptStr^))+':');
WrtLn(HexW(Ofs(VerAdaptStr^)));
Wrt('����� ������ ��������� �������: ');
Wrt(HexW(Seg(SVGAModeList^))+':');
WrtLn(HexW(Ofs(SVGAModeList^)));
Wrt('����� ������ �������,');
Wrt(' �������������� ���������� ���������: ');
Wrt(HexW(Seg(AppFastModesList^))+':');
WrtLn(HexW(Ofs(AppFastModesList^)));
WrtLn('�������� �����: '+HexW(FlagFirst));
WrtLn('>>> ���� ����� ��������: ');
DecodeFlag(FlagFirst);
with Flag do
begin
if ADC_8Bit then
WrtLn('---> ��� ������������ 8-������� �������� ����������')
else
WrtLn('---> ��� �� ������������ 8-������� �������� ����������');
if VGAIncompatible then
WrtLn('---> ������������ ����������� � VGA')
else
WrtLn('---> ������������ ��������� � VGA');
if ADC_RevRayTrace then
WrtLn('---> ��� ����� ��������������� ������ ��� �������� ���� ����')
else
WrtLn('---> ��� ����� ��������������� �� ������ ��� �������� ���� ����');
if VBE_AF_Support then
WrtLn('---> �������������� ������������ ����������� ��������� �������')
else
WrtLn('---> ������������ ����������� ��������� ������� �� ��������������');
if EnableDirectAccessReq then
WrtLn('---> ��������� ����� EnableDirectAccess ����� �������������� LFB')
else
WrtLn('---> ����� EnableDirectAccess ����� �������������� LFB �� ���������');
if AppMouseInd then
WrtLn('---> �������������� ���������� ��������� ����')
else
WrtLn('---> ���������� ��������� ���� �� ��������������');
if AppClipping then
WrtLn('---> �������������� ���������� clipping')
else
WrtLn('---> ���������� clipping �� ��������������');
if AppBitBlt then
WrtLn('---> �������������� ���������� BitBlt')
else
WrtLn('---> ���������� BitBlt �� ��������������');
end;
Wrt('���� - ������� ������(�����): ');
for i := 0 to 2 do
Wrt('"'+HexW(FlagReserv[i])+'" ');
WrtLn('');
Wrt('������ �����������: ');
Str(VMSize, St);
Wrt(St+' * 64 Kb = ');
Str(VMSize*64, St);
WrtLn(St+ ' Kb');
Wrt('�������������: ');
i := 0;
While (ProdIdentStr^[i] <> #0) and (i<100) do
begin
Wrt(ProdIdentStr^[i]);
inc(i);
end;
if ProdIdentStr^[0]=#0 then Wrt('{ ���������� ����������� }');
WrtLn('');
Wrt('�������� �������������: ');
i := 0;
While (ProdNameStr^[i] <> #0) and (i<100) do
begin
Wrt(ProdNameStr^[i]);
inc(i);
end;
if ProdNameStr^[0]=#0 then Wrt('{ ���������� ����������� }');
WrtLn('');
Wrt('�������� ��������: ');
i := 0;
While (VAdaptNameStr^[i] <> #0) and (i<100) do
begin
Wrt(VAdaptNameStr^[i]);
inc(i);
end;
if VAdaptNameStr^[0]=#0 then Wrt('{ ���������� ����������� }');
WrtLn('');
Wrt('������ ��������: ');
i := 0;
While (VerAdaptStr^[i] <> #0) and (i<100) do
begin
Wrt(VerAdaptStr^[i]);
inc(i);
end;
if VerAdaptStr^[0]=#0 then Wrt('{ ���������� ����������� }');
WrtLn('');
WrtLn('VESA ������: ');
for j := 0 to 26 do
begin
for i := 1 to 16 do Wrt(HexW(VESAReserv[16*j+i-1])+' ');
WrtLn('')
end;
WrtLn('---CHAR--- "VESA ������" ---CHAR--- ');
for i := 0 to 215 do Wrt(Char(VESAReserv[i])+' ');
WrtLn('');
WrtLn('----- ����� "VESA ������" -------- ');
WrtLn('================================================');
WrtLn('������ ������ VBE: ');
for j := 0 to 15 do
begin
for i := 1 to 16 do Wrt(HexW(VBEDataReserv[16*j+i-1])+' ');
WrtLn('')
end;
WrtLn('---CHAR--- "������ ������ VBE" ---CHAR--- ');
for i := 0 to 216 do Wrt(Char(VBEDataReserv[i])+' ');
WrtLn('');
WrtLn('----- ����� "������ ������ VBE" -------- ');
WrtLn('++++++++++++++++ ������ ��������� ������� ++++++++++++++++');
i := 0;
While (SVGAModeList^[i] <> $FFFF) do
begin
Wrt(HexW(SVGAModeList^[i])+'h ');
inc(i);
end;
if SVGAModeList^[0]=$FFFF then Wrt('[] { ������ ���� } []')
else
begin
Str(i, St);
WrtLn('����� �������� �������: '+St);
end;
WrtLn('');
WrtLn('<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>');
WrtLn('+++++ ������ �������, �������������� ���������� ��������� +++++');
i := 0;
While (AppFastModesList^[i] <> $FFFF) do
begin
Wrt(HexW(AppFastModesList^[i])+'h ');
inc(i);
end;
if AppFastModesList^[0]=$FFFF then Wrt('[] { ������ ���� } []');
WrtLn('');
WrtLn('<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>');
i := 0;
While (SVGAModeList^[i] <> $FFFF) do
begin
NM[i+1]:=SVGAModeList^[i];
inc(i);
end;
NM[i+1]:=SVGAModeList^[i];
i := 1;
While (NM[i] <> $FFFF) do
begin
ModeInfo(NM[i]);
inc(i);
end;
WrtLn('');
end;
While ReadKey<>#27 do
begin
Wrt('������� ����� ������ � ������� ������ ������ ����������:');
ReadLn(NM[1]);
WrtLn('');
ModeInfo(NM[1]);
end;
end.
�����