BBC Elite source, now fully documented and explained

reminisce about classic bbc micro and acorn electron games here
Related forum: adventures


User avatar
dominicbeesley
Posts: 2210
Joined: Tue Apr 30, 2013 12:16 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by dominicbeesley »

I've still not fully worked through your stuff yet George but where would the drawing code need to live and how would it such in screen ram?
gfoot
Posts: 987
Joined: Tue Apr 14, 2020 9:05 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by gfoot »

dominicbeesley wrote: Sat Mar 04, 2023 5:45 pm I've still not fully worked through your stuff yet George but where would the drawing code need to live and how would it such in screen ram?
The drawing code would need to be loaded into "normal" memory - i.e. the Beeb's regular memory, just like with the second processor. From there it can see screen memory just like any normal Beeb program. I haven't yet implemented a good way for "shadow" code to write to normal memory so at the moment this is the only way, it is very similar to the second processor in that respect.

It should be possible for it to still operate by intercepting OSWRCH etc, but could probably be done more efficiently by other means.

"Just try it" is an interesting suggestion, I had assumed it would fail rather quickly if I did - but really it depends how it uses the Tube, and thinking about it, the fact that it is just intercepting OS calls on the host side means it might just work. The code may also use 65C02 instructions. I will have to see what happens!
B3_B3_B3
Posts: 404
Joined: Sat Apr 08, 2017 10:42 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by B3_B3_B3 »

gfoot wrote: Sat Mar 04, 2023 7:17 pm....
"Just try it" is an interesting suggestion, I had assumed it would fail rather quickly if I did - but really it depends how it uses the Tube, and thinking about it, the fact that it is just intercepting OS calls on the host side means it might just work. The code may also use 65C02 instructions. I will have to see what happens!
1 I had simply assumed the 2nd processor Elite used proper tube OS Calls to access the fifos, but overlooked the 65c02 opcode possibility...

2 Is there an easy way to search for 65C02 opcodes in second processor using an emulator?

3 A supershadow with switchable 65c02/nmos 6502 cpus... Perhaps the 65co2 should have kept the functionality and behaviour of the stable illegal opcodes, and only reused the unstable and JAM ones?
User avatar
MarkMoxon
Posts: 606
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by MarkMoxon »

B3_B3_B3 wrote: Sat Mar 04, 2023 10:14 pm
gfoot wrote: Sat Mar 04, 2023 7:17 pm....
"Just try it" is an interesting suggestion, I had assumed it would fail rather quickly if I did - but really it depends how it uses the Tube, and thinking about it, the fact that it is just intercepting OS calls on the host side means it might just work. The code may also use 65C02 instructions. I will have to see what happens!
1 I had simply assumed the 2nd processor Elite used proper tube OS Calls to access the fifos, but overlooked the 65c02 opcode possibility...

2 Is there an easy way to search for 65C02 opcodes in second processor using an emulator?
There are 58 65C02 instructions in the 6502SP version of Elite, so not too many. There is at least one example of each of the eight extra instructions, which are pretty easy to track down by simply searching the source file:

https://github.com/markmoxon/6502sp-eli ... source.asm

Searching for this regex as a full-word search will track them down:

BRA|PLX|PLY|PHX|PHY|STZ|TRB|TSB

None of the Rockwell-specific instructions are used, but I'm pretty sure the 65C02-specific addressing modes are used at some point.

If you would find it useful, I could knock out a version of 6502SP Elite that uses 6502 instructions only, so you could try it on your Supershadow? It wouldn't take long, and it would be interesting to see how fast it runs. Just let me know - or, of course, you could fork the repo and do it yourself, though I'm not sure how well documented the encryption scripts are, so apologies in advance if you go down that road!

