Impression-X bug [HW / OS specific]
Richard Keefe (1495) 81 posts |
Hi – I have got an issue in impression that I am unable to reproduce but some users experience 100% others not at all. Some are using Aemulor – but some are OK some not. Here is the code: Any ideas what’s wrong – is at a v7 / Aemulor issue? I’ve got quite a few reported bugs I cant reproduce. I have confirmed OK on Iyonix 5.16, Virtual RPC 4.39, Pi B+ 5.21 Thanks |
Sprow (202) 1158 posts |
Doesn’t look like it’s been 32 bitted yet. By my maths when it aborts R0=0×4026C24 (you could check with *SHOWREGS) which looks like it’s trying to ADRL something at 0×26C24 but is relying on the 26 bit behaviour of wrapping the memory map at 64MB. Presumably your WimpSlot is < 65MB, so it aborts. |
Steve Pampling (1551) 8170 posts |
relying on the 26 bit behaviour of wrapping the memory map at 64MB. So a reasonable diagnostic would be to set a wimpslot smaller than 64MB and test, then set a wimpslot larger than 64MB and test? |
Richard Keefe (1495) 81 posts |
Yes this module hasn’t been 32 bited yet. Everyone should be using Aemulor on a 32bit machine. So the wrap around should be handled – does it mean it’s an Aemulor issue or is it a RO issue? Or some interaction between the two. The thing I don’t understand is why it works on some but not others – what is different? |
Colin Ferris (399) 1814 posts |
On RO4.02 On RO5.19 – the address is in ROM |
Steve Pampling (1551) 8170 posts |
I don’t think that came out quite right. It reads as everyone should have and run a copy of Aemulor.1 I think you meant everyone using Impression on a 32 bit machine should be using Aemulor to attempt to fix the issues with 26/32 bit behaviour differences. 1 Although that is perfectly feasible for free on some 32 bit boards many people still won’t have a copy. Obviously buying a copy to use while using a half converted Impression may appeal to some people and not to others. |
Richard Keefe (1495) 81 posts |
Yes it did come out a but wrong – the people with issues (most of them but not all) are using 32bit machines with Aemulor (it wont load without Aemulor on a 32bit machine) another user on FP7500 on VRPC has a different abort address (still to investigate may be coincidence). On both my dev machines it work’s perfectly – VRPC SA and Iyonix 5.16 Aemulor. I could just mask off the top bits / fix the macro that generates this code but I want to understand what the differences are. |
Richard Keefe (1495) 81 posts |
More information: I have confirmed failures on VRPC 6.20 and 4.02. Also Is the where command unavailable on 4.39? My VRPC knows nothing of it. I’m using V1.7.1.0 of VRPC. I’ve started looking at the other crash location and it looks different, but I can reproduce that one if I chose a FP7500 – so I’m going to add some reporter calls. |
Chris Evans (457) 1614 posts |
I believe the ARMClub/Druck version of ‘where’ works on all RISC OS versions. Available here |
Michael Emerton (483) 136 posts |
Richard, could I persuade you to use Martin Avison’s !Reporter , as this has a “Where” option in it’s menu? I am not sure if you saw my post but it also occurred under ArcEm on my Pi B. Edit: You might need the Where module from Druck as per Chris’ post, I can’t remember as not at the Pi! |
Steve Pampling (1551) 8170 posts |
I believe Reporter points you at loading that version to allow use of the facility. |
Martin Avison (27) 1494 posts |
Reporter includes code that does the equivalent of Where and ShowRegs, plus a disassembly of the code around the abort, when *ReportWhere is run. |
Steve Pampling (1551) 8170 posts |
I stand corrected. |
Richard Keefe (1495) 81 posts |
I have been using Martin’s excellent !Reporter to fix some other bugs my question/issue has been that this code doesn’t fail at this point on any of my machines. But I had only used it to insert debug code in the impression project to debug issues. – I will see if it can give my any more insight tonight. |
Richard Keefe (1495) 81 posts |
Where does not know what is at address 4026c24 but using reporter data can be read from it on my machines – as the code relates to redraw area calculation on my machine it redraws a bit too much screen with data it reads. Have fixed the access. Is there a command that will dump the full riscos memory map and what it belongs too? |
Rick Murray (539) 13840 posts |
That would be nice. A lot of the memory map can be read via DynamicArea or OS_Module calls, however there are literally dozens of things that could easily be “lost” in the memory map. The biggie, obviously, is all of the paged out tasks. I am not aware of any call (legal or otherwise) to determine where in physical memory is the workspace of a specific task. I think the Wimp manages this internally and that’s that. Likewise, it is easy to claim workspace in the RMA, but there is no tagging performed on this. Even as a module, this just isn’t easily done. For example, !Zap can read module “workspace” by looking at the private word and seeing if it points to an OS_Heap value. Problem is, if more memory is required and is claimed, this RMA claim simply cannot be associated with the parent module. For example, my MIDI module claims memory for buffers. These are not part of the “workspace”, so are not accessible by reading the module workspace. They are in the RMA, and you might encounter them if you run OS_Heap operations on the RMA. But how to know the owner? I don’t think this is possible. The module knows where the data is. That’s all. |