// ----------------------------------------------------------------
#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)
class cN2Prov0501 : public cN2Prov, private cMap0501, public cN2Emu {
private:
cMapMemHW *hwMapper;
+ bool hasMaprom;
//
bool ProcessMap(int f);
bool RomCallbacks(void);
:cN2Prov(Id,Flags)
,cMap0501(Id)
{
- hwMapper=0;
+ hwMapper=0; hasMaprom=false;
}
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;
}
void cN2Prov0501::AddRomCallbacks(void)
{
- AddBreakpoint(0x3840); // map handler
+ if(!hasMaprom)
+ AddBreakpoint(0x3840); // map handler
}
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;