My gut feeling is that a Supershadow version would run about as fast as the Master version, which is noticeably slower than the 6502 version, but is a better game to play - the 6502SP version is just too fast to be fun, for me anyway. The 6502SP version definitely benefits from the faster processor in the parasite, and concurrency will also be a factor for the Tube-based OSBYTE routines (particularly complex calls like updating the dashboard), though I'm not sure exactly how much impact the concurrency has.

But the code is essentially the same betwen the Master and 6502SP version, it's just split between the host and parasite in the latter, so I'd guess the net effect of running the 6502SP version on the Supershadow wouldn't be a million miles away from the Master version, at least until the number of ships gets too big for the 6502 to handle.

A fascinating experiment!

Mark
gfoot
Posts: 987
Joined: Tue Apr 14, 2020 9:05 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by gfoot »

Thanks Mark, I'll take a look at some point and see if I can build it. My hardware is meant to support the 65C02 now, but I tried that yesterday and it didn't boot, so I have missed something. Oh hmm I just realised what it was! I'll try it again later, there's a resistor I didn't bother soldering in as it's not required for the vanilla 6502!
User avatar
MarkMoxon
Posts: 606
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by MarkMoxon »

gfoot wrote: Sun Mar 05, 2023 2:18 pm Thanks Mark, I'll take a look at some point and see if I can build it. My hardware is meant to support the 65C02 now, but I tried that yesterday and it didn't boot, so I have missed something. Oh hmm I just realised what it was! I'll try it again later, there's a resistor I didn't bother soldering in as it's not required for the vanilla 6502!
Excellent, supporting 65C02 is definitely the way to go! And feel free to shout if you run into issues with the repository. I recently added some notes on updating the checksum scripts, so hopefully it'll be easy to work with if you do need to make any changes.

Mark
gfoot
Posts: 987
Joined: Tue Apr 14, 2020 9:05 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by gfoot »

I tried running the Tube version from STH, and it got as far as displaying the title screen with "ACORNSOFT ELITE", "(C) ACORNSOFT 1984" and the colourful radar, but no background graphics - which is promising in a way! I suspect it is now falling over due to expecting things to happen in parallel - any case where either processor is spinning waiting for the other is not going to work as there's only one processor - so I'll have a look in the code sometime and see what I find.
B3_B3_B3
Posts: 404
Joined: Sat Apr 08, 2017 10:42 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by B3_B3_B3 »

MarkMoxon wrote:.....
This might be of interest
https://6502disassembly.com/a2-elite/

Nb you're famous: it links to bbcelite.com :)
User avatar
MarkMoxon
Posts: 606
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by MarkMoxon »

B3_B3_B3 wrote: Wed Mar 15, 2023 3:17 pm
MarkMoxon wrote:.....
This might be of interest
https://6502disassembly.com/a2-elite/

Nb you're famous: it links to bbcelite.com :)
And I link to him. Small world, Elite disassembly. :-)

https://www.bbcelite.com/about_site/useful_links.html

Mark
AJW
Posts: 984
Joined: Sun Feb 15, 2004 2:01 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by AJW »

How hard would it be to activate the Trumble code in Master Elite?
User avatar
MarkMoxon
Posts: 606
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by MarkMoxon »

AJW wrote: Sat Mar 18, 2023 1:43 pm How hard would it be to activate the Trumble code in Master Elite?
Good question! I looked into this a few weeks ago, and I don't think it would be that hard to implement the core Trumbles mission in Master Elite. In fact, it's already on my to-do list. :-)

There are various aspects to the Commodore 64 Trumbles mission: the mission briefing, the breeding process where the Trumbles eat your cargo and fill up the hold, the part where the Trumbles appear on-screen and block your view, and the solution to the mission.

The on-screen Trumbles use Commodore 64 hardware sprites, so while it's easy to implement this part on the C64, it would be a *lot* harder to add on the Master. Luckily the Apple II version has the Trumble mission and it simply omits the on-screen Trumble aspect, so it is canon to have the mission and consequent breeding problems without the colourful critters appearing on-screen. Edit: I've looked at the code, and it turns out the Apple version doesn't contain the Trumbles mission - it only contains traces of the Trumble breeding code, just like the Master.

