60 lines
1.4 KiB
C
60 lines
1.4 KiB
C
|
/*
|
||
|
* xmsdisp.c - SVC dispatch module for XMS
|
||
|
*
|
||
|
* Modification History:
|
||
|
*
|
||
|
* Sudeepb 15-May-1991 Created
|
||
|
*
|
||
|
* williamh 25-Sept-1992 Added UMB support
|
||
|
*/
|
||
|
|
||
|
#include <xms.h>
|
||
|
#include <xmsexp.h>
|
||
|
#include <stdio.h>
|
||
|
#include <softpc.h>
|
||
|
#include <xmssvc.h>
|
||
|
|
||
|
PFNSVC apfnXMSSvc [] = {
|
||
|
xmsA20, // XMS_A20
|
||
|
xmsMoveBlock, // XMS_MOVEBLOCK
|
||
|
xmsAllocBlock, // XMS_ALLOCBLOCK
|
||
|
xmsFreeBlock, // XMS_FREEBLOCK
|
||
|
xmsSysPageSize, // XMS_SYSTEMPAGESIZE
|
||
|
xmsQueryExtMem, // XMS_EXTMEM
|
||
|
xmsInitUMB, // XMS_INITUMB
|
||
|
xmsRequestUMB, // XMS_REQUESTUMB
|
||
|
xmsReleaseUMB, // XMS_RELEASEUMB
|
||
|
xmsNotifyHookI15, // XMS_NOTIFYHOOKI15
|
||
|
xmsQueryFreeExtMem, // XMS_QUERYEXTMEM
|
||
|
xmsReallocBlock // XMS_REALLOCBLOCK
|
||
|
};
|
||
|
|
||
|
/* XMSDispatch - Dispatch SVC call to right handler.
|
||
|
*
|
||
|
* Entry - iSvc (SVC byte following SVCop)
|
||
|
*
|
||
|
* Exit - None
|
||
|
*
|
||
|
* Note - Some mechanism has to be worked out to let the emulator know
|
||
|
* about DOSKRNL code segment and size. Using these it will figure
|
||
|
* out whether SVCop (hlt for the moment) has to be passed to
|
||
|
* DEM or to be handled as normal invalid opcode.
|
||
|
*/
|
||
|
|
||
|
BOOL XMSDispatch (ULONG iSvc)
|
||
|
{
|
||
|
|
||
|
#if DBG
|
||
|
|
||
|
if (iSvc >= XMS_LASTSVC){
|
||
|
printf("XMS:Unimplemented SVC index %x\n",iSvc);
|
||
|
setCF(1);
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
(apfnXMSSvc [iSvc])();
|
||
|
return TRUE;
|
||
|
}
|