From 808953ca9d11872cb307c18a80730efa70799f8e Mon Sep 17 00:00:00 2001 From: leslie Date: Thu, 7 Feb 2008 10:38:02 +0100 Subject: [PATCH] improve runEmu test tool --- systems/nagra/nagra2-0101.c | 3 +-- systems/nagra/nagra2-0501.c | 22 ++++++++++++++++++++++ testing/testN2RunEmu.c | 11 ++++++----- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/systems/nagra/nagra2-0101.c b/systems/nagra/nagra2-0101.c index 1bb8431..aa4b14e 100644 --- a/systems/nagra/nagra2-0101.c +++ b/systems/nagra/nagra2-0101.c @@ -562,7 +562,7 @@ public: 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 staticPL0101; @@ -1001,7 +1001,6 @@ int cN2Prov0101::RunEmu(unsigned char *data, int len, unsigned short load, unsig return 1; } else if(!RomCallbacks()) break; - break; } } return -1; diff --git a/systems/nagra/nagra2-0501.c b/systems/nagra/nagra2-0501.c index cc7b557..9faab72 100644 --- a/systems/nagra/nagra2-0501.c +++ b/systems/nagra/nagra2-0501.c @@ -79,6 +79,7 @@ protected: 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 staticPL0501; @@ -244,6 +245,27 @@ int cN2Prov0501::ProcessBx(unsigned char *data, int len, int pos) 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); diff --git a/testing/testN2RunEmu.c b/testing/testN2RunEmu.c index 8fbc70d..d745fa6 100644 --- a/testing/testN2RunEmu.c +++ b/testing/testN2RunEmu.c @@ -12,13 +12,14 @@ int main(int argc, char *argv[]) { if(argc<4) { - printf("usage: %s \n",argv[0]); + printf("usage: %s [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]; @@ -43,7 +44,7 @@ int main(int argc, char *argv[]) } 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"); } -- 2.39.5