Page 1 of 1

Pi 2 support

Posted: Mon Feb 02, 2015 6:26 pm
by JonAbbott
ADFFS will not work on the new version of the Pi due to it being ARMv7 only.

A lot of legacy C games rely on rotated loads, which are only available on ARMv5. ADFFS does in fact force the ARM into ARMv5 mode whilst the JIT is running to ensure compatibility.

It may be some time before I can add full support for ARMv7 as I may have to switch all LDR and STR instructions to be interpreted. This would obviously have quite a large performance impact as ADFFS currently copies LDR and STR instructions and leaves the CPU to run them natively.

EDIT: It's not as bad as I thought, I can switch ARMv7 to Abort on unaligned memory access meaning only the instructions that require it would be interpreted.

I'd also need to clear the lower two bits before setting PC to avoid Interworking issues. This just needs an extra instruction in a few codelets, so a minor issue.

Re: Pi 2 support

Posted: Mon Feb 02, 2015 10:08 pm
by richw
Silly question, but are the Beagle and panda systems also ARM v7? So the same applies to those? And iMX6?

I only ever used ADFFS on a Pi. I didn't realise that it would have issues on the other modern platforms.

Re: Pi 2 support

Posted: Tue Feb 03, 2015 12:01 am
by JonAbbott
richw wrote:Silly question, but are the Beagle and panda systems also ARM v7? So the same applies to those? And iMX6?

I only ever used ADFFS on a Pi. I didn't realise that it would have issues on the other modern platforms.
I've developed and tested it for the Archimedes, RiscPC, Iyonix and Pi and the aim of the project was to get games running on the Pi.

ADFFS as a floppy emulator should work on any ARM platform, it's games running under the JIT that may not work as it forces ARMv5 mode. If that register is ignored by the CPU it should run just fine in ARMv7 mode, although games that rely on unaligned memory access will fail. I've not actually tested in strict ARMv7 mode though.

I've not received any feedback to confirm either way about other ARMv6 / v6 platforms, so I can't be certain.

Re: Pi 2 support

Posted: Tue Feb 03, 2015 9:11 pm
by richw
Ah, that makes sense, thanks.

I guess the Pi support is what could help get JASPP to a wider market. Messing about with 25 year old machines isn't for everyone!

Re: Pi 2 support

Posted: Thu Mar 19, 2015 1:27 am
by JonAbbott
JonAbbott wrote:It's not as bad as I thought, I can switch ARMv7 to Abort on unaligned memory access meaning only the instructions that require it would be interpreted.
I've now ordered a Pi 2 and will start work on support once the next ADFFS release is out. Although I could code Unaligned access on the Pi, there are some fundamental differences at cache level on the Pi 2 that need checking. The cache rework I've been doing this week should hopefully resolve it, but without testing on a physical machine its pure speculation.
JonAbbott wrote:I'd also need to clear the lower two bits before setting PC to avoid Interworking issues. This just needs an extra instruction in a few codelets, so a minor issue.
I'm not sure why I made that statement, all codelets clear bits 0-1 and 26-31 before they set the PC so Interworking shouldn't be an issue.

Re: Pi 2 support

Posted: Fri Jul 17, 2015 7:02 pm
by georgeb
Hi Jon, do you have any news on support for the Pi 2?

Re: Pi 2 support

Posted: Fri Jul 17, 2015 7:45 pm
by JonAbbott
I'm still considering the best way to implement it, although it's on the list for the next release.

Re: Pi 2 support

Posted: Sun Oct 18, 2015 11:27 pm
by JonAbbott
I've started the Pi 2 support. After a day of sorting out deprecated instructions within ADFFS itself, I do have it running and Conqueror running reliably.

Sadly that's where the good news stops, as many games exhibit screen corruption, even Zarch doesn't work for long before dying from memory corruption. It's fairly predictable, the first word of the GPU memory corrupts, then a few more on the first raster, followed by a random number of words across the screen and then a total lock.

I'm unsure at this stage if it's the GPU RAM that's corrupt, or DA2.

Re: Pi 2 support

Posted: Tue Oct 20, 2015 5:46 pm
by JonAbbott
New build up on the dev site, fixed a bug that was causing Battle Tank and a few others to Abort during loading.

Now that it's working on the Iyonix, I can see there's a problem somewhere. Games that run under a high Hz base mode are running very slowly, Fire & Ice for example runs at half speed as does the music. It's not the blitter at fault, as Zarch runs at over 50fps but it is somehow related to the higher number of VSync's occurring.

Re: Pi 2 support

Posted: Fri Oct 30, 2015 8:13 am
by JonAbbott
General Pi 2 support (or more correctly, ARM in unaligned Abort mode) is now implemented and I've tested a selection of games on the Pi B+ in ARMv6 strict mode. There's possibly one issue I need to resolve but in general it's compete.

Cortex-A7 support however is a whole different ballgame. Whilst coding the Pi 2 support, it's highlighted a lot of issues related to deprecated instruction behaviour that are possibly affecting RISCOS itself. Its going to take a while to check all these, find the issues in the ROOL source and get the devs to implement workarounds, so it may be some time before all games that work on the Pi work on the Pi 2.

That said, some games are working. Lemmings for example relies on unaligned memory access to work and appears to be running okay, I played the first few levels successfully.

Zarch is an example of one that possibly falls foul of ARMv7 deprecated features, that I need to look into further. Conqueror on the other hand works okay.