Can you not use the int86() function?
From the Watcom help file:
int int86( int inter_no,
const union REGS *in_regs,
union REGS *out_regs );
The int86 function causes the computer's central processor (CPU) to be interrupted with an interrupt whose number is given by inter_no. Before the interrupt, the CPU registers are loaded from the structure located by in_regs. Following the interrupt, the structure located by out_regs is filled with the contents of the CPU registers. These structures may be located at the same location in memory.
You should consult the technical documentation for the computer that you are using to determine the expected register contents before and after the interrupt in question.
The int86 function returns the value of the CPU AX register after the interrupt.
bdos, int386, int386x, int86x, intdos, intdosx, intr, segread
* This example clears the screen on DOS
union REGS regs;
regs.w.cx = 0;
regs.w.dx = 0x1850;
regs.h.bh = 7;
regs.w.ax = 0x0600;
#if defined(__386__) && defined(__DOS__)
int386( 0x10, ®s, ®s );
int86( 0x10, ®s, ®s );
DOS/16, Windows, Win386, QNX/16, DOS/PM