235 lines
6.4 KiB
C
235 lines
6.4 KiB
C
/*
|
||
* demdisp.c - SVC dispatch module
|
||
*
|
||
* Modification History:
|
||
*
|
||
* Sudeepb 31-Mar-1991 Created
|
||
*/
|
||
|
||
#include "dem.h"
|
||
#include <stdio.h>
|
||
#include <softpc.h>
|
||
#include <dbgsvc.h>
|
||
|
||
|
||
#if DBG
|
||
|
||
PCHAR aSVCNames[] = {
|
||
"demChgFilePtr",
|
||
"demChMod",
|
||
"demClose",
|
||
"demCreate",
|
||
"demCreateDir",
|
||
"demDelete",
|
||
"demDeleteDir",
|
||
"demDeleteFCB",
|
||
"demFileTimes",
|
||
"demFindFirst",
|
||
"demFindFirstFCB",
|
||
"demFindNext",
|
||
"demFindNextFCB",
|
||
"demGetBootDrive",
|
||
"demGetDriveFreeSpace",
|
||
"demGetDrives",
|
||
"demGSetMediaID",
|
||
"demLoadDos",
|
||
"demOpen",
|
||
"demQueryCurrentDir",
|
||
"demQueryDate",
|
||
"demQueryTime",
|
||
"demRead",
|
||
"demRename",
|
||
"demSetCurrentDir",
|
||
"demSetDate",
|
||
"demSetDefaultDrive",
|
||
"demSetDTALocation",
|
||
"demSetTime",
|
||
"demSetV86KernelAddr",
|
||
"demWrite",
|
||
"demGetDriveInfo",
|
||
"demRenameFCB",
|
||
"demIOCTL",
|
||
"demCreateNew",
|
||
"DemDiskReset",
|
||
"DemSetDPB",
|
||
"DemGetDPB",
|
||
"DemSleazeFunc",
|
||
"demCommit",
|
||
"DemExtHandle",
|
||
"DemAbsDRD",
|
||
"DemAbsDWRT",
|
||
"DemGsetCDPG",
|
||
"DemCreateFCB",
|
||
"DemOpenFCB",
|
||
"DemCloseFCB",
|
||
"DemFCBIO",
|
||
"DemDate16",
|
||
"DemGetFileInfo",
|
||
"DemSetHardErrorInfo",
|
||
"DemRetry",
|
||
"DemLoadDosAppSym",
|
||
"DemFreeDosAppSym",
|
||
"DemEntryDosApp",
|
||
"DemDOSDispCall",
|
||
"DemDOSDispRet",
|
||
"DemOutputString",
|
||
"DemInputString",
|
||
"DemIsDebug",
|
||
"DemTerminatePDB",
|
||
"DemExitVDM",
|
||
"DemWOWFiles",
|
||
"DemLockOper",
|
||
"demNotYetImplemented",
|
||
"DemGetComputerName",
|
||
"DemFastRead",
|
||
"DemFastWrite",
|
||
"DemCheckPath",
|
||
"DemSystemSymbolOp",
|
||
"DemGetDpbList",
|
||
"DemPipeFileDataEOF",
|
||
"DemPipeFileEOF",
|
||
"DemLFNEntry",
|
||
"DemSetDosVarLocation"
|
||
};
|
||
|
||
#endif // DBG
|
||
|
||
DWORD fShowSVCMsg = 0;
|
||
ULONG CurrentISVC;
|
||
|
||
|
||
PFNSVC apfnSVC [] = {
|
||
demChgFilePtr, //SVC_DEMCHGFILEPTR
|
||
demChMod, //SVC_DEMCHMOD
|
||
demClose, //SVC_DEMCLOSE
|
||
demCreate, //SVC_DEMCREATE
|
||
demCreateDir, //SVC_DEMCREATEDIR
|
||
demDelete, //SVC_DEMDELETE
|
||
demDeleteDir, //SVC_DEMDELETEDIR
|
||
demDeleteFCB, //SVC_DEMDELETEFCB
|
||
demFileTimes, //SVC_DEMFILETIMES
|
||
demFindFirst, //SVC_DEMFINDFIRST
|
||
demFindFirstFCB, //SVC_DEMFINDFIRSTFCB
|
||
demFindNext, //SVC_DEMFINDNEXT
|
||
demFindNextFCB, //SVC_DEMFINDNEXTFCB
|
||
demGetBootDrive, //SVC_DEMGETBOOTDRIVE
|
||
demGetDriveFreeSpace, //SVC_DEMGETDRIVEFREESPACE
|
||
demGetDrives, //SVC_DEMGETDRIVES
|
||
demGSetMediaID, //SVC_DEMGSETMEDIAID
|
||
demLoadDos, //SVC_DEMLOADDOS
|
||
demOpen, //SVC_DEMOPEN
|
||
demQueryCurrentDir, //SVC_DEMQUERYCURRENTDIR
|
||
demQueryDate, //SVC_DEMQUERYDATE
|
||
demQueryTime, //SVC_DEMQUERYTIME
|
||
demRead, //SVC_DEMREAD
|
||
demRename, //SVC_DEMRENAME
|
||
demSetCurrentDir, //SVC_DEMSETCURRENTDIR
|
||
demSetDate, //SVC_DEMSETDATE
|
||
demSetDefaultDrive, //SVC_DEMSETDEFAULTDRIVE
|
||
demSetDTALocation, //SVC_DEMSETDTALOCATION
|
||
demSetTime, //SVC_DEMSETTIME
|
||
demSetV86KernelAddr, //SVC_DEMSETV86KERNELADDR
|
||
demWrite, //SVC_DEMWRITE
|
||
demNotYetImplemented, //SVC_GETDRIVEINFO
|
||
demRenameFCB, //SVC_DEMRENAMEFCB
|
||
demIOCTL, //SVC_DEMIOCTL
|
||
demCreateNew, //SVC_DEMCREATENEW
|
||
demDiskReset, //SVC_DEMDISKRESET
|
||
demNotYetImplemented, //SVC_DEMSETDPB
|
||
demGetDPB, //SVC_DEMGETDPB
|
||
demNotYetImplemented, //SVC_DEMSLEAZEFUNC
|
||
demCommit, //SVC_DEMCOMMIT
|
||
demNotYetImplemented, //SVC_DEMEXTHANDLE
|
||
demAbsRead, //SVC_DEMABSDRD
|
||
demAbsWrite, //SVC_DEMABSDWRT
|
||
demNotYetImplemented, //SVC_DEMGSETCDPG
|
||
demCreateFCB, //SVC_DEMCREATEFCB
|
||
demOpenFCB, //SVC_DEMOPENFCB
|
||
demCloseFCB, //SVC_DEMCLOSEFCB
|
||
demFCBIO, //SVC_FCBIO
|
||
demDate16, //SVC_DEMDATE16
|
||
demGetFileInfo, //SVC_DEMGETFILEINFO
|
||
demSetHardErrorInfo, //SVC_DEMSETHARDERRORINFO
|
||
demRetry, //SVC_DEMRETRY
|
||
demLoadDosAppSym, //SVC_DEMLOADDOSAPPSYM
|
||
demFreeDosAppSym, //SVC_DEMFREEDOSAPPSYM
|
||
demEntryDosApp, //SVC_DEMENTRYDOSAPP
|
||
demDOSDispCall, //SVC_DEMDOSDISPCALL
|
||
demDOSDispRet, //SVC_DEMDOSDISPRET
|
||
demOutputString, //SVC_OUTPUT_STRING
|
||
demInputString, //SVC_INPUT_STRING
|
||
demIsDebug, //SVC_ISDEBUG
|
||
demTerminatePDB, //SVC_PDBTERMINATE
|
||
demExitVDM, //SVC_DEMEXITVDM
|
||
demWOWFiles, //SVC_DEMWOWFILES
|
||
demLockOper, //SVC_DEMLOCKOPER
|
||
demNotYetImplemented, //SVC_DEMNOTYETIMPLEMENTED
|
||
demGetComputerName, //SVC_DEMGETCOMPUTERNAME
|
||
demNotYetImplemented, //SVC_DEMFASTREAD
|
||
demNotYetImplemented, //SVC_DEMFASTWRITE
|
||
demCheckPath, //SVC_DEMCHECKPATH
|
||
demSystemSymbolOp, //SVC_DEMSYSTEMSYMBOLOP
|
||
demGetDPBList, //SVC_DEMBUILDDPBLIST
|
||
demPipeFileDataEOF, //SVC_DEMPIPEFILEDATAEOF
|
||
demPipeFileEOF, //SVC_DEMPIPEFILEEOF
|
||
demLFNEntry, //SVC_DEMLFNENTRY
|
||
demSetDosVarLocation //SVC_SETDOSVARLOCATION
|
||
};
|
||
|
||
|
||
/* DemDispatch - 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 DemDispatch (ULONG iSvc)
|
||
{
|
||
|
||
DBGTRACE(VDMTR_TYPE_DEM + DEM_EVENT_DISPATCH, 0, iSvc);
|
||
|
||
if (iSvc >= SVC_DEMLASTSVC){
|
||
#if DBG
|
||
sprintf(demDebugBuffer,"Unimplemented SVC index %x\n",iSvc);
|
||
OutputDebugStringOem(demDebugBuffer);
|
||
#endif
|
||
setCF(1);
|
||
return FALSE;
|
||
}
|
||
|
||
if (pHardErrPacket) {
|
||
pHardErrPacket->vhe_fbInt24 = 0;
|
||
}
|
||
|
||
CurrentISVC = iSvc;
|
||
(apfnSVC [iSvc])();
|
||
|
||
DBGTRACE(VDMTR_TYPE_DEM + DEM_EVENT_DISPATCH_EXIT, 0, iSvc);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
VOID demNotYetImplemented (VOID)
|
||
{
|
||
if (fShowSVCMsg) {
|
||
sprintf(demDebugBuffer,"Unimplemented SVC %d\n",CurrentISVC);
|
||
OutputDebugStringOem(demDebugBuffer);
|
||
}
|
||
|
||
setCF(0);
|
||
return;
|
||
}
|
||
|
||
VOID demSetV86KernelAddr (VOID)
|
||
{
|
||
// Here debugger callout has to be made for DOSKRNL symbols
|
||
return;
|
||
}
|
||
|
||
|