More iopl'ed ports and test for brken BIOS

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@2360 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
nick 2001-10-22 09:28:44 +00:00
parent 43e4f2c792
commit 58ce93efc7
2 changed files with 9 additions and 0 deletions

View File

@ -56,14 +56,22 @@ static inline int VBE_LRMI_int(int int_no, struct LRMI_regs *r)
int vbeInit( void )
{
unsigned short iopl_port,int_10_seg;
size_t i;
if(!LRMI_init()) return VBE_VM86_FAIL;
/*
Allow read/write to ALL io ports
*/
int_10_seg = *(unsigned short *)PhysToVirtSO(0x0000,0x0042);
/* Video BIOS should be at C000:0000 and above */
if((int_10_seg >> 12) < 0xC) return VBE_BROKEN_BIOS;
ioperm(0, 1024, 1);
iopl(3);
memset(&vbe_pm_info,0,sizeof(struct VesaProtModeInterface));
vbeGetProtModeInfo(&vbe_pm_info);
i = 0;
while((iopl_port=vbe_pm_info.iopl_ports[i++]) != 0xFFFF) ioperm(iopl_port,1,1);
iopl(3);
return VBE_OK;
}

View File

@ -189,6 +189,7 @@ struct VesaProtModeInterface
#define VBE_VM86_FAIL -1
#define VBE_OUT_OF_DOS_MEM -2
#define VBE_OUT_OF_MEM -3
#define VBE_BROKEN_BIOS -4
#define VBE_VESA_ERROR_MASK 0x004f
#define VBE_VESA_ERRCODE_MASK 0xff00