virtual int ProcessBx(unsigned char *data, int len, int pos);
virtual int ProcessEx(unsigned char *data, int len, int pos);
virtual int RunEmu(unsigned char *data, int len, unsigned short load, unsigned short run, unsigned short stop, unsigned short fetch, int fetch_len);
+ virtual void PostDecrypt(bool ecm) { PostDecryptSetup(ecm); }
};
static cN2ProvLinkReg<cN2Prov0101,0x0101,(N2FLAG_MECM|N2FLAG_POSTAU|N2FLAG_Bx|N2FLAG_Ex)> staticPL0101;
cN2Prov0501(int Id, int Flags);
virtual int ProcessBx(unsigned char *data, int len, int pos);
virtual int RunEmu(unsigned char *data, int len, unsigned short load, unsigned short run, unsigned short stop, unsigned short fetch, int fetch_len);
+ virtual void PostDecrypt(bool ecm) { PostDecryptSetup(ecm); }
};
static cN2ProvLinkReg<cN2Prov0501,0x0501,(N2FLAG_MECM|N2FLAG_INV|N2FLAG_Bx)> staticPL0501;
case COPY_C_D:
case COPY_D_C:
DoMap(f);
- if(f>=COPY_A_B) AddMapCycles(64); // quick timing fix. Is there an AUXed ROM120 to check???
break;
case 0x37:
GetMem(HILO(0x44),tmp,dl,0);
MonMul(s160,B,a);
}
+void cMapCore::PostDecryptSetup(bool ecm)
+{
+ if(ecm) wordsize=0x8;
+ else wordsize=0xC;
+}
+
int cMapCore::GetOpSize(int l)
{
return l!=0 ? l : wordsize;
if(ecmP) ecmP->PrintCaps(L_SYS_ECM);
}
lastEcmId=id;
+ if(ecmP) ecmP->PostDecrypt(true);
HEXDUMP(L_SYS_RAWECM,buff,cmdLen,"Nagra2 RAWECM");
int l=0, mecmAlgo=0;
if(emmP) emmP->PrintCaps(L_SYS_EMM);
}
lastEmmId=id;
+ if(emmP) emmP->PostDecrypt(false);
HEXDUMP(L_SYS_RAWEMM,emmdata,cmdLen,"Nagra2 RAWEMM");
id=(emmdata[8]<<8)+emmdata[9];
virtual void AddMapCycles(unsigned int num) {}
unsigned int MapCycles(void) { return cycles; }
virtual unsigned int CpuCycles(void) { return 0; }
+ virtual void PostDecryptSetup(bool ecm);
public:
cMapCore(void);
virtual ~cMapCore() {}
virtual int ProcessEx(unsigned char *data, int len, int pos) { return -1; }
virtual bool PostProcAU(int id, unsigned char *data) { return true; }
virtual int RunEmu(unsigned char *data, int len, unsigned short load, unsigned short run, unsigned short stop, unsigned short fetch, int fetch_len) { return -1; }
+ virtual void PostDecrypt(bool ecm) {}
bool CanHandle(int Id) { return MATCH_ID(Id,id); }
bool HasFlags(int Flags) { return (flags&Flags)==Flags; }
void PrintCaps(int c);
emmP=cN2Providers::GetProv(id,N2FLAG_NONE);
if(emmP) emmP->PrintCaps(L_SYS_EMM);
}
+ if(emmP) emmP->PostDecrypt(false);
HEXDUMP(L_SYS_RAWEMM,emmdata,cmdLen,"Nagra2 RAWEMM");
id=(emmdata[8]<<8)+emmdata[9];
cN2Prov *ecmP=cN2Providers::GetProv(id,N2FLAG_NONE);
if(ecmP) ecmP->PrintCaps(L_SYS_ECM);
+ if(ecmP) ecmP->PostDecrypt(true);
int l=0, mecmAlgo=0;
for(int i=(buff[14]&0x10)?16:20; i<cmdLen-10 && l!=3; ) {