From: "Bertel k. Brander" Newsgroups: comp.os.msdos.djgpp Subject: movedata Date: Sat, 02 Aug 1997 02:12:04 +0200 Lines: 56 Message-ID: <33E27B54.5591@post4.tele.dk> NNTP-Posting-Host: ppp95.abc.tele.dk Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk Hi. I am writing a program in C which has to scroll the text mode screen real fast. So, I found the movedata function and used it as: movedata(_dos_ds, 0xb8000 + Cols*2, _dos_ds, 0xb8000, Cols * (Rows - 1) * 2); To scroll the screen up. Where Cols is 80 and Rows is the number of lines to scroll, and 0xB8000 is the start address of the text mode screen. And everything works fine. But then I tried movedata(_dos_ds, 0xb8000, _dos_ds, 0xb8000 + Cols*2, Cols * (Rows - 1) * 2); To scroll the screen down, and strange things happends. Then I got the source code for movedata and found that it works a bit like: for(a = 0; a < length; a++) *dest++ = *src++; Which means that it will only work if dest and src does not overlap or if dest < src. My question is now: Is it possible to make a movedata function which will work even if src < dest? If so, has someone done it, if so I would like to have a copy. I donīt know enough about asm programming to do it myself. I guess that I could use memmove, but then i have two problems: 1. How ot make the _dos_ds:0xB8000 into a pointer? 2. It is not as fast as movedata. Is there any other fast ways to scroll the screen? I have tryed the int 0x10 function 6/7, it works, but are not fast enough. Thanks in advance. bertel AT post4 DOT tele DOT dk