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.