| Re: [hatari-devel] Correct cycles values? | 
[ Thread Index | 
Date Index
| More lists.tuxfamily.org/hatari-devel Archives
] 
Le 14/03/2013 11:01, Eero Tamminen a écrit :
Shouldn't the cycles shown in profile disassembly then be:
	cycles<<  nCpuFreqShift
?
Yes, if you want to display cycles in a human readable way,
nCpuFreqShift should betaken into account.
static inline void M68000_AddCycles(int cycles)
{
          cycles = (cycles + 3)&  ~3;
          cycles = cycles>>  nCpuFreqShift;
..
}
Ok, that can explain some of the emulation inaccuracy.
Shouldn't that function do rounding to closest shifted value to get
better accuracy, instead of rounding-up to next 4-divisable value:
No, the 4 cycles rounding is necessary on STF/STE where (nearly) all bus 
accesses are rounded to 4 cycles. They're some exceptions, such as 
instruction pairing, but the main rule is first to round motorola cycles 
to the next 4 cycles mutiple.
I can't tell for the falcon, I don't know if bus access are limited to 4 
cycles too.
Are all of the values involved:
- cycles arg
- nWaitStateCycles
- BlitterVars.op_cycles
- CurrentInstrCycles+nWaitStateCycles
Such that they need to be shifted?
Yes, STF/STE blitter expects to run at the same speed at the 68000 on a 
8 MHz bus. So same rules must apply if you want to keep cpu and blitter 
in synch when you emulate a 16 or 32 MHz CPU, then you also need to 
dividie blitter's cycles.
This kind of shifting was nowhere else (acia.c shifted in other direction).
That's intended too. All those shifting are correct, they're mostly 
hacks because it's much easier to have a common base freq of 8 MHz and 
divide cycles by 2 or 4 than to be emulate x2 or x4 more cpu instruction 
during the same loop, while still emulating the same number of MFP, FDC, 
ACIA, ... events
Nicolas