Most of the breeding code is already present in the Master version, so that should be easy to resurrect. The mission briefings would be relatively easy to copy over as well, but none of that code exists in the Master version, so it would need the mission logic and text tokens to be backported. Ditto the mission solution, which would not be hard to backport.

Now that I've run through it again, I quite fancy giving it a go!

Mark
Last edited by MarkMoxon on Sun Mar 19, 2023 12:30 pm, edited 1 time in total.
AJW
Posts: 984
Joined: Sun Feb 15, 2004 2:01 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by AJW »

I couldn't belive my eyes when I read it earlier. I always thought it was a missed opportunity to some extent but then to find out the code was there all along...
JC229
Posts: 76
Joined: Thu Mar 24, 2022 3:17 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by JC229 »

MarkMoxon wrote: Sat Feb 25, 2023 12:41 pmIn the middle of this routine you can see a random number check that produces a mis-jump around 1% of the time, in which case the code jumps to MJP to show a second hyperspace tunnel and process a mis-jump into witchspace:
Does this mean that around 1% of people would find themselves ambushed in witchspace on their very first jump as soon as they started the game? Or is there some reason that it can't happen until you've been playing for a while? Feels like it would be quite a harsh introduction, and 1% would still be quite a few people - does anybody recall this happening to them as soon as they started the game?
User avatar
MarkMoxon
Posts: 606
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by MarkMoxon »

JC229 wrote: Tue Mar 21, 2023 10:10 am
MarkMoxon wrote: Sat Feb 25, 2023 12:41 pmIn the middle of this routine you can see a random number check that produces a mis-jump around 1% of the time, in which case the code jumps to MJP to show a second hyperspace tunnel and process a mis-jump into witchspace:
Does this mean that around 1% of people would find themselves ambushed in witchspace on their very first jump as soon as they started the game?
Yes, this is correct - there is no exception, so this could indeed happen on people's very first jump. The exact probability is that 0.78% of jumps will mis-jump, but that's still quite a few players.

The logic is just after ee5, here:

https://www.bbcelite.com/cassette/main/ ... /tt18.html

It applies equally to everyone, including those on their first hyperspace. A real baptism by fire!

Mark
User avatar
trixster
Posts: 1173
Joined: Wed May 06, 2015 12:45 pm
Location: York
Contact:

Re: BBC Elite source, now fully documented and explained

Post by trixster »

Is there enough space to insert a mystery ship like a Generation Ship? It would be fun to know that there’s a few ‘out there’ somewhere that you have a (slim) chance of stumbling across.
JC229
Posts: 76
Joined: Thu Mar 24, 2022 3:17 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by JC229 »

MarkMoxon wrote: Tue Mar 21, 2023 10:26 amIt applies equally to everyone, including those on their first hyperspace. A real baptism by fire!
Thanks for the answer.

I just repeatedly booted the disk, started a new game, and hyperspaced to Diso. Mis-jump on the 25th such attempt! Ouch, would love to know what somebody made of the game doing that to them on their first play!
User avatar
MarkMoxon
Posts: 606
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by MarkMoxon »

trixster wrote: Tue Mar 21, 2023 12:16 pm Is there enough space to insert a mystery ship like a Generation Ship? It would be fun to know that there’s a few ‘out there’ somewhere that you have a (slim) chance of stumbling across.
This is exactly what Angus Duggan did with Elite-A. This is the updated ship list - he added brand new ships from 29 to 37:

https://www.bbcelite.com/elite-a/parasi ... _list.html

I think the Dragon is as big as the coordinate system allows. Angus told me that he was a bit disappointed that he couldn't add a genuinely huge generation ship design, due to limits on the coordinate system.

The Dragon is rare and only appears in later galaxies, so I guess this is as close as we can get!

