diff -r 4a78d1ec9701 sc/PLUGINS/src/sc-src/systems/nagra/nagra2-0501.c --- a/sc/PLUGINS/src/sc-src/systems/nagra/nagra2-0501.c Fri Dec 07 08:17:25 2007 -0800 +++ b/sc/PLUGINS/src/sc-src/systems/nagra/nagra2-0501.c Wed Dec 12 07:01:04 2007 +0100 @@ -113,6 +113,7 @@ int cN2Prov0501::ProcessBx(unsigned char SetSp(0x0FFF,0x0FE0); Set(0x0001,0xFF); Set(0x000E,0xFF); + Set(0,4); ClearBreakpoints(); AddBreakpoint(0x821f); while(!Run(5000)) { diff -r 4a78d1ec9701 sc/PLUGINS/src/sc-src/systems/nagra/nagra2-4101.c --- a/sc/PLUGINS/src/sc-src/systems/nagra/nagra2-4101.c Fri Dec 07 08:17:25 2007 -0800 +++ b/sc/PLUGINS/src/sc-src/systems/nagra/nagra2-4101.c Wed Dec 12 07:01:04 2007 +0100 @@ -17,9 +17,56 @@ * Or, point your browser to http://www.gnu.org/copyleft/gpl.html */ +// -- cMap4101 ----------------------------------------------------------------- + +#include "nagra2-ECC.c" + +class cMap4101 : public cMapCore { +private: + int mId; + N2AU ecc; +protected: + void DoMap(int f, unsigned char *data=0, int l=0); +public: + cMap4101(int Id); + }; + +cMap4101::cMap4101(int Id) +{ + mId=Id|0x100; +} + +void cMap4101::DoMap(int f, unsigned char *data, int l) +{ + PRINTF(L_SYS_MAP,"%04x: calling function %02X",mId,f); + switch(f) { + case 0x58: + { + unsigned char res[64]; + memset(res,0,sizeof(res)); +// ecc.MAP58(P,Px,Py,a,K,resX,resY); + ecc.MAP58(&data[0],&data[16],&data[32],&data[64],&data[80],&res[0],&res[32]); + memcpy(data,res,sizeof(res)); + break; + } + case 0x44: + sctx.h4=UINT32_LE(data); + sctx.h3=UINT32_LE(data+4); + sctx.h2=UINT32_LE(data+8); + sctx.h1=UINT32_LE(data+12); + sctx.h0=UINT32_LE(data+16); + cMapCore::DoMap(0x44,data); + break; + default: + if(!cMapCore::DoMap(f,data,l)) + PRINTF(L_SYS_MAP,"%04x: unsupported call %02x",mId,f); + break; + } +} + // -- cN2Prov4101 ---------------------------------------------------------------- -class cN2Prov4101 : public cN2Prov, public cN2Emu { +class cN2Prov4101 : public cN2Prov, public cMap4101, public cN2Emu { protected: virtual void WriteHandler(unsigned char seg, unsigned short ea, unsigned char &op); public: @@ -32,6 +79,7 @@ static cN2ProvLinkReg>6,&emmdata[i+23],16)) NewKey(); + if(keys.NewKey('N',id,(emmdata[i+16]&0x40)>>6,&emmdata[i+23],16)) + { + // Hack: Poor men's P-Star and Entavio AU + if (id == 0x501) { + keys.NewKey('N',0x503,(emmdata[i+16]&0x40)>>6,&emmdata[i+23],16); + keys.NewKey('N',0x505,(emmdata[i+16]&0x40)>>6,&emmdata[i+23],16); + keys.NewKey('N',0x511,(emmdata[i+16]&0x40)>>6,&emmdata[i+23],16); + } + NewKey(); + } cLoaders::SaveCache(); } i+=emmdata[i+1]+2;