!Store sale starts Jan 1st
Rick Murray (539) 13806 posts |
Everything Steve said. My concern is for software no longer being maintained that may be lost by this change. It does need to be done, I’m just wary of the risk of reducing available software and the impact that this may have. I suppose soon I ought to download the source tarballs and mod my own build with ZPP enabled. |
Steve Pampling (1551) 8155 posts |
I don’t think the bug fixing is the only benefit but I do consider that eliminating use of a specific section of memory that shouldn’t be used in that fashion is important to a more flexible use of the memory map. 1 1996 was the deprecation, by 1997 authors should have cleaned up most of the software. There’s also a decent chance that with encouragement all current OS revisions would be clean. |
Colin (478) 2433 posts |
All I read is:
But no good reason. The reason for Zeropain is not to fix bugs – that’s a side effect. It’s a feasability study to assess the consequences to riscos of moving to high vectors. As I understand it high vectors are needed for future arm cpus. Just because future cpus will break certain programs is not a good reason to make them fail on current processors. Yes you want new and currently maintained programs to be aware of the future change and written accordingly but there’s no reason to break others yet. |
Colin (478) 2433 posts |
So what is the benefit? |
Steve Pampling (1551) 8155 posts |
Maybe if you read the rest of the sentence? Then again, your “feasibility study” remark shows you already know. Do bear in mind that RO on a mobile/tablet development board can only be an interim if RO is to continue. Let’s not deliberately go down side alleys. |
Malcolm Hussain-Gambles (1596) 811 posts |
My understanding is so we have a hope of running RISC OS on something actually modern. I also thought that the initial memory area is also needed for multicore support as well. |
Colin (478) 2433 posts |
I did and it wasn’t a reason worth losing 1 legacy program. Flexible memory arrangements on its own is useless so lets run with the reason everyone is putting up with this namely getting riscos onto multiple cpu’s. If someone wanted to do that wouldn’t it be better to fork risc os and have a risc os high vector version for those who want to contribute to it. Most updates would benefit both versions and the shift could happen when the new version matures. |
Steve Pampling (1551) 8155 posts |
No, no, please, no. |
Rick Murray (539) 13806 posts |
Given the Pi and iMX6 (etc) are currently being sold, I would be inclined to consider them modern if not exactly cutting edge.
The smartphone you bought last week is legacy status if you compare to tablets/smartphones. On a more serious note, an awful lot of smartphone and tablet hardware is pseudo-custom, wrapped in NDAs, and for which there exists scant technical documentation.
Is 64 bit really viable in the world of RISC OS? It isn’t as if we (Otter excepted) run applications that require hundreds of megabytes of memory just to perform startup. And finally… The ace cards. RISC OS has always had a very mouse-centric UI, and has always made full use of all three buttons. How would you replicate that on a tablet-like device? Do note that Android is, in general, moving away from having a menu button and towards having a little on-screen three-dots-in-a-row icon. Neither Android nor iOS understand the concept of context sensitive menus. The menu “context” is based upon what you are looking at, which leads nicely on to… So, if you manage to work around the hardware issues, you still have a metric tonne of UI and software issues to contend with if wanting to make RISC OS work on a tablet.
Given the potential issues involved, and the noted lack of “official” stable release for Pi type hardware, I frankly wouldn’t be surprised to see the next official release(s) being low vector versions.
Yeah. That’s a great idea. Forking RISC OS worked so well the last time… |
Colin (478) 2433 posts |
So in the mean time users don’t get access to all the fixes/improvements that don’t break riscos because they don’t want to use a version that breaks a program they use. |
Steve Fryatt (216) 2103 posts |
Currently zero page relocation only affects the development builds. Stable builds haven’t (yet) been affected, so users aren’t seeing any breakages (yet). |
Rick Murray (539) 13806 posts |
To follow up what I said about mobiles, take a look at: |
Malcolm Hussain-Gambles (1596) 811 posts |
@rick yeah agree completely. But I was being a little terse. 64 bits are useful for quite a lot more than memory, but that misses what I was trying to say – my fault entirely. But who knows, all I do know is progress is good and that was largely overall point. And as for android, shessh, no. Only because the other choice is sell my soul,my wife’s soul and my kids souls ;-) |
Jon Abbott (1421) 2641 posts |
Ironic as it sounds, relocating Page Zero actually helps improve backward compatibility with software long term…why…it allows Page Zero accesses to be virtualised and remapped on-the-fly to legal RISCOS calls. This is the very reason I personally pushed for it to be implemented, as without it being moved neither a Hypervisor or Multi-core would be viable with the amount of unmaintained software out there. As with the changes to ARM when StrongARM was implemented, it may seem like a backward step now, but the long benefits far outweigh the short term pain. Yes, some unmaintained software will break short-term due to bugs or use of direct access to Page Zero values, but these can be fixed with a compatibility shim Module if there’s a pressing need to get them working. This is what ZeroPain partially does as well as reporting the accesses to allow bugs to be fixed. A lot of this has been implemented in the next release of ADFFS to provide backward compatibility, where a specific version of RISCOS from 2 to 5 can be specified and Page Zero is then translated accordingly. However, as Page Zero wasn’t remapped at the time, I had to implement an instruction emulator to look for Page Zero reads – this goes against what ADFFS does, which is to allow code to run natively on the CPU. With Page Zero now relocated, the LDR/LDM emulator can be removed and code once again allowed to run natively with all the speed benefits that provides. Admittedly, the bulk of the community has no interest in ADFFS or any idea what it does, or how it differs from anything else that’s been implemented before. I’ve been critised many times for its game centric nature, but there’s a simple reason for this – games are a worst case backward compatibility nightmare and Apps are already covered very well by Aemulor. Not only do most games directly access legacy hardware, but they also touch Page Zero for vectors and values. If the bulk of games can be made to run on modern hardware, it’s not a big leap to get applications running in the future. ADFFS is simply a test bed for the techniques and components required for a Hypervisor, it’s essentially a partial Paravirtualizing Hypervisor with support for only one VMM. When I get around to looking at Wimp support I’ll be aiming for a multi-core VMM via a full Hypervisor that will allow multiple versions of RISCOS to run on the machine and shim the apps back to the host Wimp. This wouldn’t be possible without Page Zero being relocated. In summary, as a community we can either moan about changes in the OS breaking software and simply freeze OS development and progress. Or, fix what we can now where source is available, move on from poorly written software or find alternatives and worst case provide compatibility layers for unmaintained essential software. Long term 32bits days are numbered in the ARM world and that’s going to make this change look trivial by comparison if RISCOS is to live on, on future hardware. |
Colin (478) 2433 posts |
I presume that is directed at me as I seem to be the only one advocating a roadmap which mininizes disruption so I’ll reply. I’m pleased that riscos changes makes your program run better but you can’t assume ‘poorly written software’ is worthless. Someone may need to use it and until the compatibility layers are written the old software shouldn’t be broken if it can be avoided which it can at this present moment. As far as I can see is the roadmap forward is break risc os and see who/what is left. It doesn’t matter to me, my self interest is in new stuff – I rarely use other peoples programs – but someone has to voice concern about the way forward instead of just following over the cliff.
That day will see the end of risc os. We can’t even write the new stuff in C never mind convert the old stuff. All the HALs are written in assembler we have a culture of writing arm code. So converting risc os to a different processor – which a 64bit only arm is – will be impossible. |
Steve Fryatt (216) 2103 posts |
The problem I have here is that this claim is based on the idea that reading from zero page is somehow ‘benign’ and can safely be ignored. I’m yet to be convinced. Anything reading from zero page deliberately, in order to get information, is going to break at some stage when the undocumented contents of zero page move around. Such breakages won’t be clean and obvious; they will probably be subtle misbehaviour or hard to diagnose crashes. Jon seems to have the right idea for this with a system like ADFFS, to cleanly emulate the old OS versions on demand. Anything reading from zero page accidentally is broken. How broken remains to be seen, but the only example that I can think of that’s guaranteed to be ‘safe’ is something like
in C (or the equivalent in BASIC, where there’s no lazy evaluation of IF … THEN expressions). Anything that potentially does something more difficult with that NULL pointer, such as
is in to dangerous territory, depending on what FNbar() tries to do with the supplied pointer. As I’ve said before, maybe I write my code more robustly than most RISC OS developers, but so far all the ZeroPain bugs that I’ve found and fixed (one each in CashBook and Locate, IIRC) have been trampling over all sorts of random memory as a result of that one read from zero page. Neither of the bugs were what I’d call benign. I know that the RISC OS world has a touching desire to bury its head in the sand about software that does undefined things on the newer OSs (running with Alignment Exceptions off, anyone?), but remember that we’re talking about breaking already broken software when it runs on an OS build that’s only aimed at developers. |
Steve Pampling (1551) 8155 posts |
The thing is that it isn’t only aimed at developers because there simpy aren’t enough developers testing things deeply enough to find the bugs / shortcomings in the software so there are People reading this that feel they can contribute by testing are doing a useful task when they do. Edit: I’d add that we are not talking about “breaking already broken software” what we are talking about is implementing a feature that allows a new development thread to move forward and exposing the brokenesss of some software in the process. |
Colin (478) 2433 posts |
Suppose you have a program that you must use that reads zero page and now fails to run. Are you saying the fact that the zero page access is now avoided is more important to you than being able to use the program. |
Rick Murray (539) 13806 posts |
A good example here is reading from an uninitialised pointer. Writing would fault, or risk stiffing the machine (in the old days) either immediately or upon a software reset, depending on how much was written. Reading, on the other hand, is “safe”. You don’t trash the machine by reading from address
Ditto. I had the misfortune of storing a bit of data at array offset +236. Read from the base of page zero, that’s Kinda supports my thoughts that the RMA shouldn’t be writeable from user mode code, but all the same, it nicely highlights how an innocuous little error can cause potentially bigger problems all around. To be honest, I’m glad that this is being seen to, because uninitialised pointers are a very real and very frequent problem. They can be noticed on other systems – I believe TurboC in DOS used to abort with a message like “NULL pointer exception”. If you were running in the debug mode, then you’d land right at the problem, simple fix. My concern is for older software that people may wish to continue using that is not going to be further developed. If ROOL release the next stable ROM with ZPP and ZeroPain (without logging) as a user option, then that’ll be fine. It is a giant sticky plaster but given that this problem has been around for a quarter century and both Steve F and myself have admitted to being caught by it ourselves, I don’t see that a giant sticky plaster is necessarily a bad thing. It is going to be a trade-off between enhanced system stability1 and not alienating users who may depend upon older (technically broken) software. 1 I am telling myself that this is going on for potential multicore support in the future; as for basic system stability reasons it doesn’t sound so great given the awful lack of anything resembling sensible memory protection; that coupled with the legacy of the utter mess that is the RMA. There are many other things that arguably need to be fixed first. So I will tell myself “future multicore support, future multicore support” and just thank God2 that finally there is something that will notice and fault if I screw up and use a pointer before pointing it at something. 2 Alternative sky fairies are available. |
Rick Murray (539) 13806 posts |
This is another reason why ZeroPain (in its logging form) should persist. It is already less than easy to translate zero pain to a line of code that is failing – what this entire thread was about. |
Malcolm Hussain-Gambles (1596) 811 posts |
Now I’m excited! Are sky fairies avaliable as part of the !Store sale? |
Rick Murray (539) 13806 posts |
I think Amazon already has that partially covered: http://www.amazon.co.jp/dp/B018HVTR2U Or see that translated into something vaguely resembling English: |
David Feugey (2125) 2709 posts |
Back on Topic again. Is there still a free/distributable reader for the latest versions of Datapower? |
Steve Fryatt (216) 2103 posts |
No, of course not. I’m suggesting that knowing that there’s a problem and, as a developer, being able to investigate and fix the problem is better than not knowing. Having users be able to report problems from all of those use cases that would never have occurred to me is better than not. Remember that we’re still talking about development builds of the OS, not stable ones. As I’ve already said, the use of development builds is consensual. I’m also going to need convincing about your use of ‘being able to use the program’; again, the examples that I’ve found were both very unlikely to have ever worked in any meaningful sense. At best they would have resulted in data being stored over something else in memory. |
Steve Fryatt (216) 2103 posts |
Agreed. I think the use of ZeroPain should remain an option for the long term (which it effectively is, albeit unofficially), as this isn’t a problem that’s going to get fixed overnight. |