View Single Post
Old 18 January 2018, 10:28   #52
chb
Registered User
 
Join Date: Dec 2014
Location: germany
Posts: 439
Wow, running in 1.6 -1.9 frames? Totally awesome! Congratulations, great achievement.

Quote:
Originally Posted by LaBodilsen View Post
Would that really help?.. as the A500 memorybus is 16bit, if you write a longword, it would still take as many cycles as writing 2 words? i think any improvement would be minimal.
The memory bus is only 16 bit, true, but you always need to fetch the instruction itself, too. That's why move.l is faster even on the A500: a move.w Dn,(a0)+ is 8 cycles (two memory accesses, one for the instruction and one for the data), a move.l is 12 cycles (three memory accesses, one for the instruction and two for the data). So one move.l Dn,(a0)+ takes 25% less time than two word moves. But that's a quite optimal case, for instructions that do more memory fetches (e.g. move.x (a0)+,(a1)+) the ratio of instruction fetches to memory access is lower and therefore the advantage smaller. On the other hand, if you use an instruction with complex address calculation like "d(An)" or "d(An,ix)", the gain may be even higher, as address calculations are always 32-bit anyway and have to be carried out twice for the two word instructions *- but then again that internal calculation is not slowed down by other DMA memory access.... So, it's complicated.

EDIT: The neogeo dev wiki has a nice table with instruction/addressing modes timings, AFAICS it's from the official 68000 manual, but with nicer formatting:
https://wiki.neogeodev.org/index.php...ctions_timings

EDIT2: *Hmm, does not seem to be true according to the table I linked...

Last edited by chb; 18 January 2018 at 10:42.
chb is offline  
 
Page generated in 0.06458 seconds with 11 queries