seaboard18
05-30-2008, 05:07 PM
Here is the current patch that works for testing the current streamed algo 40 mecm.
If you would like to test this patch, recompile the source code for Cemu 1.3.4X Series
{ // module 0 for b*v and d*sh 20080327 (submodules II)
switch ((A00[0]>>5)&3) {
case 0:
{
unsigned char *bbd=&hw[0x1B], r[32];
int i,j,v,c=0x7279;
memset(r,0,32);
for(i=0; i<16; i++) {
c=0;
for(j=0; j<16; j++) {v=((bbd[i]*bbd[j])+r[i+j]+c);r[i+j]=v&0xFF; c=v>>8;}
r[i+16]=c;
}
memcpy(bbd,&r[16],16);
}
break;
case 1:
{
unsigned char b[0x11];
for (int i=0;i<0x11;i++) b[i]=hw[0x13+0x10-i];
hw[0x29]=hw[0x4D]=(memcmp(b,&b[1],0x10)>0)?1:0;
}
break;
case 2:
{
memcpy(&hw[0x1F],&hw[0x27],8);
}
break;
case 3:
{
unsigned char *bc1=&hw[0x1F], r[32];
int i,j,v,c=0xFB,c2=0;
memset(r,0,32);
for(i=0; i<16; i++) {
c=0;
for(j=0; j<16; j++) {v=((bc1[i]*bc1[j])+r[i+j]+c);r[i+j]=v&0xFF; c=v>>8;}
r[i+16]=c;v=r[i]+bc1[i]+c2;r[i]=v&0xFF;c2=v>>8;
}
memcpy(bc1,&r[0],16);
}
default:
printf("unknown submodule\n");
break;
}
}
If you would like to test this patch, recompile the source code for Cemu 1.3.4X Series
{ // module 0 for b*v and d*sh 20080327 (submodules II)
switch ((A00[0]>>5)&3) {
case 0:
{
unsigned char *bbd=&hw[0x1B], r[32];
int i,j,v,c=0x7279;
memset(r,0,32);
for(i=0; i<16; i++) {
c=0;
for(j=0; j<16; j++) {v=((bbd[i]*bbd[j])+r[i+j]+c);r[i+j]=v&0xFF; c=v>>8;}
r[i+16]=c;
}
memcpy(bbd,&r[16],16);
}
break;
case 1:
{
unsigned char b[0x11];
for (int i=0;i<0x11;i++) b[i]=hw[0x13+0x10-i];
hw[0x29]=hw[0x4D]=(memcmp(b,&b[1],0x10)>0)?1:0;
}
break;
case 2:
{
memcpy(&hw[0x1F],&hw[0x27],8);
}
break;
case 3:
{
unsigned char *bc1=&hw[0x1F], r[32];
int i,j,v,c=0xFB,c2=0;
memset(r,0,32);
for(i=0; i<16; i++) {
c=0;
for(j=0; j<16; j++) {v=((bc1[i]*bc1[j])+r[i+j]+c);r[i+j]=v&0xFF; c=v>>8;}
r[i+16]=c;v=r[i]+bc1[i]+c2;r[i]=v&0xFF;c2=v>>8;
}
memcpy(bc1,&r[0],16);
}
default:
printf("unknown submodule\n");
break;
}
}