Mark
gfoot
Posts: 987
Joined: Tue Apr 14, 2020 9:05 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by gfoot »

JC229 wrote: Tue Mar 21, 2023 12:17 pm I just repeatedly booted the disk, started a new game, and hyperspaced to Diso. Mis-jump on the 25th such attempt! Ouch, would love to know what somebody made of the game doing that to them on their first play!
In those days games were much more ruthless in general, so people were pretty used to getting killed quite quickly on their first go - so I suspect they'd just put it down to unfamiliarity and have another go. It's more of a problem when you're quite invested in your progress, and don't have a savegame to reload!
JC229
Posts: 76
Joined: Thu Mar 24, 2022 3:17 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by JC229 »

gfoot wrote: Tue Mar 21, 2023 1:37 pm In those days games were much more ruthless in general, so people were pretty used to getting killed quite quickly on their first go - so I suspect they'd just put it down to unfamiliarity and have another go. It's more of a problem when you're quite invested in your progress, and don't have a savegame to reload!
Very good point! Actually, that might be an interesting thread - which games killed you the quickest on first plays...
AJW
Posts: 984
Joined: Sun Feb 15, 2004 2:01 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by AJW »

MarkMoxon wrote: Tue Mar 21, 2023 12:39 pm
trixster wrote: Tue Mar 21, 2023 12:16 pm Is there enough space to insert a mystery ship like a Generation Ship? It would be fun to know that there’s a few ‘out there’ somewhere that you have a (slim) chance of stumbling across.
This is exactly what Angus Duggan did with Elite-A. This is the updated ship list - he added brand new ships from 29 to 37:

https://www.bbcelite.com/elite-a/parasi ... _list.html

I think the Dragon is as big as the coordinate system allows. Angus told me that he was a bit disappointed that he couldn't add a genuinely huge generation ship design, due to limits on the coordinate system.

The Dragon is rare and only appears in later galaxies, so I guess this is as close as we can get!

Mark
Is that what Elite does too- some ships only in higher galaxies?

I always imagined the generation ships to be mobile space stations and the space dredgers to be concatenated strings of ships.
User avatar
MarkMoxon
Posts: 606
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by MarkMoxon »

AJW wrote: Wed Mar 22, 2023 9:49 am Is that what Elite does too- some ships only in higher galaxies?
The only restriction on ship spawning is the Constrictor, which is only ever shown when completing mission 1 (and that only happens in a specific system in the first galaxy). Outside of this, ships are spawned according to the logic in parts 1 to 4 of the main game loop:

https://www.bbcelite.com/disc/flight/su ... _of_6.html

In the disc version, only ships in the loaded ship file are available for spawning. Ship files are loaded according to the system's tech level and government, with a dose of randomness. Details here:

https://www.bbcelite.com/deep_dives/shi ... rsion.html

In other versions there are no ship files and all ships are present in memory, so this logic isn't needed. Elite-A has its own unique set of ship files, and different loading logic, which is where the logic lives to ensure certain ships only get loaded in higher galaxies. Details here:

https://www.bbcelite.com/deep_dives/eli ... rints.html
AJW wrote: Wed Mar 22, 2023 9:49 am I always imagined the generation ships to be mobile space stations and the space dredgers to be concatenated strings of ships.
Interesting. I always imagined generation ships to be huge, but basically Python- or Anaconda-shaped. No idea why!

Mark
User avatar
haerfest
Posts: 37
Joined: Fri Dec 17, 2021 10:28 am
Location: Assen, NL
Contact:

Re: BBC Elite source, now fully documented and explained

Post by haerfest »

Not sure if this is the right place, but I might have a small correction to the commentary of the Electron version.

For reasons I was studying the .IRQ1 routine:

Code: Select all

\ ******************************************************************************
\
\       Name: IRQ1
\       Type: Subroutine
\   Category: Utility routines
\    Summary: The main interrupt handler (IRQ1V points here)
\
\ ******************************************************************************

