From: leslie Date: Mon, 28 Jan 2008 20:39:06 +0000 (+0100) Subject: nagra 0501: use native maprom if available X-Git-Tag: 0.9.0~15 X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=f9ecc620f8996dbcc1cbb34ed07770bc58c03e06;p=sasc-ng.git nagra 0501: use native maprom if available --- diff --git a/systems/nagra/cpu.c b/systems/nagra/cpu.c index 8268606..2be19e2 100644 --- a/systems/nagra/cpu.c +++ b/systems/nagra/cpu.c @@ -202,6 +202,7 @@ void c6805::InitMapper(void) pageMap[1]=PAGE_SIZE*1; pageMap[2]=PAGE_SIZE*2; pageMap[0x80]=PAGE_SIZE*3; + pageMap[0x40]=PAGE_SIZE*4; } void c6805::ClearMapper(void) diff --git a/systems/nagra/cpu.h b/systems/nagra/cpu.h index 7286b43..f3185a5 100644 --- a/systems/nagra/cpu.h +++ b/systems/nagra/cpu.h @@ -89,8 +89,8 @@ public: // ---------------------------------------------------------------- #define MAX_BREAKPOINTS 24 -#define MAX_MAPPER 8 -#define MAX_PAGES 4 +#define MAX_MAPPER 10 +#define MAX_PAGES 5 #define PAGE_SIZE 32*1024 #define bitset(d,bit) (((d)>>(bit))&1) diff --git a/systems/nagra/nagra2-0501.c b/systems/nagra/nagra2-0501.c index e5992c6..cc7b557 100644 --- a/systems/nagra/nagra2-0501.c +++ b/systems/nagra/nagra2-0501.c @@ -66,6 +66,7 @@ void cMap0501::DoMap(int f, unsigned char *data, int l) class cN2Prov0501 : public cN2Prov, private cMap0501, public cN2Emu { private: cMapMemHW *hwMapper; + bool hasMaprom; // bool ProcessMap(int f); bool RomCallbacks(void); @@ -86,7 +87,7 @@ cN2Prov0501::cN2Prov0501(int Id, int Flags) :cN2Prov(Id,Flags) ,cMap0501(Id) { - hwMapper=0; + hwMapper=0; hasMaprom=false; } bool cN2Prov0501::Algo(int algo, const unsigned char *hd, unsigned char *hw) @@ -121,6 +122,11 @@ bool cN2Prov0501::Algo(int algo, const unsigned char *hd, unsigned char *hw) bool cN2Prov0501::RomInit(void) { if(!AddMapper(hwMapper=new cMapMemHW(),HW_OFFSET,HW_REGS,0x00)) return false; + if( AddMapper(new cMapRom(0x3800,"Rom120_003800-003FFF.bin",0x00000),0x3800,0x0800,0x00) + && AddMapper(new cMapRom(0x8000,"Rom120_408000-40CFFF.bin",0x00000),0x8000,0x5000,0x40)) { + hasMaprom=true; + PRINTF(L_SYS_EMU,"%04x: using native MAP rom",id); + } return true; } @@ -201,7 +207,8 @@ bool cN2Prov0501::RomCallbacks(void) void cN2Prov0501::AddRomCallbacks(void) { - AddBreakpoint(0x3840); // map handler + if(!hasMaprom) + AddBreakpoint(0x3840); // map handler } int cN2Prov0501::ProcessBx(unsigned char *data, int len, int pos) @@ -225,7 +232,7 @@ int cN2Prov0501::ProcessBx(unsigned char *data, int len, int pos) AddBreakpoint(0x821f); AddBreakpoint(0x0000); AddRomCallbacks(); - while(!Run(5000)) { + while(!Run(hasMaprom ? 20000:5000)) { if(GetPc()==0x821f) { GetMem(0x80,data,len); return a;