#include #include #include #include "demexp.h" #include "cmdsvc.h" #include "rdrexp.h" #include "dbgexp.h" #include "softpc.h" #include "fun.h" // // This module contains the fake function definitions for bop functions // extern CONTEXT IntelRegisters; extern VOID switch_to_real_mode(); extern VOID host_unsimulate(); HANDLE hWOWDll; FARPROC WOWDispatchEntry; FARPROC WOWInitEntry; void DBGDispatch( void ); void reset(){} void dummy_int(){} void unexpected_int(){} void illegal_bop(){} void print_screen(){} void time_int(){} void keyboard_int(){} void diskette_int(){} void video_io(){} void equipment(){} void memory_size(){} void disk_io(){} void rs232_io(){} void cassette_io(){} void keyboard_io(){} void printer_io(){} void rom_basic(){} void bootstrap(){} void time_of_day(){} void critical_region(){} void cmd_install(){} void cmd_load(){} void redirector(){} void ega_video_io(){} void MsBop0(){ DemDispatch((ULONG)(*Sim32GetVDMPointer( ((ULONG)getCS() << 16) + (getIP()), 1, FALSE))); setIP(getIP() + 1); } void MsBop1(){ static WowModeInitialized = FALSE; if (!WowModeInitialized) { // Load the WOW DLL if ((hWOWDll = LoadLibrary ("WOW32")) == NULL){ VDprint( VDP_LEVEL_ERROR, ("SoftPC: error initializing WOW\n") ); TerminateVDM(); return; } // Get the init entry point and dispatch entry point if ((WOWInitEntry = GetProcAddress (hWOWDll, "W32Init")) == NULL) { VDprint( VDP_LEVEL_ERROR, ("SoftPC: error initializing WOW\n") ); FreeLibrary (hWOWDll); TerminateVDM(); return; } if ((WOWDispatchEntry = GetProcAddress (hWOWDll, "W32Dispatch")) == NULL) { VDprint( VDP_LEVEL_ERROR, ("SoftPC: error initializing WOW\n") ); FreeLibrary (hWOWDll); TerminateVDM(); return; } // Call the Init Routine if ((*WOWInitEntry)() == FALSE) { VDprint( VDP_LEVEL_ERROR, ("SoftPC: error initializing WOW\n") ); TerminateVDM(); return; } WowModeInitialized = TRUE; } (*WOWDispatchEntry)(); } void MsBop2(){ XMSDispatch((ULONG)(*Sim32GetVDMPointer( ((ULONG)getCS() << 16) + (getIP()), 1, FALSE))); setIP(getIP() + 1); } void MsBop3(){ DpmiDispatch(); } void MsBop4(){ CmdDispatch((ULONG)(*Sim32GetVDMPointer( ((ULONG)getCS() << 16) + (getIP()), 1, FALSE))); setIP(getIP() + 1); } // // MsBop5 - used to dispatch to Vdm Redir (Vr) support functions // void MsBop5() { #ifdef NTVDM_NET_SUPPORT VrDispatch((ULONG)(*Sim32GetVDMPointer( ((ULONG)getCS() << 16) + (getIP()), 1, FALSE))); setIP(getIP() + 1); #endif } // // MsBop6 - used to dispatch to debugger support functions // void MsBop6() { /* ** All of the parameters for the debugger support ** should be on the VDMs stack. */ DBGDispatch(); } void MsBop7(){} void MsBop8(){} void MsBop9(){} void MsBopA(){} void MsBopB(){ switch (getAH()) { case 0 : setAH(0); while (!tkbhit()); setAL((BYTE)tgetch()); break; case 1 : tputch(getAL()); break; } } void MsBopC(){ BiosKbd(); } void MsBopD(){ BiosVid(); } void MsBopE(){} void MsBopF(){ UCHAR *Instruction; USHORT i; // Unimplemented interrupt bop Instruction = RMSEGOFFTOLIN(getSS(), getSP()); Instruction = RMSEGOFFTOLIN(*((PWORD)Instruction + 1), *(PWORD)(Instruction)); i = (USHORT)(*(Instruction - 1)); VDprint( VDP_LEVEL_WARNING, ("SoftPC Bop Support: Unimplemented Interrupt %x\n", i) ); } void emm_init(){} void emm_io(){} void return_from_call(){} void rtc_int(){} void re_direct(){} void D11_int(){} void int_287(){} void worm_init(){} void worm_io(){} void ps_private_1(){} void ps_private_2(){} void ps_private_3(){} void ps_private_4(){} void ps_private_5(){} void ps_private_6(){} void ps_private_7(){} void ps_private_8(){} void ps_private_9(){} void ps_private_10(){} void ps_private_11(){} void ps_private_12(){} void ps_private_13(){} void ps_private_14(){} void ps_private_15(){} void bootstrap1(){} void bootstrap2(){} void bootstrap3(){} void ms_windows(){} void msw_mouse(){} void mouse_install1(){} void mouse_install2(){} void mouse_int1(){} void mouse_int2(){} void mouse_io_language(){} void mouse_io_interrupt(){} void mouse_video_io(){} void control_bop(){} void diskette_io(){} void illegal_op_int(){} VOID (*BIOS[])(VOID) = { reset, dummy_int, unexpected_int, illegal_bop, illegal_bop, print_screen, illegal_op_int, illegal_bop, time_int, keyboard_int, illegal_bop, illegal_bop, illegal_bop, illegal_bop, diskette_int, illegal_bop, video_io, equipment, memory_size, disk_io, rs232_io, cassette_io, keyboard_io, printer_io, rom_basic, bootstrap, time_of_day, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, critical_region, cmd_install, cmd_load, illegal_bop, illegal_bop, redirector, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, diskette_io, illegal_bop, ega_video_io, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, MsBop0, MsBop1, MsBop2, MsBop3, MsBop4, MsBop5, MsBop6, MsBop7, MsBop8, MsBop9, MsBopA, MsBopB, MsBopC, MsBopD, MsBopE, MsBopF, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, emm_init, emm_io, return_from_call, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, rtc_int, re_direct, D11_int, D11_int, D11_int, int_287, D11_int, D11_int, worm_init, worm_io, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, ps_private_1, ps_private_2, ps_private_3, ps_private_4, ps_private_5, ps_private_6, ps_private_7, ps_private_8, ps_private_9, ps_private_10, ps_private_11, ps_private_12, ps_private_13, ps_private_14, ps_private_15, illegal_bop, bootstrap1, bootstrap2, bootstrap3, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, ms_windows, msw_mouse, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, mouse_install1, mouse_install2, mouse_int1, mouse_int2, mouse_io_language, mouse_io_interrupt, mouse_video_io, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, illegal_bop, switch_to_real_mode, host_unsimulate, control_bop };