/* Watcom32 support functions */
#include "libgrx.h"
#include "int86.h"
#include "memfill.h"

void wc32_int10x(Int86Regs *iregp, int nSeg) {
   static struct rminfo {
	   long EDI;
	   long ESI;
	   long EBP;
	   long reserved_by_system;
	   long EBX;
	   long EDX;
	   long ECX;
	   long EAX;
	   short flags;
	   short ES,DS,FS,GS,IP,CS,SP,SS;
   } RMI;
   _fmemset ( &RMI,0,sizeof(RMI) );
   RMI.EDI = IREG_DI(*iregp);
   RMI.ESI = IREG_SI(*iregp);
   RMI.EBX = IREG_BX(*iregp);
   RMI.EDX = IREG_DX(*iregp);
   RMI.ECX = IREG_CX(*iregp);
   RMI.EAX = IREG_AX(*iregp);
   /* RMI.ES = IREG_ES(iregp); */
   RMI.ES = nSeg;
   RMI.DS = IREG_DS(*iregp);
   sttzero(iregp);
   IREG_AX(*iregp) = 0x300;
   IREG_BL(*iregp) = 0x10;
   IREG_BH(*iregp) = 0;
   IREG_CX(*iregp) = 0;
   IREG_ES(*iregp) = FP_SEG(&RMI);
   IREG_EDI(*iregp) = FP_OFF(&RMI);
   int386x( 0x31, &(iregp->Normal), &(iregp->Normal), &(iregp->Extended) );
   sttzero(iregp);
   IREG_DI(*iregp) = RMI.EDI;
   IREG_SI(*iregp) = RMI.ESI;
   IREG_BX(*iregp) = RMI.EBX;
   IREG_DX(*iregp) = RMI.EDX;
   IREG_CX(*iregp) = RMI.ECX;
   IREG_AX(*iregp) = RMI.EAX;
   IREG_ES(*iregp) = RMI.ES;
   IREG_DS(*iregp) = RMI.DS;
}
