PRINTF(L_SYS_MAP,"0101: calling function %02X",f);
l=GetOpSize(l);
cycles=0; interrupted=false;
+ unsigned int startcycles=MapCycles();
switch(f) {
case 0x21:
MAP_IRQ_BEGIN();
AddMapCycles(282);
BN_clear(C);
WS_END();
- AddMapCycles(898-282-288);
+ cycles=898;
MAP_IRQ_END();
break;
case 0x22:
PRINTF(L_SYS_MAP,"0101: unsupported call %02x",f);
break;
}
+ if(!interrupted && cycles)
+ cycles-=MapCycles()-startcycles;
}
// -- cN2Prov0101 --------------------------------------------------------------
virtual void Stepper(void);
virtual void TimerHandler(unsigned int num);
virtual void AddMapCycles(unsigned int num);
+ virtual unsigned int MapCycles(void) { return Cycles(); }
public:
cN2Prov0101(int Id, int Flags);
virtual bool PostProcAU(int id, unsigned char *data);
switch(f) {
case SETSIZE:
DoMap(f,0,Get(0x48));
- AddCycles(MapCycles());
break;
case IMPORT_J:
case IMPORT_A:
case IMPORT_LAST:
addr=HILO(0x44);
GetMem(addr,tmp,dl,0); DoMap(f,tmp,l);
- AddCycles(MapCycles());
break;
case EXPORT_J:
case EXPORT_A:
case EXPORT_LAST:
addr=HILO(0x44);
DoMap(f,tmp,l); SetMem(addr,tmp,dl,0);
- AddCycles(MapCycles());
break;
case SWAP_A:
case SWAP_B:
case SWAP_D:
addr=HILO(0x44);
GetMem(addr,tmp,dl,0); DoMap(f,tmp,l); SetMem(addr,tmp,dl,0);
- AddCycles(MapCycles());
break;
case CLEAR_A:
case CLEAR_B:
case COPY_C_D:
case COPY_D_C:
DoMap(f);
- AddCycles(MapCycles());
break;
case 0x37:
GetMem(HILO(0x44),tmp,dl,0);
PRINTF(L_SYS_EMU,"%04x: map call %02x not emulated",id,f);
return false;
}
+ if(cycles>0) AddMapCycles(cycles);
return true;
}
//
int GetOpSize(int l);
bool DoMap(int f, unsigned char *data=0, int l=0);
- unsigned int MapCycles() { return cycles; }
virtual void AddMapCycles(unsigned int num) {}
+ virtual unsigned int MapCycles(void) { return 0; }
public:
cMapCore(void);
virtual ~cMapCore() {}