Pi 2 support

Discuss development specific to the Pi version of ADFFS
Post Reply
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Pi 2 support

Post 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.
richw
Posts: 159
Joined: Sat Sep 14, 2013 9:05 pm

Re: Pi 2 support

Post 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.
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Pi 2 support

Post 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.
richw
Posts: 159
Joined: Sat Sep 14, 2013 9:05 pm

Re: Pi 2 support

Post 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!
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Pi 2 support

Post 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.
georgeb
Posts: 1
Joined: Fri Jul 17, 2015 6:55 pm

Re: Pi 2 support

Post by georgeb »

Hi Jon, do you have any news on support for the Pi 2?
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Pi 2 support

Post by JonAbbott »

I'm still considering the best way to implement it, although it's on the list for the next release.
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Pi 2 support

Post 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.
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Pi 2 support

Post 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.
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Pi 2 support

Post 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.
Post Reply