![]()
|
void MoveMemToScreenStandardMode()
{asm (" LOOPB:
movl (%%esi),%%eax
movl 4(%%esi),%%ebx
movl %%eax, (%%edi)
movl %%ebx,4(%%edi)
addl $8,%%esi
addl $8,%%edi
decl %%ecx
jnz LOOPB"
: /*No output*/
:"c" (Screen_Size>>2), "D" (video_screen), "S"(video_buffer)
:"%eax","%ebx");
} |
void MoveMemToScreenStandardMode()
{memmove(video_screen,video_buffer,64000);
} |
void Video::MoveMemTweaked()
{ for(int l=0;l<4;l++)
{outportb(0x3c4,0x02);
outportb(0x3c5,(1<<l));
asm(" PlanerLoop:
movl (%%esi),%%edx
movb %%dx,(%%edi)
addl $4,%%esi
addl $1,%%edi
Loop PlanerLoop"
:
:"c" (Screen_Size>>2), "D" (video_screen), "S"(video_buffer+l)
:"%edx");
}
}
|
void MoveMemTweaked()
{ unsigned char *vbuff=video_buffer;
unsigned int SS = Screen_Size>>2;
for(int plane=0; plane<5; plane++)
{ outp(0x3c4,0x02);
outp(0x3c5,(0x01<<(plane&3)));
for(int pixel=0,count=0; pixel<SS; pixel+=4,count++)
{video_screen[count]=vbuff[pixel];
}
vbuff++;
}
} |
void Video::MoveMemVESABanked()
{long index=0;
unsigned long Bank;
for(Bank=0;Bank<NumberOfBanks;Bank++)
{ SetBank(Bank);
asm("LOOP:
movl (%%ebx),%%edx
movl %%edx,(%%eax)
movl 4(%%ebx),%%edx
movl %%edx,4(%%eax)
movl 8(%%ebx),%%edx
movl %%edx,8(%%eax)
movl 12(%%ebx),%%edx
movl %%edx,12(%%eax)
addl $16,%%eax
addl $16,%%ebx
Loop LOOP"
:
:"a" (video_screen),"b" (video_buffer+index),"c" (4096)
:"%edx");
index+=65536;
}
if(MemAfterBanks)
{SetBank(Bank);
asm("LOOP3:
movl (%%ebx),%%edx
movl %%edx,(%%eax)
addl $4,%%eax
addl $4,%%ebx
Loop LOOP3"
:
:"c" (MemAfterBanks>>2),"a" (video_screen), "b" (video_buffer+index)
:"%edx");
}
}
|
void MoveMemVESABanked()
{ unsigned char *tempptr= video_buffer;
for(Bank=0;Bank<NumberOfBanks;Bank++)
{SetBank(Bank);
memmove(video_screen,tempptr,65536);
tempptr+=65536;
}
SetBank(Bank);
if(MemAfterBanks)
{ memmove(video_screen,tempptr,MemAfterBanks);
}
} |
void Video::Move2Video()
{while(inp(0x3DA) & 0x08);
while(!(inp(0x3Da)&0x08));
(this->*Move2Vid)();
} |