]> www.vanbest.org Git - sasc-ng.git/commitdiff
nagra 0501: use native maprom if available
authorleslie <unknown>
Mon, 28 Jan 2008 20:39:06 +0000 (21:39 +0100)
committerleslie <unknown>
Mon, 28 Jan 2008 20:39:06 +0000 (21:39 +0100)
systems/nagra/cpu.c
systems/nagra/cpu.h
systems/nagra/nagra2-0501.c

index 826860674c6982559949bf4cf072f3c9e9799c5d..2be19e23d98c302a54350ddab9bfec496fd0f9ba 100644 (file)
@@ -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)
index 7286b43e3bfe6227ddc26a5f96bf61b60afdfd34..f3185a52c3a4d6ee9f968bad0be4691713f8133a 100644 (file)
@@ -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)
index e5992c65ac3aa456e097674349db9f25c55ecde4..cc7b557365dd612b98312449fcf96eae52f570e7 100644 (file)
@@ -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;