205 lines
4.3 KiB
C++
205 lines
4.3 KiB
C++
|
|
||
|
/* IBM PC BIOS Functions */
|
||
|
/* Copyright (c) Mix Software 1988 */
|
||
|
|
||
|
cursblk()
|
||
|
{
|
||
|
_setcurs(0, _graphic() ? 7 : 13);
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------ */
|
||
|
|
||
|
curslin()
|
||
|
{
|
||
|
int start;
|
||
|
_setcurs((start = _graphic() ? 7 : 13), start);
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------ */
|
||
|
|
||
|
_graphic() /* returns 1 if graphics display, 0 if monochrome */
|
||
|
{
|
||
|
union REGS reg;
|
||
|
int display;
|
||
|
bios(0x11, ®); /* get display type (bits 4 and 5 of ax) */
|
||
|
if ((reg.x.ax & 0x30) < 0x30) return 1; /* graphics */
|
||
|
else return 0; /* monochrome */
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------ */
|
||
|
|
||
|
curson() /* set bit 5 of start scan line to 0 : IBM PC */
|
||
|
{ /* set bit 6 of start scan line to 0 : Tandy 2000
|
||
|
use & 0x00BF */
|
||
|
unsigned cursor, _getcurs();
|
||
|
cursor = _getcurs();
|
||
|
_setcurs((cursor >> 8) & 0x00DF, cursor & 0x00FF);
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------ */
|
||
|
|
||
|
cursoff() /* set bit 5 of start scan line to 1 : IBM PC */
|
||
|
{ /* set bit 6 of start scan line to 1 : Tandy 2000
|
||
|
use | 0x0040 */
|
||
|
unsigned cursor, _getcurs();
|
||
|
cursor = _getcurs();
|
||
|
_setcurs((cursor >> 8) | 0x0020, cursor & 0x00FF);
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------ */
|
||
|
|
||
|
unsigned _getcurs()
|
||
|
{
|
||
|
extern int _vapage;
|
||
|
union REGS reg;
|
||
|
reg.h.ah = 3;
|
||
|
reg.h.bh = _vapage;
|
||
|
bios(0x10, ®);
|
||
|
return reg.x.cx;
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------ */
|
||
|
|
||
|
_setcurs(start, stop)
|
||
|
int start, stop;
|
||
|
{
|
||
|
union REGS reg;
|
||
|
reg.h.ah = 1;
|
||
|
reg.h.ch = start;
|
||
|
reg.h.cl = stop;
|
||
|
bios(0x10, ®);
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------ */
|
||
|
|
||
|
clrscrn()
|
||
|
{
|
||
|
extern int _vattr;
|
||
|
clrscrn2(_vattr);
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------ */
|
||
|
|
||
|
setcolor(background, palette)
|
||
|
int background, palette;
|
||
|
{
|
||
|
union REGS reg;
|
||
|
reg.h.ah = 11;
|
||
|
reg.h.bh = 0;
|
||
|
reg.h.bl = background;
|
||
|
bios(0x10, ®);
|
||
|
reg.h.bh = 1;
|
||
|
reg.h.bl = palette;
|
||
|
bios(0x10, ®);
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------ */
|
||
|
|
||
|
int readch()
|
||
|
{ /* read character at current cursor position */
|
||
|
extern int _vapage;
|
||
|
union REGS reg;
|
||
|
reg.h.ah = 8;
|
||
|
reg.h.bh = _vapage;
|
||
|
bios(0x10, ®);
|
||
|
return reg.h.al;
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------ */
|
||
|
|
||
|
int readattr()
|
||
|
{ /* read attribute of character at current cursor position */
|
||
|
extern int _vapage;
|
||
|
union REGS reg;
|
||
|
reg.h.ah = 8;
|
||
|
reg.h.bh = _vapage;
|
||
|
bios(0x10, ®);
|
||
|
return reg.h.ah;
|
||
|
}
|
||
|
|
||
|
/* ------------------------------------------------------------ */
|
||
|
|
||
|
#ifndef V_ASM
|
||
|
|
||
|
clrscrn2(attribute)
|
||
|
unsigned int attribute;
|
||
|
{
|
||
|
union REGS reg;
|
||
|
extern int _vattr;
|
||
|
_vattr = attribute;
|
||
|
reg.h.ah = 6;
|
||
|
reg.h.al = reg.h.ch = reg.h.cl = 0;
|
||
|
reg.h.dh = 24; reg.h.dl = 79;
|
||
|
reg.h.bh = attribute;
|
||
|
bios(0x10, ®);
|
||
|
poscurs(0,0);
|
||
|
}
|
||
|
|
||
|
curscol()
|
||
|
{
|
||
|
extern int _vapage;
|
||
|
union REGS reg;
|
||
|
reg.h.ah = 3;
|
||
|
reg.h.bh = _vapage;
|
||
|
bios(0x10, ®);
|
||
|
return reg.h.dl;
|
||
|
}
|
||
|
|
||
|
cursrow()
|
||
|
{
|
||
|
extern int _vapage;
|
||
|
union REGS reg;
|
||
|
reg.h.ah = 3;
|
||
|
reg.h.bh = _vapage;
|
||
|
bios(0x10, ®);
|
||
|
return reg.h.dh;
|
||
|
}
|
||
|
|
||
|
poscurs(row, col)
|
||
|
int row,col;
|
||
|
{
|
||
|
union REGS reg;
|
||
|
extern int _vapage;
|
||
|
reg.h.ah = 2;
|
||
|
reg.h.bh = _vapage;
|
||
|
reg.h.dh = row;
|
||
|
reg.h.dl = col;
|
||
|
bios(0x10, ®);
|
||
|
}
|
||
|
|
||
|
writechs(ch, attr, n)
|
||
|
int ch; /* character to write */
|
||
|
int attr; /* attribute */
|
||
|
int n; /* number of copies*/
|
||
|
{
|
||
|
union REGS reg;
|
||
|
extern int _vapage;
|
||
|
reg.h.ah = 9;
|
||
|
reg.h.bh = _vapage;
|
||
|
reg.h.bl = attr;
|
||
|
reg.x.cx = n;
|
||
|
bios(0x10, ®);
|
||
|
}
|
||
|
|
||
|
getvmode()
|
||
|
{
|
||
|
union REGS reg;
|
||
|
reg.h.ah = 15;
|
||
|
bios(0x10, ®);
|
||
|
return reg.h.al;
|
||
|
}
|
||
|
|
||
|
setvmode(mode)
|
||
|
int mode;
|
||
|
{
|
||
|
union REGS reg;
|
||
|
reg.h.ah = 0;
|
||
|
reg.h.al = mode;
|
||
|
bios(0x10, ®);
|
||
|
}
|
||
|
|
||
|
int _vapage = 0; /* current crt page number */
|
||
|
int _vattr = 7; /* default attribute for scroll functions */
|
||
|
#endif
|
||
|
|