[net.micro.pc] CI-86 C compiler calling DOS

crane@fortune.UUCP (12/06/83)

It's been awhile since I've worked on the PC, but I remember that the IBM
technical reference manual has some assembly language listing in the back
that do all kinds of I/O-type stuff provided you load the registers right
and send the routine the right interrupt code. Anyway, I wrote a program
to test these capabilities and decided to keep the listing, part of
which I'm going to include here. I'm just going to show one routine --
cursor positioning-- but you should get the idea of how the rest might work.
See the tech ref manual for details on how to call the other functions.

/* define register structures as full registers and half registers */

struct regval{int ax,bx,cx,dx,si,di,ds,es;};
struct regvalb{char al,ah,bl,bh,cl,ch,dl,dh,sl,sh,dl,dh,dsl,dsh,esl,esh;};

main()
{
...
}

/*
**	routine to position the cursor at row/column (0,0) = home
*/

poscur(page,row,col)
int page,row,col;
	{
	struct regval srv,rrv;		/* sending/receiving reg values */

	srv.ah = 2;			/* position cursor */
	srv.bh = page;			/* page number */
	srv.dh = --row;			/* row rumber */
	srv.dl = --col;			/* column number */

	sysint(0x10,&srv,&rrv);		/* call interrupt 0x10 */
	}

It is not necessary to use receiving registers. You could use the
sending ones.  This should give a person enough to go on. If not, ask
again, I'll give some more examples.

John Crane
Fortune Systems
Redwood City, CA