Implemented Int 0x15/0xc0: BIOS - GET CONFIG and some other BIOS
data.
This commit is contained in:
parent
94e4485bff
commit
a7894d9311
|
@ -15,7 +15,9 @@
|
||||||
extern int DOSCONF_ReadConfig(void);
|
extern int DOSCONF_ReadConfig(void);
|
||||||
|
|
||||||
/* msdos/dosmem.c */
|
/* msdos/dosmem.c */
|
||||||
extern HANDLE16 DOSMEM_BiosSeg;
|
extern HANDLE16 DOSMEM_BiosDataSeg;
|
||||||
|
extern HANDLE16 DOSMEM_BiosSysSeg;
|
||||||
|
|
||||||
extern DWORD DOSMEM_CollateTable;
|
extern DWORD DOSMEM_CollateTable;
|
||||||
|
|
||||||
extern DWORD DOSMEM_ErrorCall;
|
extern DWORD DOSMEM_ErrorCall;
|
||||||
|
|
|
@ -138,9 +138,9 @@ BOOL32 WINAPI MAIN_KernelInit(HINSTANCE32 hinstDLL, DWORD fdwReason, LPVOID lpvR
|
||||||
SET_ENTRY_POINT( 195, 0xc0000 ); /* KERNEL.195: __C000H */
|
SET_ENTRY_POINT( 195, 0xc0000 ); /* KERNEL.195: __C000H */
|
||||||
SET_ENTRY_POINT( 179, 0xd0000 ); /* KERNEL.179: __D000H */
|
SET_ENTRY_POINT( 179, 0xd0000 ); /* KERNEL.179: __D000H */
|
||||||
SET_ENTRY_POINT( 190, 0xe0000 ); /* KERNEL.190: __E000H */
|
SET_ENTRY_POINT( 190, 0xe0000 ); /* KERNEL.190: __E000H */
|
||||||
SET_ENTRY_POINT( 173, 0xf0000 ); /* KERNEL.173: __ROMBIOS */
|
NE_SetEntryPoint( hModule, 173, DOSMEM_BiosSysSeg ); /* KERNEL.173: __ROMBIOS */
|
||||||
SET_ENTRY_POINT( 194, 0xf0000 ); /* KERNEL.194: __F000H */
|
NE_SetEntryPoint( hModule, 193, DOSMEM_BiosDataSeg ); /* KERNEL.193: __0040H */
|
||||||
NE_SetEntryPoint( hModule, 193, DOSMEM_BiosSeg ); /* KERNEL.193: __0040H */
|
NE_SetEntryPoint( hModule, 194, DOSMEM_BiosSysSeg ); /* KERNEL.194: __F000H */
|
||||||
#undef SET_ENTRY_POINT
|
#undef SET_ENTRY_POINT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ static BOOL32 INSTR_ReplaceSelector( SIGCONTEXT *context, WORD *sel )
|
||||||
static WORD sys_timer = 0;
|
static WORD sys_timer = 0;
|
||||||
if (!sys_timer)
|
if (!sys_timer)
|
||||||
sys_timer = CreateSystemTimer( 55, DOSMEM_Tick );
|
sys_timer = CreateSystemTimer( 55, DOSMEM_Tick );
|
||||||
*sel = DOSMEM_BiosSeg;
|
*sel = DOSMEM_BiosDataSeg;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE; /* Can't replace selector, crashdump */
|
return FALSE; /* Can't replace selector, crashdump */
|
||||||
|
|
|
@ -18,7 +18,8 @@
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
HANDLE16 DOSMEM_BiosSeg; /* BIOS data segment at 0x40:0 */
|
HANDLE16 DOSMEM_BiosDataSeg; /* BIOS data segment at 0x40:0 */
|
||||||
|
HANDLE16 DOSMEM_BiosSysSeg; /* BIOS ROM segment at 0xf000:0 */
|
||||||
|
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
|
|
||||||
|
@ -199,13 +200,16 @@ static void DOSMEM_InitDPMI(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DOSMEM_FillBiosSegment
|
* DOSMEM_FillBiosSegments
|
||||||
*
|
*
|
||||||
* Fill the BIOS data segment with dummy values.
|
* Fill the BIOS data segment with dummy values.
|
||||||
*/
|
*/
|
||||||
static void DOSMEM_FillBiosSegment(void)
|
static void DOSMEM_FillBiosSegments(void)
|
||||||
{
|
{
|
||||||
pBiosData = (BIOSDATA *)GlobalLock16( DOSMEM_BiosSeg );
|
BYTE *pBiosSys = (BYTE *)GlobalLock16( DOSMEM_BiosSysSeg );
|
||||||
|
BYTE *pBiosROMTable = pBiosSys+0xe6f5;
|
||||||
|
|
||||||
|
pBiosData = (BIOSDATA *)GlobalLock16( DOSMEM_BiosDataSeg );
|
||||||
|
|
||||||
/* Clear all unused values */
|
/* Clear all unused values */
|
||||||
memset( pBiosData, 0, sizeof(*pBiosData) );
|
memset( pBiosData, 0, sizeof(*pBiosData) );
|
||||||
|
@ -229,6 +233,23 @@ static void DOSMEM_FillBiosSegment(void)
|
||||||
pBiosData->NbHardDisks = 2;
|
pBiosData->NbHardDisks = 2;
|
||||||
pBiosData->KbdBufferStart = 0x1e;
|
pBiosData->KbdBufferStart = 0x1e;
|
||||||
pBiosData->KbdBufferEnd = 0x3e;
|
pBiosData->KbdBufferEnd = 0x3e;
|
||||||
|
|
||||||
|
/* fill ROM configuration table (values from Award) */
|
||||||
|
*(WORD *)(pBiosROMTable)= 0x08; /* number of bytes following */
|
||||||
|
*(pBiosROMTable+0x2) = 0xfc; /* model */
|
||||||
|
*(pBiosROMTable+0x3) = 0x01; /* submodel */
|
||||||
|
*(pBiosROMTable+0x4) = 0x00; /* BIOS revision */
|
||||||
|
*(pBiosROMTable+0x5) = 0x74; /* feature byte 1 */
|
||||||
|
*(pBiosROMTable+0x6) = 0x00; /* feature byte 2 */
|
||||||
|
*(pBiosROMTable+0x7) = 0x00; /* feature byte 3 */
|
||||||
|
*(pBiosROMTable+0x8) = 0x00; /* feature byte 4 */
|
||||||
|
*(pBiosROMTable+0x9) = 0x00; /* feature byte 5 */
|
||||||
|
|
||||||
|
/* BIOS date string */
|
||||||
|
strcpy((char *)pBiosSys+0xfff5, "13/01/99");
|
||||||
|
|
||||||
|
/* BIOS ID */
|
||||||
|
*(pBiosSys+0xfffe) = 0xfc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -353,10 +374,12 @@ BOOL32 DOSMEM_Init(HMODULE16 hModule)
|
||||||
WARN(dosmem, "Could not allocate DOS memory.\n" );
|
WARN(dosmem, "Could not allocate DOS memory.\n" );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
DOSMEM_BiosSeg = GLOBAL_CreateBlock(GMEM_FIXED,DOSMEM_dosmem+0x400,0x100,
|
DOSMEM_BiosDataSeg = GLOBAL_CreateBlock(GMEM_FIXED,DOSMEM_dosmem+0x400,
|
||||||
0, FALSE, FALSE, FALSE, NULL );
|
0x100, 0, FALSE, FALSE, FALSE, NULL );
|
||||||
|
DOSMEM_BiosSysSeg = GLOBAL_CreateBlock(GMEM_FIXED,DOSMEM_dosmem+0xf0000,
|
||||||
|
0x10000, 0, FALSE, FALSE, FALSE, NULL );
|
||||||
DOSMEM_FillIsrTable(0);
|
DOSMEM_FillIsrTable(0);
|
||||||
DOSMEM_FillBiosSegment();
|
DOSMEM_FillBiosSegments();
|
||||||
DOSMEM_InitMemory(0);
|
DOSMEM_InitMemory(0);
|
||||||
DOSMEM_InitCollateTable();
|
DOSMEM_InitCollateTable();
|
||||||
DOSMEM_InitErrorTable();
|
DOSMEM_InitErrorTable();
|
||||||
|
|
|
@ -21,6 +21,16 @@ void WINAPI INT_Int15Handler( CONTEXT *context )
|
||||||
RESET_CFLAG(context);
|
RESET_CFLAG(context);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0xc0: /* GET CONFIGURATION */
|
||||||
|
if (ISV86(context)) /* real */
|
||||||
|
ES_reg(context) = 0xf000;
|
||||||
|
else
|
||||||
|
ES_reg(context) = DOSMEM_BiosSysSeg;
|
||||||
|
BX_reg(context) = 0xe6f5;
|
||||||
|
AH_reg(context) = 0x0;
|
||||||
|
RESET_CFLAG(context);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
INT_BARF( context, 0x15 );
|
INT_BARF( context, 0x15 );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue