Mail Archives: djgpp/1996/08/16/04:00:45
Xref: | news2.mv.net comp.os.msdos.djgpp:7348
|
From: | "Vince C." <cheong AT loop DOT com>
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | Re: Screen Fill routine, mode 13h
|
Date: | 16 Aug 1996 03:48:49 GMT
|
Organization: | Morbid Reality
|
Lines: | 43
|
Distribution: | inet
|
Message-ID: | <01bb8b25$ca747060$b3748ace@486dx266>
|
References: | <32136FAB DOT 39 AT sprynet DOT com>
|
NNTP-Posting-Host: | pma1_179.loop.com
|
Mime-Version: | 1.0
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
John Luebs <jkluebs AT sprynet DOT com> wrote in article
<32136FAB DOT 39 AT sprynet DOT com>...
> Here is a fast way to write a screen in mode 13h
> The amount of screen to fill can be adjusted by altering ECX
> long* data;
>
> data = (long*)image->buffer;
> __asm__ __volatile__ ("pushw %%es\n //save ES for proper restoring
> movl $0xa0000h, %%edi\n //set the dos protected
offset
> movw %0, %%es\n //move the selector
> movl %1, %%esi\n //set the source offset, DS is
already
> set
> movl $16000, %%ecx\n //loop 16000 times for 16000
long
> transfers
> cld\n //set direction to forward
> rep\n //repeat
> movsl\n //transfers from DS:ESI to ES:EDI 16000
times
> popw %%es\n" //restore ES
> :
> : "g" (_dos_ds), "g" (data)
> : "cx", "di", "si" //clobbered registers
> );
>
uh... you sure ? seem to me the near pointer counterpart's faster;
far pointers/segment overrides are sloooooooooooow.
floating point opcode "fistp" would definitely help on a pentium.
i would also recommend splitting the "rep movsl" into smaller chunks.
doing so would minimize the missed interrupts during the operation.
i suggest you get some materials on optimization for 32-bit 80x86's
if you want to write faster code.
btw, the operation is call copy/bitblt not fill. filling would be
setting a memory block to a value or pattern.
--
Vince C.
- Raw text -