From f9ecc620f8996dbcc1cbb34ed07770bc58c03e06 Mon Sep 17 00:00:00 2001 From: leslie <unknown> Date: Mon, 28 Jan 2008 21:39:06 +0100 Subject: [PATCH] nagra 0501: use native maprom if available --- systems/nagra/cpu.c | 1 + systems/nagra/cpu.h | 4 ++-- systems/nagra/nagra2-0501.c | 13 ++++++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) 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; -- 2.39.5