I'm working on the port of a CPC emu for few week.
I need optimize my code to speed it up.
One of the speed bottleneck is the screen render code.
Here is my function that render a line of the cpc direct on the DC screen (x 2 because the cpc resolution is 640*240) :
Code: Select all
void TraceLigne16B640_direct( int y )
{
int x, adr = y * 80;
// render a line direct on DC screen
USHORT * p = (USHORT *)vram_s ;
p += (USHORT) (y*2) * (USHORT)640;
for ( x = 0; x < 80; x++, adr++ )
{
int adCrtc = TabAdrCrtc[ adr ];
if ( adCrtc > -1 )
{
char * ad = TabPoints[ lastMode ][ MemCPC[ adCrtc + OfsEcr ] ];
* (p+640) = ( USHORT )TabCoul[ * ad ] ;
* p++ = ( USHORT )TabCoul[ * ad++ ];
* (p+640) = ( USHORT )TabCoul[ * ad ];
* p++ = ( USHORT )TabCoul[ * ad++ ];
* (p+640) = ( USHORT )TabCoul[ * ad ];
* p++ = ( USHORT )TabCoul[ * ad++ ];
* (p+640) = ( USHORT )TabCoul[ * ad ];
* p++ = ( USHORT )TabCoul[ * ad++ ];
* (p+640) = ( USHORT )TabCoul[ * ad ];
* p++ = ( USHORT )TabCoul[ * ad++ ];
* (p+640) = ( USHORT )TabCoul[ * ad ];
* p++ = ( USHORT )TabCoul[ * ad++ ];
* (p+640) = ( USHORT )TabCoul[ * ad ];
* p++ = ( USHORT )TabCoul[ * ad++ ];
* (p+640) = ( USHORT )TabCoul[ * ad ];
* p++ = ( USHORT )TabCoul[ * ad ];
}
else
{
int Border = TabCoul[ 16 ];
* p++ = ( USHORT )Border;
* p++ = ( USHORT )Border;
* p++ = ( USHORT )Border;
* p++ = ( USHORT )Border;
* p++ = ( USHORT )Border;
* p++ = ( USHORT )Border;
* p++ = ( USHORT )Border;
* p++ = ( USHORT )Border;
* (p+640) = ( USHORT )Border;
* (p+640) = ( USHORT )Border;
* (p+640) = ( USHORT )Border;
* (p+640) = ( USHORT )Border;
* (p+640) = ( USHORT )Border;
* (p+640) = ( USHORT )Border;
* (p+640) = ( USHORT )Border;
* (p+640) = ( USHORT )Border;
}
}
}
Thanks
NB : I use KOS 1.2