1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- uses
- go32;
- procedure dosalloc(var selector : word;
- var segment : word; size : longint);
- var
- res : longint;
- begin
- res := global_dos_alloc(size);
- selector := word(res);
- segment := word(res shr 16);
- end;
- procedure dosfree(selector : word);
- begin
- global_dos_free(selector);
- end;
- type
- VBEInfoBuf = packed record
- Signature : array[0..3] of char;
- Version : Word;
- reserved : array[0..505] of byte;
- end;
- var
- selector,
- segment : Word;
- r : trealregs;
- infobuf : VBEInfoBuf;
- begin
- fillchar(r, sizeof(r), 0);
- fillchar(infobuf, sizeof(VBEInfoBuf), 0);
- dosalloc(selector, segment, sizeof(VBEInfoBuf));
- if (int31error<>0) then begin
- Writeln('Error while allocating real mode memory, halting');
- halt;
- end;
- infobuf.Signature := 'VBE2';
- dosmemput(segment, 0, infobuf, sizeof(infobuf));
- r.ax := $4f00; r.es := segment;
- realintr($10, r);
- dosmemget(segment, 0, infobuf, sizeof(infobuf));
- dosfree(selector);
- if (r.ax <> $4f) then begin
- Writeln('VBE BIOS extension not available, function call ',
- 'failed');
- halt;
- end;
- if (infobuf.signature[0] = 'V') and
- (infobuf.signature[1] = 'E') and
- (infobuf.signature[2] = 'S') and
- (infobuf.signature[3] = 'A') then begin
- Writeln('VBE version ', hi(infobuf.version), '.',
- lo(infobuf.version), ' detected');
- end;
- end.
|