Ovation - the fixed one!
Steve Pampling, on the ROOL forums, pointed out something that I hadn't actually thought of:
Now people have a free document processor for the Pi.
That's quite true. Up until now the free word processor has been Fireworkz. It is a reasonable word processor, a bit like all the bits of Word that you might have wanted, without the loads and loads of additional rubbish. Its integration with spreadsheets and charts perhaps making it closer to Works than Word?
However, a word processor is not a document processor. WP is not DTP. There are similarities, until you realise that DTP is aimed at providing a proper publishing solution.
Ovation is a complete desktop publishing package that gave early incarnations of Impression a run for its money, helped up the game on RISC OS, and demonstrated to many lesser platforms how DTP should have worked. I was using Ovation while others were stuck with WordPerfect 5.1. Hell, I was using Ovation before Windows! (it was 3.1 that was the popular birth of Windows, and Ovation was around before that).
But, hey, it is time. Now you can use it too. The links are just down there a ways...
Okay, down to business.
Barely a day passed before the bug reports rolled in. Okay, I lie. There were two issues that people picked up.
The first - I messed up the !OArtWorks !Run file, missing a variable, so Ovation will have started, but not after complaining about ".IfExists" not being found.
The second was quite a bit more interesting. Essentially Ovation was crashing on the Beagle (and possibly other ARMv7 or OMAP hardware?). Anton Reiser did a great job of tracking down where the problem lay and suggesting a fix. I didn't use his fix as I wanted to see why the code wasn't working. The code in question looks to see if the scale factor is 400, and if it is, it calls a special fast division routine, otherwise it does a
this/that style divide.
The routine in question? Just a bunch of MOVs and such. I was expecting a null pointer or something, but no such luck. I read the function twice from top to bottom and couldn't work out why the hell it would throw a Type 5 (memory access fault). That's when I noticed.
MOVS PC, R14
In the old 26 bit world, the
MOVS instruction was a useful way to restore both the PC and the flags (both being held in R14) in one go.
The later ARMs do the same thing - the value of R14 is placed into PC, and CPSR is updated from SPSR. This, obviously, is an "unpredictable" instruction in User mode (which has no SPSR). The actual result of calling
MOVS PC,R14 in User mode on a 32 bit processor is therefore likely to be "implementation defined"; and as such, the Pi coped with it while the OMAP didn't.
Different core + different manufacturer + illegal instruction = Oops.
That said, I couldn't get any joy out of the most recent beta build of RISC OS for the Beagle, so I reverted to an earlier one. I'm still having practically zero joy in getting reliable video out of the Beagle. In the end I gave up wasting time and just hooked up the s-video cable. Here's me, testing Ovation:
And here's my lovely high resolution screen. These are the actual picture dimensions, it is not scaled down:
The text pretty much says all that needs to be said. ☺
Some day I might find, in a vide grenier or somesuch, a monitor or TV with DVI input so I can try hooking up the Beagle directly...
I then tested Ovation performing a simple print job. It worked on my build of RISC OS. On the ZeroPain build, simply loading !Printers spat out ~250K of Pain. Ouch. I continued and tried a print. There was one fault from Ovation, but it was in the module PDumperPS. Given the pile of messages caused by starting the printer driver, I'm just going to assume that Ovation copes, the Printer code, less so.
I didn't try any of the fancy print options as, honestly, I didn't remember how they worked...
Here is the PDF file (4KiB), generated on RISC OS from the document of the above screenshot. Printed using Steve Fryatt's PrintPDF.
As the changes are minor, I have updated the original archives. Here are the links again:
- The application! (341KiB, zip) - unzip it, run it, enjoy it.
(this should be a complete, self contained, version of Ovation; tested on my Pi...)
- The source code! (405KiB, zip) - this is one for the geeks.
(note that this version of the source builds as a DDE application from a MakeFile; it is a bit different to David's original code)
Here's what has changed since yesterday:
2015/11/05 v1.50 *released*
* Version number not bumped as only two minor fixes.
* Would crash with a Type5 on ARMv7. Anton Reiser did the hard work of
tracking down the source of the problem and suggesting a potential fix.
I didn't use his fix as it turned out that the xfastdiv400 code within
s.osasm was returning using MOVS PC, R14. One that didn't get caught in
the 32 bit conversion and had no particularly unpleasant effects until
* Corrected idiotic facepalm fail in tweaking !OArtWorks. I set the app's
variable to be OArtWorks$Dir to match the app name, but forgot to change
the one where the variable was actually used. This is why Ovation may
have started complaining about ".IfExists" not being found. Thank you to
Matthew Harris for pointing this out.
Oh, and don't think I'm being ungrateful about the bug reports. If you want a bug nailed to the wall with extreme prejudice, you'll need to tell me where to find it!
Please note that while I check this page every so often, I am not able to control what users write; therefore I disclaim all liability for unpleasant and/or infringing and/or defamatory material. Undesired content will be removed as soon as it is noticed. By leaving a comment, you agree not to post material that is illegal or in bad taste, and you should be aware that the time and your IP address are both recorded, should it be necessary to find out who you are. Oh, and don't bother trying to inline HTML. I'm not that stupid! ☺
You can now follow comment additions with the comment RSS feed. This is distinct from the b.log RSS feed, so you can subscribe to one or both as you wish.
|David Pilling, 6th November 2015, 18:51|
Was it sunny on the 29th July 1990 - last time I edited osasm - seemingly we knew about the benefits of dividing by 400 back then. MOVS should have gone when it did in dcasm - 2002 Iyonix changes. The rules for 32 bit conversion said get rid of them, but any that were missed had no effect until later ARMs came out. There were another couple of these which came to light a few years back.
List all b.log entries
Return to the site index
PS: Don't try to be clever.
It's a simple substring match.
Last read at 19:20 on 2020/07/15.
© 2015 Rick Murray
This web page is licenced for your personal, private, non-commercial use only. No automated processing by advertising systems is permitted.
RIPA notice: No consent is given for interception of page transmission.