virtual bool PostProcAU(int id, unsigned char *data);
virtual int ProcessBx(unsigned char *data, int len, int pos);
virtual int ProcessEx(unsigned char *data, int len, int pos);
- int RunEmu(unsigned char *data, int len, unsigned short load, unsigned short run, unsigned short stop, unsigned short fetch, int fetch_len);
+ virtual int RunEmu(unsigned char *data, int len, unsigned short load, unsigned short run, unsigned short stop, unsigned short fetch, int fetch_len);
};
static cN2ProvLinkReg<cN2Prov0101,0x0101,(N2FLAG_MECM|N2FLAG_POSTAU|N2FLAG_Bx|N2FLAG_Ex)> staticPL0101;
return 1;
}
else if(!RomCallbacks()) break;
- break;
}
}
return -1;
public:
cN2Prov0501(int Id, int Flags);
virtual int ProcessBx(unsigned char *data, int len, int pos);
+ virtual int RunEmu(unsigned char *data, int len, unsigned short load, unsigned short run, unsigned short stop, unsigned short fetch, int fetch_len);
};
static cN2ProvLinkReg<cN2Prov0501,0x0501,(N2FLAG_MECM|N2FLAG_INV|N2FLAG_Bx)> staticPL0501;
return -1;
}
+int cN2Prov0501::RunEmu(unsigned char *data, int len, unsigned short load, unsigned short run, unsigned short stop, unsigned short fetch, int fetch_len)
+{
+ if(Init(id,120)) {
+ SetSp(0x0FFF,0x0EF8);
+ SetMem(load,data,len);
+ SetPc(run);
+ ClearBreakpoints();
+ AddBreakpoint(stop);
+ if(stop!=0x0000) AddBreakpoint(0x0000);
+ AddRomCallbacks();
+ while(!Run(100000)) {
+ if(GetPc()==0x0000 || GetPc()==stop) {
+ GetMem(fetch,data,fetch_len);
+ return 1;
+ }
+ else if(!RomCallbacks()) break;
+ }
+ }
+ return -1;
+}
+
void cN2Prov0501::TimerHandler(unsigned int num)
{
if(hwMapper) hwMapper->AddCycles(num);
int main(int argc, char *argv[])
{
if(argc<4) {
- printf("usage: %s <plugin-dir> <id> <cmd>\n",argv[0]);
+ printf("usage: %s <plugin-dir> <id> <cmd> [LOG]\n",argv[0]);
return 1;
}
InitAll(argv[1]);
LogAll();
- cLogging::SetModuleOption(LCLASS(L_SYS,L_SYS_DISASM),false);
+ if(argc<=4 || strcasecmp(argv[4],"LOG"))
+ cLogging::SetModuleOption(LCLASS(L_SYS,L_SYS_DISASM),false);
unsigned char data[1024];
unsigned int len = 0;
char *p = argv[3];
}
int id=strtol(argv[2],0,0);
cN2Prov *emmP=cN2Providers::GetProv(id,N2FLAG_NONE);
- HEXDUMP(0, data, len, "Input");
- if(emmP->RunEmu(data, len, 0x90, 0x90, 0x00, 0x00, 0x300)>=0)
- HEXDUMP(0, data, 0x300, "Output");
+ HEXDUMP(L_SYS_EMU,data,len,"Input");
+ if(emmP->RunEmu(data,len,0x90,0x90,0x00,0x00,0x300)>=0)
+ HEXDUMP(L_SYS_EMU,data,0x300,"Output");
}