return;
}
- //BX_DEBUG_INT74("int74_function: make_farcall=1\n");
u16 status = GET_EBDA2(ebda_seg, mouse_data[0]);
u16 X = GET_EBDA2(ebda_seg, mouse_data[1]);
u16 Y = GET_EBDA2(ebda_seg, mouse_data[2]);
SET_EBDA2(ebda_seg, mouse_flag1, 0);
struct segoff_s func = GET_EBDA2(ebda_seg, far_call_pointer);
+ dprintf(16, "mouse farcall s=%04x x=%04x y=%04x func=%04x:%04x\n"
+ , status, X, Y, func.seg, func.offset);
asm volatile(
+ "pushl %%ebp\n"
"sti\n"
"pushl %0\n"
"cli\n"
"cld\n"
+ "popl %%ebp"
+ : "+a"(func.segoff), "+c"(status), "+d"(X), "+b"(Y)
:
- : "r"(func.segoff), "r"(status), "r"(X), "r"(Y)
- : "cc"
- );
+ : "edi", "esi", "cc", "memory");
}
#define call16_simpint(nr, peax, pflags) do { \
ASSERT16(); \
asm volatile( \
+ "pushl %%ebp\n" \
+ "sti\n" \
"stc\n" \
"int %2\n" \
"pushfl\n" \
"popl %1\n" \
"cli\n" \
- "cld" \
- : "+a"(*peax), "=r"(*pflags) \
+ "cld\n" \
+ "popl %%ebp" \
+ : "+a"(*peax), "=c"(*pflags) \
: "i"(nr) \
- : "cc", "memory"); \
+ : "ebx", "edx", "esi", "edi", "cc", "memory"); \
} while (0)
// GDT bit manipulation