Example #1
0
void
xf86ExecX86int10(xf86Int10InfoPtr pInt)
{
    int sig = setup_int(pInt);

    if (int_handler(pInt))
	while(do_vm86(pInt)) {};

    finish_int(pInt, sig);
}
Example #2
0
void bioscall(unsigned char int_no, struct vm86_regs *regs, unsigned char *mem)
{
	unsigned char call[] = {0xcd, int_no, 0xcd, 0x09};
	struct vm86_struct vm;
	memset(&vm, 0, sizeof(vm));
	memcpy(&vm.regs, regs, sizeof(vm.regs));
	vm.regs.cs  = BIOSCALL_START_SEG;
	vm.regs.eip = BIOSCALL_START_OFS;
	vm.regs.ss  = BIOSCALL_START_SEG;
	vm.regs.esp = 0xfff0 - BIOSCALL_START_OFS;
	vm.regs.eflags = VM_MASK | IOPL_MASK;
	memcpy(&mem[BIOSCALL_START_SEG * 16 + BIOSCALL_START_OFS], call,
	       sizeof(call));
	do_vm86(&vm, mem, BIOSCALL_START_OFS + sizeof(call));
	memcpy(regs, &vm.regs, sizeof(vm.regs));
}