[comp.sys.ibm.pc] Help: Display pages on PC

ron@druhi.ATT.COM (TannerR) (06/25/87)

I am trying to write on an invisible page and then flip to that page
to give the illusion of instant screen change.  The problem is that
I cannot get my system to write to another page without displaying
it.  I do the following:

  I am using the MSC 3.0 int86 function.
  To get the cpu and crt display pages I do
       
          inregs.h.ah = 5;
          inregs.h.al = 128;
          int86(0x10,&inregs,&outregs);
          cpu = inregs.h.bl;
          crt = inregs.h.bh;
          
  But I don't get pages, I get bigger numbers.  Then to change the
  cpu page I do:
  
          inregs.h.ah = 5;
          inregs.h.al = 129;
          inregs.h.bl = 1;
          int86(0x10,&inregs,&outregs);

  Then I do some things on this page, but the page is being
  displayed on the screen.  I know it is on a different page because
  changing the active page between 0 and 1 will show different
  screens.  The problem is that I see the writing to page 1 when I
  want it to be invisible.
  

Help?!


Thanks in advance,
  Ron Tanner
  

markg@amdcad.AMD.COM (Mark Gorlinsky) (06/26/87)

In article <1991@druhi.ATT.COM> ron@druhi.ATT.COM (TannerR) writes:
.
.I am trying to write on an invisible page and then flip to that page
.to give the illusion of instant screen change.  The problem is that
.I cannot get my system to write to another page without displaying
.it.  I do the following:
.
.  I am using the MSC 3.0 int86 function.
.  To get the cpu and crt display pages I do
.       
.          inregs.h.ah = 5;
.          inregs.h.al = 128;
                         ^^^ This is not a valid page number!
			     Valid pages for modes 0&1 are 0-7,
			     for modes 2&3 are 0-3;

.          int86(0x10,&inregs,&outregs);
.          cpu = inregs.h.bl;
.          crt = inregs.h.bh;
.          
.  But I don't get pages, I get bigger numbers.  Then to change the
.  cpu page I do:

The reason for the WRONG values is that int 0x10 does not return any values!
Even if it did, you wouldn't use inregs to get them when they were put in 
outregs.  

.          inregs.h.ah = 5;
.          inregs.h.al = 129;
                         ^^^ see above!
.          inregs.h.bl = 1;
           ^^^^^^^^^^^^^^^ function 5 doesn't use BL, just AX.
.          int86(0x10,&inregs,&outregs);
.
.  Then I do some things on this page, but the page is being
.  displayed on the screen.  I know it is on a different page because
.  changing the active page between 0 and 1 will show different
.  screens.  The problem is that I see the writing to page 1 when I
.  want it to be invisible.
.  
.
>Help?!

Notes:
	Using int 0x10 function AH=0x0F, you can find the current active page.  
	Function 0x0F returns the following info.

		AL = mode currently set.
		AH = number of characters columns on screen.
		BH = current active display page.

	To write to a display page you can use two methods. The first is to
	write directly to the display memory(On some video boards this causes
	a condition called SNOW, little flakes displayed on the screen as you
	write to it).
	
	The second is to use int 0x10's function 9, or 10 with the help of
	function 2, which sets the cursor position.

	Function 9:
	  Enter with:
		AH = 9;
		AL = char to write;
		BH = display page to write to;
		BL = attribute to give char;
		CX = number of chars to write;
		This function does linewrap if you go over the edge.

	Function 10;
	  Enter with:
		Same as 9, but leave out BL it will use the attribute that
		is already there.

	Function 2:
	  Enter with:
		AH = 2;
		DH = row (base 0);
		DL = column (base 0);
		BH = display page;

		When setting the cursor position (0,0) is the upper left corner.

Hope this helps!!

	

-- 
 Mark Gorlinsky - AMD Processor Products Division/APPS SQA
 UUCP: {ucbvax,decwrl,allegra}!amdcad!markg or amdcad!markg@decwrl.dec.com
 AT&T: (408) 982-7811
 DISCLAIMER: What's mine is mine, not my employers.