I'm curious. I help develop fbcon and I see your doing something with
video memory. I'm interrested in what you are doing.

"We've all heard that a million monkeys banging on a million typewriters
 will eventually reproduce the entire works of Shakespeare. Now,
 thanks to the Internet, we know this is not true. It made something
 better, linux :)"

On Tue, 9 Nov 1999, Christophe Kumsta wrote:

> Adam Meyerowitz wrote:
> > ;function: blitcrawl
> > ;
> > ;parameters
> > ;
> > ;[ebp+8]                :pointer to destination
> > ;[ebp+12]               :pointer to pixels
> > ;[ebp+16]               :value to increment pixels after
> > ;                               each interration
> > 
> > global func:blitcrawl
> > blitcrawl:
> >                 align 4
> >               push ebp
> >                 mov ebp,esp
> > 
> >                 pushad
> > 
> >                 mov edi,[ebp+8]
> >               mov eax,0xffffffff
> >               mov ecx,640
> >               rep stosd
> > 
> >                 popad
> > 
> >                 mov esp,ebp
> >                 pop ebp
> >                ret
> > 
> 
> OK, I received your message to disregard this part of code. But just
> little points to these codes :
> 
> - the pointer 'Destination' and 'Pixel' is not correct because pushad
> has added 28 bytes on the stack.(28+4+4=36) then the 'Destination' is
> now located at [ebp+36].
> 
> - And if this function is used as interrupt-handler, the stack is not
> the same .
> 
> - the  context is important du to the usage of 'rep stosd' which does :
> ([es:edi]<-eax,edi<-'edi+4') and loop until ecx=0. I don't know how 'es'
> is initialised ... if 'es' contains a !=null value, then eax is written
> to ((es<<1)+edi) location :((((
> 
> In my progs, I use inlined asm :
> ---------------------------------------------------
> inline void _memset(const void *tab,int i,int count)
> {
>   __asm__ __volatile__(
>   "        cld                 \n"
>   "        repe                \n"
>   "         stosl              \n"
>   : /* no return datas */
>   :"a" (i),"D" (tab),"c" (count)) ; /* load eax<-i , (es:edi<-tab) ,
> ecx<-count */
> }
> ---------------------------------------------------
> in this exemple the symbole "D" means 'edi' but take care of 'es'
> segment ! ( idem for "S" with 'esi' )
> ( 'stosl' is 'stosd' but prefix 'long' is used in AT&T syntax while
> 'double' is used in Intel syntax)
> 
> - when using rep with 'strings operation' it's recommended to add 'cld'
> or 'std' to be sure of the direction ( some progs may change this flag
> !! )
> 
> think this will usefull ...
> Good Luck.
> 
> --
> Kumsta Christophe
> <[EMAIL PROTECTED]>
> Real-Time System developper
> RT-Linux/RTAI ( Use the Source Luck !)
> --- [rtl] ---
> To unsubscribe:
> echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
> echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
> ----
> For more information on Real-Time Linux see:
> http://www.rtlinux.org/~rtlinux/
> 

--- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
----
For more information on Real-Time Linux see:
http://www.rtlinux.org/~rtlinux/

Reply via email to