no message

This commit is contained in:
BADIM-PC\Vadim 2017-12-01 10:40:53 +03:00
parent 01669fcd89
commit 096cd980df
1 changed files with 8 additions and 42 deletions

View File

@ -1664,7 +1664,6 @@ static inline void memset4(void *dst, u32 val, u32 dwords)
static void api_blit(tic_mem* tic, tic_scanline scanline, tic_overlap overlap)
{
u32* out = tic->screen;
const u32* pal = tic_palette_blit(&tic->ram.vram.palette);
if(scanline)
@ -1676,6 +1675,8 @@ static void api_blit(tic_mem* tic, tic_scanline scanline, tic_overlap overlap)
enum {Top = (TIC80_FULLHEIGHT-TIC80_HEIGHT)/2, Bottom = Top};
enum {Left = (TIC80_FULLWIDTH-TIC80_WIDTH)/2, Right = Left};
u32* out = tic->screen;
memset4(&out[0 * TIC80_FULLWIDTH], pal[tic->ram.vram.vars.border], TIC80_FULLWIDTH*Top);
u32* rowPtr = out + Top*TIC80_FULLWIDTH;
@ -1683,52 +1684,17 @@ static void api_blit(tic_mem* tic, tic_scanline scanline, tic_overlap overlap)
for(s32 r = 0, y = tic->ram.vram.vars.offset.y; r < TIC80_HEIGHT; r++, y++, rowPtr += TIC80_FULLWIDTH)
{
memset4(rowPtr, pal[tic->ram.vram.vars.border], Left);
memset4(rowPtr + Left, pal[tic->ram.vram.vars.bg], TIC80_WIDTH);
u32* colPtr = rowPtr + Left;
if(y >= 0 && y < TIC80_HEIGHT)
{
u32* colPtr = rowPtr + Left;
s32 offset = tic->ram.vram.vars.offset.x;
s32 count = TIC80_WIDTH;
s32 index = y * TIC80_WIDTH;
if (offset > 0)
for(s32 c = 0, x = (tic->ram.vram.vars.offset.x + TIC80_WIDTH) % TIC80_WIDTH, pos = y * TIC80_WIDTH; c < TIC80_WIDTH; c++, colPtr++, x++)
{
memset4(rowPtr + Left, pal[tic->ram.vram.vars.bg], offset);
count -= offset;
colPtr += offset;
}
else
{
count += offset;
index -= offset;
if(x >= TIC80_WIDTH) x %= TIC80_WIDTH;
*colPtr = pal[tic_tool_peek4(tic->ram.vram.screen.data, pos + x)];
}
// copy the first pixel if the line is not alligned to bytes.
if (index & 1 && count > 0)
{
*colPtr++ = pal[tic_tool_peek4(tic->ram.vram.screen.data, index)];
index++;
count--;
}
for(s32 c = 0, di = index >> 1; c < count >> 1; c++)
{
// copy two pixels in one cycle
u8 val = tic->ram.vram.screen.data[di++];
*colPtr++ = pal[val & 0xf];
*colPtr++ = pal[val >> 4];
}
// copy the remaining pixel
if (count & 1) *colPtr = pal[tic_tool_peek4(tic->ram.vram.screen.data, index + count/2*2)];
if (offset < 0) memset4(rowPtr + Left + TIC80_WIDTH + offset, pal[tic->ram.vram.vars.bg], -offset);
}
else
{
memset4(rowPtr + Left, pal[tic->ram.vram.vars.bg], TIC80_WIDTH);
}
memset4(rowPtr + (TIC80_FULLWIDTH-Right), pal[tic->ram.vram.vars.border], Right);
if(scanline && (r < TIC80_HEIGHT-1))