.IRQ1

 LDA S%+6               \ Flip all the bits in S%+6 so it toggled between 0 and
 EOR #%11111111         \ &FF on each call to this routine (though S%+6 is
 STA S%+6               \ never read, so this doesn't seem to have any effect)

 ORA KEYB               \ If we are currently reading from the keyboard with an
 BMI jvec               \ OS command (OSWORD or OSRDCH) then KEYB will be &FF
                        \ rather than 0, so this jumps to jvec if we are already
                        \ reading the keyboard with an OS command

 LDA VIA+&05            \ If we get here then we are not already reading the
 ORA #%00100000         \ keyboard using an OS command, so set bit 5 of the
 STA VIA+&05            \ interrupt clear and paging register at SHEILA &05 to
                        \ clear the RTC interrupt

 LDA &FC                \ Restore the value of A from before the call to the
                        \ interrupt handler (the MOS stores the value of A in
                        \ location &FC before calling the interrupt handler)

 RTI                    \ Return from interrupts, so this interrupt is not
                        \ passed on to the next interrupt handler, but instead
                        \ the interrupt terminates here

.jvec

 JMP (S%+2)             \ Jump to the original value of IRQ1V to process the
                        \ interrupt as normal
I think toggling S%+6 between 0 and &FF does have an effect, right here :D

After the EOR, the toggled value is now in A. When this is &FF, the ORA KEYB instruction has no effect -- all bits are already set -- and the BMI jvec is taken to the original IRQ1V.

You can see further down that if the BMI is not taken, Elite specifically clears only the 50 Hz RTC interrupt. On an unexpanded Electron the only other regularly occurring IRQ is the 50 Hz screen interrupt.

In effect, on an IRQ:
  • Reading from keyboard? Jump to IRQ1V via ORA.
  • 50 Hz screen interrupt? Jump to IRQ1V via EOR.
  • Otherwise a 50 Hz RTC interrupt: don't service.
Perhaps this was done to speed the Electron up a little.
User avatar
MarkMoxon
Posts: 606
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by MarkMoxon »

haerfest wrote: Fri Oct 13, 2023 3:12 pm Not sure if this is the right place, but I might have a small correction to the commentary of the Electron version.
Thank you. And well spotted - I totally missed the effect of A on the ORA, but your analysis makes much more sense!

I'll update the commentary this weekend. Good catch! =D>

Mark
User avatar
haerfest
Posts: 37
Joined: Fri Dec 17, 2021 10:28 am
Location: Assen, NL
Contact:

Re: BBC Elite source, now fully documented and explained

Post by haerfest »

I spent some more time pondering over this code.

