X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pputile098.h;fp=pputile098.h;h=6da930c6f6bd23434af5556591a449af60704a64;hb=6244011fd85a10400accd6d8e7d941144f92aa5b;hp=0000000000000000000000000000000000000000;hpb=3ee0ae39373065c2afa6ddd823a0f667d5875d8a;p=fceu.git diff --git a/pputile098.h b/pputile098.h new file mode 100644 index 0000000..6da930c --- /dev/null +++ b/pputile098.h @@ -0,0 +1,157 @@ + uint8 *C; + register uint8 cc; + uint32 vadr; + + #ifndef PPUT_MMC5SP + register uint8 zz; + #else + uint8 xs,ys; + xs=X1; + ys=((scanline>>3)+MMC5HackSPScroll)&0x1F; + if(ys>=0x1E) ys-=0x1E; + #endif + + if(X1>=2) + { + uint8 *S=PALRAM; + uint32 pixdata; + + pixdata=ppulut1[(pshift[0]>>(8-XOffset))&0xFF]|ppulut2[(pshift[1]>>(8-XOffset))&0xFF]; + + pixdata|=ppulut3[XOffset|(atlatch<<3)]; + //printf("%02x ",ppulut3[XOffset|(atlatch<<3)]); + + #ifdef C80x86 + asm volatile( + "movl %%ebx,%%eax\n\t" + "andl $15,%%eax\n\t" + "movb (%%esi,%%eax),%%cl\n\t" + "shrl $4, %%ebx\n\t" + "movb %%cl, (%%edi)\n\t" + + "movl %%ebx,%%eax\n\t" + "andl $15,%%eax\n\t" + "movb (%%esi,%%eax),%%cl\n\t" + "shrl $4, %%ebx\n\t" + "movb %%cl, 1(%%edi)\n\t" + + "movl %%ebx,%%eax\n\t" + "andl $15,%%eax\n\t" + "movb (%%esi,%%eax),%%cl\n\t" + "shrl $4, %%ebx\n\t" + "movb %%cl, 2(%%edi)\n\t" + + "movl %%ebx,%%eax\n\t" + "andl $15,%%eax\n\t" + "movb (%%esi,%%eax),%%cl\n\t" + "shrl $4, %%ebx\n\t" + "movb %%cl, 3(%%edi)\n\t" + + "movl %%ebx,%%eax\n\t" + "andl $15,%%eax\n\t" + "movb (%%esi,%%eax),%%cl\n\t" + "shrl $4, %%ebx\n\t" + "movb %%cl, 4(%%edi)\n\t" + + "movl %%ebx,%%eax\n\t" + "andl $15,%%eax\n\t" + "movb (%%esi,%%eax),%%cl\n\t" + "shrl $4, %%ebx\n\t" + "movb %%cl, 5(%%edi)\n\t" + + "movl %%ebx,%%eax\n\t" + "andl $15,%%eax\n\t" + "movb (%%esi,%%eax),%%cl\n\t" + "shrl $4, %%ebx\n\t" + "movb %%cl, 6(%%edi)\n\t" + + //"movl %%ebx,%%eax\n\t" + //"andl $15,%%eax\n\t" + //"movb (%%esi,%%eax),%%cl\n\t" + //"movb %%cl, 7(%%edi)\n\t" + "movb (%%esi, %%ebx),%%cl\n\t" + "movb %%cl, 7(%%edi)\n\t" + : + : "S" (S), "D" (P), "b" (pixdata) + : "eax", "cl" ); + #else + P[0]=S[pixdata&0xF]; + pixdata>>=4; + P[1]=S[pixdata&0xF]; + pixdata>>=4; + P[2]=S[pixdata&0xF]; + pixdata>>=4; + P[3]=S[pixdata&0xF]; + pixdata>>=4; + P[4]=S[pixdata&0xF]; + pixdata>>=4; + P[5]=S[pixdata&0xF]; + pixdata>>=4; + P[6]=S[pixdata&0xF]; + pixdata>>=4; + P[7]=S[pixdata&0xF]; + #endif + P+=8; + } + + #ifdef PPUT_MMC5SP + vadr=(MMC5HackExNTARAMPtr[xs|(ys<<5)]<<4)+(vofs&7); + #else + zz=RefreshAddr&0x1F; + C=vnapage[(RefreshAddr>>10)&3]; + vadr=(C[RefreshAddr&0x3ff]<<4)+vofs; /* Fetch name table byte. */ + #endif + + #ifdef PPUT_HOOK + PPU_hook(0x2000|(RefreshAddr&0xfff)); + #endif + + #ifdef PPUT_MMC5SP + cc=MMC5HackExNTARAMPtr[0x3c0+(xs>>2)+((ys&0x1C)<<1)]; + cc=((cc >> ((xs&2) + ((ys&0x2)<<1))) &3); + #else + #ifdef PPUT_MMC5CHR1 + cc=(MMC5HackExNTARAMPtr[RefreshAddr & 0x3ff] & 0xC0)>>6; + #else + cc=C[0x3c0+(zz>>2)+((RefreshAddr&0x380)>>4)]; /* Fetch attribute table byte. */ + cc=((cc >> ((zz&2) + ((RefreshAddr&0x40)>>4))) &3); + #endif + #endif + + atlatch>>=2; + atlatch|=cc<<2; + + pshift[0]<<=8; + pshift[1]<<=8; + + #ifdef PPUT_MMC5SP + C = MMC5HackVROMPTR+vadr; + C += ((MMC5HackSPPage & 0x3f & MMC5HackVROMMask) << 12); + #else + #ifdef PPUT_MMC5CHR1 + C = MMC5HackVROMPTR; + C += (((MMC5HackExNTARAMPtr[RefreshAddr & 0x3ff]) & 0x3f & + MMC5HackVROMMask) << 12) + (vadr & 0xfff); + #elif defined(PPUT_MMC5) + C=MMC5BGVRAMADR(vadr); + #else + C = VRAMADR(vadr); + #endif + #endif + + #ifdef PPUT_HOOK + PPU_hook(vadr); + #endif + + pshift[0]|=C[0]; + pshift[1]|=C[8]; + + if((RefreshAddr&0x1f)==0x1f) + RefreshAddr^=0x41F; + else + RefreshAddr++; + + #ifdef PPUT_HOOK + PPU_hook(0x2000|(RefreshAddr&0xfff)); + #endif +