Message-ID: <8hYRtBARuejxEwB6@johnhamp.demon.co.uk> Date: Mon, 6 May 1996 13:07:45 +0100 To: djgpp AT delorie DOT com From: David Hampson Subject: Nearptrs not quicker? MIME-Version: 1.0 (Please be nice - I'm new/inexperienced/stupid at DJGPP version 2 and the Internet in general...) I'm a little bit confused about DJGPP2's nearptrs and the Fat DS method. My problem is using __djgpp_conventional_base doesn't seem to be any faster than dosmemput. I've timed two versions of a routine which 'blasts' a screen buffer into the 0xa0000 area, one using the Fat DS and one using dosmemput, and they both seem to be just as fast. Am I doing something hideously wrong? (Is my CopyLongs routine okay?) Here are some fragments of my C code: #include "daves.h" #include #include #include /* For dosmemput() */ #include /* For Fat DS */ int BlastScreen(char *ScrArea,int Page); int FatDSBlastScreen(char *ScrArea,int Page); ... /* Draw the screen on DrawPage here */ if (!__djgpp_nearptr_enable()) { FatDSBlastScreen(MyScr,DrawPage); __djgpp_nearptr_disable(); } else { BlastScreen(MyScr,DrawPage); FatDSFail=1; } ... int FatDSBlastScreen(char *ScrArea,int Page) { char *ScreenBase; /* Uses Fat DS method */ ScreenBase=(char *)(__djgpp_conventional_base+0xa0000+0x4000*Page); BitMask(1); CopyLongs(ScrArea+0x0000,ScreenBase,0x1000); BitMask(2); CopyLongs(ScrArea+0x4000,ScreenBase,0x1000); BitMask(4); CopyLongs(ScrArea+0x8000,ScreenBase,0x1000); BitMask(8); CopyLongs(ScrArea+0xc000,ScreenBase,0x1000); BitMask(15); return 0; } int BlastScreen(char *ScrArea,int Page) { unsigned long ScreenBase; /* Uses conventional method */ ScreenBase=0xa0000+0x4000*Page; BitMask(1); dosmemput(ScrArea+0x0000,0x4000,ScreenBase); BitMask(2); dosmemput(ScrArea+0x4000,0x4000,ScreenBase); BitMask(4); dosmemput(ScrArea+0x8000,0x4000,ScreenBase); BitMask(8); dosmemput(ScrArea+0xc000,0x4000,ScreenBase); BitMask(15); return 0; } Here's the CopyLongs routine and the BitMask routine in my assembler module: .globl _CopyLongs _CopyLongs: pushl %ebp movl %esp,%ebp pushl %edi pushl %esi movl 8(%ebp),%esi movl 12(%ebp),%edi movl 16(%ebp),%ecx rep movsl popl %esi popl %edi movl %ebp,%esp popl %ebp ret .globl _BitMask _BitMask: /* Replaces: outportb(0x3c4,0x02); outportb(0x3c5,1<