I was wondering how the authors knew that every other IRQ (they one they don't service) would be the RTC interrupt. There's a 50/50 chance it could be the screen interrupt, since I don't see them synchronising the contents of S%+6 to either.

Then I just read somewhere that SHEILA &FE05 is a write-only register. Reading it always returns &FF.

So this bit of the code doesn't do exactly what it suggests it does:

Code: Select all

 LDA VIA+&05            \ If we get here then we are not already reading the
 ORA #%00100000         \ keyboard using an OS command, so set bit 5 of the
 STA VIA+&05            \ interrupt clear and paging register at SHEILA &05 to
                        \ clear the RTC interrupt
The LDA VIA+&05 always returns &FF, so the ORA again has no effect. The subsequent STA always ends up writing &FF, clearing all pending IRQs (via the high nibble). Which is why it doesn't matter which IRQ exactly it is dealing with here.

(The low nibble &0F ends up paging the keyboard out, which the loader had paged in, but this seems irrelevant to Elite.)

This look to me like one of those cases where code is logically incorrect, but it works, so we're not touching it anymore :lol:
User avatar
MarkMoxon
Posts: 606
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by MarkMoxon »

haerfest wrote: Fri Oct 13, 2023 8:03 pm I spent some more time pondering over this code.
...
Then I just read somewhere that SHEILA &FE05 is a write-only register. Reading it always returns &FF.
Brilliant! That's a great insight. I'd never have spotted that.

I've now updated the IRQ1 documentation with both of your corrections, and I've added a credit to the acknowledgements page. (Do let me know if you'd like your credit to be to a different name.)

Thanks so much for pointing this out - it's really transformed that routine's analysis. =D>

Mark
RichP
Posts: 124
Joined: Tue Jan 24, 2012 4:07 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by RichP »

This is great work. I will study this to learn fast ways to do 3D graphics. I'm sure there must be lots of optimisations.

From what I've heard you can't find the Generation ships in the Elite code - because they are made up using different parts from all the ship data. Their behaviour and logic is done the same way. A very clever way to save space.
User avatar
MarkMoxon
Posts: 606
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by MarkMoxon »

RichP wrote: Wed Dec 27, 2023 11:48 pm From what I've heard you can't find the Generation ships in the Elite code - because they are made up using different parts from all the ship data. Their behaviour and logic is done the same way. A very clever way to save space.
This doesn't match with the codebase, sadly. There is a small amount of ship data sharing between ship types - for example, Thargons reuse the edge data from cargo canisters - but there are no ships that are made up of different parts of ship data, and there are no generation ships in the game, full stop. They all use the same ship blueprint structure, as described here:

https://www.bbcelite.com/deep_dives/shi ... rints.html

Angus Duggan tried to add generation ships to Elite-A, but the ship wireframe coordinates simply don't allow ships that large (coordinates are stored as single byte magnitudes with a separate sign bit, so the maximum coordinate range in each axis is -255 to +255). The biggest ship he managed to squeeze in is the Dragon:

https://www.bbcelite.com/elite-a/parasi ... ragon.html

That doesn't stop people from swearing that they absolutely definitely came across generation ships in the original Elite. Memory is a funny thing...

Mark
RichP
Posts: 124
Joined: Tue Jan 24, 2012 4:07 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by RichP »

Ah well they probably didn't analyze the version of Elite that had them :)

I did not know that about the reuse of edge data - very clever!

Can they add the bigger ships by joining lots of smaller ones together?
MarkMoxon wrote: Thu Dec 28, 2023 1:46 pmThat doesn't stop people from swearing that they absolutely definitely came across generation ships in the original Elite. Memory is a funny thing...
Yes I used to read the monthly Elite column in maybe Micro User magazine (or the other one) and people would always write in saying they had seen this particular weird ship at this particular planet. And yes a couple who saw Generation ships (probably Acornsoft employees!)

There was a game on the Amiga called Jetstrike and the coders made it so that *incredibly rarely* if you were flying your jetplane at a particular height - a UFO would fly into you and say sorry. Then the next time you played you could then play as the UFO. They made it that rare on purpose so that no one would believe anyone it happened to.

And exactly this did happen! A guy wrote into a magazine telling them about it and they brutally mocked him. Asking him if he thought they were idiots:)

This is obviously the case with Generation ships - just very very rare and encrypted in the code ;)
User avatar
MarkMoxon
Posts: 606
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: BBC Elite source, now fully documented and explained

Post by MarkMoxon »

RichP wrote: Sat Jan 13, 2024 5:54 pm Can they add the bigger ships by joining lots of smaller ones together?
Not without modifying the graphics engine. Even if you could build routines to keep multiple ships together in the right positions in space (not easy!), you would be able to see through the individual ships, so you'd effectively be able to see inside the “larger ship”, which would not look great.

There are no supermassive ships in Acornsoft Elite, not even ones that are made up of little ships doing the Conga.
RichP wrote: Sat Jan 13, 2024 5:54 pm This is obviously the case with Generation ships - just very very rare and encrypted in the code ;)
And cloaked in a powerful invisibility field too, it seems. ;-)

Mark
Post Reply

Return to “8-bit acorn software: classic games”