VOGONS


First post, by thrawn235

User metadata
Rank Newbie
Rank
Newbie

Hello,

I've tried to follow the VESA specification as in this document:
http://www.petesqbsite.com/sections/tutorials/tuts/vbe3.pdf

Specifically i was trying to obtain the protected mode entry point.

I've copied the BIOS Image from C0000h and started Scanning for the signature 'PMID'
couldnt find it though.

That procedure seems to be VBE3.0 only. So I'm wondering. What is the VBE Version that dosbox (or specifically the svga_s3) supports?

Thats the code i've used to copy and check the BIOS image
(its very simple, just prints 1000 chars of the memory block for each key press)

I've used a string search before, but wasn't finding anything so i decided to take a manual look. hence the code snippet.

void* BIOS = (char*)malloc(32000);

dosmemget(0xC0000, 32000, BIOS);

char* accessptr;
accessptr = (char*)BIOS;
for(int u = 0; u <= 32; u++)
{
for(int i = 0; i <= 1000; i++)
{
cout<<accessptr[u*1000+i];
}
getch();
}

Reply 1 of 2, by Falcosoft

User metadata
Rank Oldbie
Rank
Oldbie

It's VESA 2.0. In DOS era even VESA 2.0 with its linear frame buffer extension was not so common place so UNIVBE could be used on cards that supported SVGA resolutions in a non standard way or supported only VESA 1.2. VESA 3.0 was supported mainly by 3Dfx and Geforce cards up to Geforce 4 when some functions suddenly started to disappear or became buggy to the point that nowadays Geforce cards are not even VESA 2.0/1.2 compatible. On paper even Geforce 1000/2000 series are still VESA 3.0 compatible (support is reported by the cards) but some functions have been broken since Geforce FX series. AFAIK there are no games at all that used VESA 3.0 but there are many that used VESA 2.0.

Website, Facebook, Youtube
Falcosoft Soundfont Midi Player + Munt VSTi + BassMidi VSTi
VST Midi Driver Midi Mapper

Reply 2 of 2, by ripsaw8080

User metadata
Rank DOSBox Author
Rank
DOSBox Author

INT 10h/AX=4F0Ah (page 56 in the PDF you linked)

Regarding "entry points", the p-mode code is typically copied into a code descriptor for execution, but you can arrange a descriptor to execute "in place" if you really want to.