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