Whilst fixing StrongARM support I also tracked down why Zarch is now slow. I'd forgotten to go back and add the check to the STM abort handler that only clears the cache if an instruction is overwritten. With conditional cache flushing in place, Zarch is now back at over 50fps.
I'm totally amazed at how well StrongARM copes with aborts, Zarch is generating between 120,000 and 180,000 aborts/second and still runs at over 50fps. Considering the speed of the CPU, that's impressive. Admittedly it shouldn't be generating that high number of aborts, it looks like the subpage support isn't working on physical, as compared to emulation, the number of aborts is an order of magnitude higher - they should be identical.
2.38 is on the dev site and works on both StrongARM (below RO5) and the Pi, it's not quite ready for public release as there's still a few minor issues to resolve. I'm hoping to get those fixed during the week.
StrongARM RO5 support still isn't in place, I'll need to create yet another build as it needs portions of ADFFS400 and ADFFS500 to work, so we'll end up with an ADFFS450 specifically for IOMD 32bit. That does however largely depend on getting subpage support to work, as that's the deciding factor to fork it.
StrongARM support in 2.38
Re: StrongARM support in 2.38
It seems there's still some StrongARM issues as although Zarch works, James Pond is aborting as soon as you start the game. I didn't test any other games - I'd already spent the whole day trying to track down why RO3.5+ hangs when you shell out of the desktop with an F format floppy mounted.
I suspected the F issue was related to MIscOp 0 / 1 so recoded and improved both, unfortunately it didn't help. I'm at a loss as to what RO could be doing that's causing the problem.
I suspected the F issue was related to MIscOp 0 / 1 so recoded and improved both, unfortunately it didn't help. I'm at a loss as to what RO could be doing that's causing the problem.
Re: StrongARM support in 2.38
Turns out it was a bug in the Boot script and not the JITJonAbbott wrote:James Pond is aborting as soon as you start the game.
Re: StrongARM support in 2.38
I've been running some further tests on StrongARM and have discovered that Red Squirrel doesn't support subpages properly, most of the aborts that should occur don't
Comparing Zarch at the point it finishes wave 2 on auto-play, the number of aborts and cache flushes are as follows:
Aborts - Cache flushes
12,181,799 - 719 (RedSquirrel without Subpages)
12,181,799 - 720 (StrongARM without Subpages)
1,768,108 - 684 (RedSquirrel with Subpages)
12,169,726 - 720 (StrongARM with Subpages)
Using Subpages on StrongARM reduces the number of Aborts by 12,073 - not much when you consider the number of Aborts being generated. RedSquirrel however has reduced by 10,413,691 or more accurately, failed to generate 10,401,618 Aborts. Switching RedSquirrel to ARM710 fairs even worse, it stops generating Aborts entirely once it hits 14,144 Aborts.
Its also interesting to note that on RedSquirrel, there's 1 less cache flush without subpages. This is caused by cache flushes not always working on a physical StrongARM, the JIT checks for this occuring on entry and re-flushes again. The issue here seems to be that the I-cache doesn't always invalidate, I'm not too concerned about this as the number of cache flushes is incredibly low. It would only become an issue where code is constantly self-modifying.
Comparing Zarch at the point it finishes wave 2 on auto-play, the number of aborts and cache flushes are as follows:
Aborts - Cache flushes
12,181,799 - 719 (RedSquirrel without Subpages)
12,181,799 - 720 (StrongARM without Subpages)
1,768,108 - 684 (RedSquirrel with Subpages)
12,169,726 - 720 (StrongARM with Subpages)
Using Subpages on StrongARM reduces the number of Aborts by 12,073 - not much when you consider the number of Aborts being generated. RedSquirrel however has reduced by 10,413,691 or more accurately, failed to generate 10,401,618 Aborts. Switching RedSquirrel to ARM710 fairs even worse, it stops generating Aborts entirely once it hits 14,144 Aborts.
Its also interesting to note that on RedSquirrel, there's 1 less cache flush without subpages. This is caused by cache flushes not always working on a physical StrongARM, the JIT checks for this occuring on entry and re-flushes again. The issue here seems to be that the I-cache doesn't always invalidate, I'm not too concerned about this as the number of cache flushes is incredibly low. It would only become an issue where code is constantly self-modifying.