Category : Miscellaneous Language Source Code
Archive   : HERCULES.ZIP
Filename : HERCPIXL.C

 
Output of file : HERCPIXL.C contained in archive : HERCULES.ZIP
/*
* HERCPIXL.C
* Dave Tutelman - last modified 8/86
*
* This is a set of basic graphic routines for the Hercules
* Board (or at least the SuperComputer version of it; I assume
* that they work with the real thing).
* alfa () puts us in alphanumeric mode.
* grafix (page) puts us in graphics mode in page 0 or 1
* pixel (x,y,val) puts a pixel at . Bright dot if
* val=1, dark dot if val=0.
* dchar (x,y,c) puts character "c" at . Note that
* character raster is 90 x 29.
* swpage (page) switches to a different page.
* waitkey () just waits till a key is pressed.
*
* Actually, the routines should work with any board, since the
* BIOS calls are used throughout. It's Hercules-specific only
* because I've defined the graphics and alpha modes for my
* Hercules BIOS.
*
* Compile with deSmet C.
*/

#define VIDI 0x10 /* video interrupt, normally 10H */
#define KBD 0x16 /* keyboard interrupt */
#define ALFA_MODE 7 /* monochrome alpha mode */
#define GRAF_MODE 8 /* Hercules graphics mode */

int page = 0;
extern unsigned _rax,_rbx,_rcx,_rdx;

/*
* This puts us back in alphanumeric mode
*/

alfa (dummy)
unsigned int dummy;
{
_rax = ALFA_MODE; /* mono 80-col mode */
_doint ( VIDI ); /* set mode */
}

/*
* This one switches us to hercules graphics mode
* in page 0 or 1
*/

grafix (newpage)
int newpage;
{

_rax = GRAF_MODE; /* herc grafix mode */
_doint ( VIDI ); /* set mode */

/* now set the page */
swpage (newpage);
}

/*
* This writes a pixel at (x,y), where (0,0) is the upper-left
* corner of the screen. If val = 0 then the pixel is erased.
*/

pixel (x, y, val)
int x, y, val;
{

_rax = 0x0C00 + val; /* function 12 */
_rcx = x;
_rdx = y;
_doint ( VIDI ); /* set mode */

}


/*
* dchar (x,y,c) puts character "c" at . Note that
* character raster is 90 x 25.
*/

dchar (x,y,c)
int x,y;
char c;
{

_rax = 2*256; /* AH=Fn#2 */
_rdx = 256*y + x; /* DH=row, DX=col */
_rbx = page * 256; /* BH=page */
_doint (VIDI); /* set cursor */

_rax = 10*256 + (int) c; /* AH=Fn#10, AL=char */
_rbx = page * 256; /* BH=page */
_rcx = 1; /* CX=count */
_doint (VIDI); /* write character */
}


/*
* This one switches us to a different page, without changing
* the contents of that page.
*/

swpage (newpage)
int newpage;
{
page = newpage;
_rax = 0x500 + page; /* new page function */
_doint ( VIDI ); /* interrupt call */
}


waitkey ()
{
_rax = 0; /* keyboard blocking read function */
_doint (KBD);
}


  3 Responses to “Category : Miscellaneous Language Source Code
Archive   : HERCULES.ZIP
Filename : HERCPIXL.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/