Disassemblies of BBC Micro Games

bbc micro/electron/atom/risc os coding queries and routines
User avatar
billcarr2005
Posts: 1753
Joined: Fri Sep 09, 2005 4:01 pm
Location: UK
Contact:

Re: Disassemblies of BBC Micro Games

Post by billcarr2005 »

REVS.png
gfoot
Posts: 473
Joined: Tue Apr 14, 2020 9:05 pm
Contact:

Re: Disassemblies of BBC Micro Games

Post by gfoot »

Just to confirm then, all four Acornsoft Revs HFE images in scarybeast's spreadsheet (at least my copy of it, not sure if it's up-to-date) behave exactly the same once you're through the initial loading screen - the embedded revs1, revs2, and silver files are identical, even being stored at the exact same sectors on the discs. The significant differences seem to be only in the initial "REVS" BASIC loader, which has a guard against PAGE being less than &1000, and in the second stage loader that the outer "REVS1" loads from raw sectors on disc - which is mostly responsible for setting up access to the embedded catalog. An interesting feature of that loader is that it has support for double-stepping to allow use of the 40 track disc in an 80 track drive.

I also verified that the CRC of revs2 in these four variants corresponded to the one billcarr posted earlier (E22A0A93).

The Acornsoft Revs4 disc in scarybeast's sheet also appears to only contain the new tracks and loader code, with no main executable - when you run it, it prompts you to insert the original disc after selecting a track, so it can load the main game from that. So it does look like the CAS feature and the bundling of all five tracks together were all introduced at once in the Superior re-release.
User avatar
MarkMoxon
Posts: 300
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: Disassemblies of BBC Micro Games

Post by MarkMoxon »

gfoot wrote:
Fri Feb 18, 2022 12:51 am
Just to confirm then, all four Acornsoft Revs HFE images in scarybeast's spreadsheet (at least my copy of it, not sure if it's up-to-date) behave exactly the same once you're through the initial loading screen - the embedded revs1, revs2, and silver files are identical, even being stored at the exact same sectors on the discs.
Great! Thanks for confirming that, it’s good to know there are still only two variants out there (that we know about, anyway). You never know until you’ve checked!

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

Re: Disassemblies of BBC Micro Games

Post by gfoot »

TobyLobster wrote:
Sun Aug 08, 2021 9:05 pm
Diminished suggested there should be a list of published Beeb game disassemblies. Here's a list of all the ones I know about (including my own). Some can be reassembled too. Any more?
I did most of a disassembly of Wizzy's Mansion at the weekend, but haven't uploaded it anywhere yet. I've also started a disassembly of Inertia, which seems to be a very interesting and well-written game - so far I've mostly done the initialization, scoring, and input logic, and made an infinite-lives cheat of course.
User avatar
TobyLobster
Posts: 359
Joined: Sat Aug 31, 2019 7:58 am
Contact:

Re: Disassemblies of BBC Micro Games

Post by TobyLobster »

gfoot wrote:
Mon Apr 04, 2022 12:13 pm
I did most of a disassembly of Wizzy's Mansion at the weekend, but haven't uploaded it anywhere yet. I've also started a disassembly of Inertia, which seems to be a very interesting and well-written game - so far I've mostly done the initialization, scoring, and input logic, and made an infinite-lives cheat of course.
Thanks - I've added these two to the 'work in progress' section. Let us know when you upload a version and I'll add links.

For anyone who hasn't seen the full list recently, take a look at the initial post of this thread. I've been updating it with any new or existing disassemblies I find, so the list has grown quite a bit since it started.
User avatar
tricky
Posts: 6494
Joined: Tue Jun 21, 2011 9:25 am
Contact:

Re: Disassemblies of BBC Micro Games

Post by tricky »

You could also add Jeltron, although it isn't finished if you like.
On waybackmachine http://www.retrosoftware.co.uk/wiki/ind ... le=Jeltron until RS is back.
User avatar
TobyLobster
Posts: 359
Joined: Sat Aug 31, 2019 7:58 am
Contact:

Re: Disassemblies of BBC Micro Games

Post by TobyLobster »

tricky wrote:
Mon Apr 11, 2022 12:20 pm
You could also add Jeltron
Thanks, done.
User avatar
fizgog
Posts: 243
Joined: Thu Jun 17, 2021 3:18 pm
Location: Nottinghamshire
Contact:

Re: Disassemblies of BBC Micro Games

Post by fizgog »

I also made a start on Attack on Alpha Centauri around the same time as Zany Kong (which has recently been updated), in case anyone else was going to work on it

https://github.com/fizgog/Attack-On-Alp ... isassembly
Gridrunner, Matrix: Gridrunner 2, AcornViewer, AcornPad
User avatar
TobyLobster
Posts: 359
Joined: Sat Aug 31, 2019 7:58 am
Contact:

Re: Disassemblies of BBC Micro Games

Post by TobyLobster »

fizgog wrote:
Mon Apr 11, 2022 5:36 pm
I also made a start on Attack on Alpha Centauri
Added, thanks.
User avatar
lovebug
Posts: 1219
Joined: Sun Jan 31, 2021 5:07 pm
Location: Magrathea
Contact:

Re: Disassemblies of BBC Micro Games

Post by lovebug »

I've always wanted a disassemby of revs because I really want to make a track designer for it and hope that the game engine allows for extremely angled roads and roller coaster type designs for some crazy action :D
Image Image Image Image
User avatar
MarkMoxon
Posts: 300
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: Disassemblies of BBC Micro Games

Post by MarkMoxon »

lovebug wrote:
Mon Apr 11, 2022 11:35 pm
I've always wanted a disassemby of revs because I really want to make a track designer for it and hope that the game engine allows for extremely angled roads and roller coaster type designs for some crazy action :D
I’ve almost finished documenting the format of the Silverstone track file, so once that’s done, creating new tracks (and writing a track editor) should be pretty doable. I’ve also got the Nurburgring track from the C64 loading, but the track buckles at one point, so I’ve got something wrong! Getting there, though. See this Tweet for the latest progress on Silverstone:

https://twitter.com/markmoxon/status/15 ... 2941761538

Not sure how much variation in track height is possible, but we’ll have to see…

Mark
User avatar
lovebug
Posts: 1219
Joined: Sun Jan 31, 2021 5:07 pm
Location: Magrathea
Contact:

Re: Disassemblies of BBC Micro Games

Post by lovebug »

MarkMoxon wrote:
Mon Apr 11, 2022 11:59 pm
lovebug wrote:
Mon Apr 11, 2022 11:35 pm
I've always wanted a disassemby of revs because I really want to make a track designer for it and hope that the game engine allows for extremely angled roads and roller coaster type designs for some crazy action :D
I’ve almost finished documenting the format of the Silverstone track file, so once that’s done, creating new tracks (and writing a track editor) should be pretty doable. I’ve also got the Nurburgring track from the C64 loading, but the track buckles at one point, so I’ve got something wrong! Getting there, though. See this Tweet for the latest progress on Silverstone:

https://twitter.com/markmoxon/status/15 ... 2941761538

Not sure how much variation in track height is possible, but we’ll have to see…

Mark
amazing =D> =D> =D> =D> =D> =D>
Image Image Image Image
User avatar
tautology
Posts: 465
Joined: Wed Sep 01, 2010 3:26 pm
Contact:

Re: Disassemblies of BBC Micro Games

Post by tautology »

For works in progress, I have a 80% complete annotated disassembly version of Island of Xaan at https://github.com/tautology0/textadven ... obico/xaan

I wrote some words about it as well: https://tautology.org.uk/blog/2017/11/

My intention was to reimplement it in Python natively, but, well, time.
User avatar
TobyLobster
Posts: 359
Joined: Sat Aug 31, 2019 7:58 am
Contact:

Re: Disassemblies of BBC Micro Games

Post by TobyLobster »

tautology wrote:
Thu May 19, 2022 4:08 pm
...Island of Xaan...
Thanks, added.
User avatar
MarkMoxon
Posts: 300
Joined: Thu Jul 18, 2019 4:38 pm
Contact:

Re: Disassemblies of BBC Micro Games

Post by MarkMoxon »

Might be worth adding a link to my Revs website too, now that it’s released?

https://revs.bbcelite.com/

It’s a bit easier to follow than the git repository. :D

Mark
User avatar
TobyLobster
Posts: 359
Joined: Sat Aug 31, 2019 7:58 am
Contact:

Re: Disassemblies of BBC Micro Games

Post by TobyLobster »

MarkMoxon wrote:
Wed Jun 15, 2022 10:16 pm
Might be worth adding a link to my Revs website too, now that it’s released?
Thanks, added.
User avatar
Diminished
Posts: 877
Joined: Fri Dec 08, 2017 9:47 pm
Contact:

Re: Disassemblies of BBC Micro Games

Post by Diminished »

TobyLobster wrote:
Sat Jul 02, 2022 2:04 pm
I've added a new Castle Quest disassembly from level7:

http://www.level7.org.uk/miscellany/cas ... sembly.txt
I've now deleted my post with the start I made on Castle Quest, so you should probably remove that note from the list. I'm now glad I didn't waste any more time on it.

I notice level7 has also now added Bonecruncher.
User avatar
TobyLobster
Posts: 359
Joined: Sat Aug 31, 2019 7:58 am
Contact:

Re: Disassemblies of BBC Micro Games

Post by TobyLobster »

Diminished wrote:
Tue Aug 02, 2022 8:44 pm
I've now deleted my post with the start I made on Castle Quest, so you should probably remove that note from the list. I'm now glad I didn't waste any more time on it.
Removed.
Diminished wrote:
Tue Aug 02, 2022 8:44 pm
I notice level7 has also now added Bonecruncher.
Thanks, added.
User avatar
maniacminer
Posts: 167
Joined: Thu Sep 21, 2017 2:59 am
Contact:

Re: Disassemblies of BBC Micro Games

Post by maniacminer »

I got about 40% through disassembling Hopper and noticed it wasn't a game as such, but some kind of weird game builder running a program from within it like a virtual machine. Has anyone had a look at it? I don't have the time to go through it now, maybe around Xmas.
User avatar
Rich Talbot-Watkins
Posts: 1879
Joined: Thu Jan 13, 2005 5:20 pm
Location: Palma, Mallorca
Contact:

Re: Disassemblies of BBC Micro Games

Post by Rich Talbot-Watkins »

I think you should definitely continue if you can!

What you're talking about is a "program generator" called GOAL (Graphics Oriented Arcade Language) which was written by Neil Raine and which was mentioned in this thread. It was apparently a top secret project within Acornsoft which was never publicly released, or even alluded to, and we only know of two games which used it: Hopper and an unreleased Neil Raine game called Bandit.

Pausing Hopper in an emulator and looking at the code being executed, it looks like it has some kind of bytecode interpreter - it would be fascinating to see the capabilities and features of that bytecode!

There are also artefacts of GOAL lying around in the Bandit executable, e.g. we can see this fragment of BASIC which I guess we can speculate might have been from some kind of sprite editor?

Code: Select all

    0REM S.DESIGN
  100REM /// Shape designer for the GOAL system ///
  200 
  300page%=PAGE:PAGE=&1C00:IFpage%<>PAGE CHAIN$(page%+5)
  400mode%=2:d=8:p=2
  500VDU23,224,0,&3C,&42,&42,&42,&42,&3C,0
  600HIMEM=&2E00:names=HIMEM:ss=10
  700Sdata=&1100:maxshape=&1C00:s=48
  800shapelo=Sdata+&10:shapehi=shapelo+s:shdata=shapehi+s:I%=FNnew
  900bx=72:by=15:buff%=&3000+8*bx+&280*by
 1000bx%=d*p*bx:by%=1020-32*by:BX%=1:BY%=2
 1100*FX226,148
 1200 
 1300ONERRORGOTO1600
 1400PROCmenu:END
 1500 
 1600PROCon:REPORT:PRINT" at line ";ERL:END
 1700 
 1800DEFPROCon
 1900*FX225,1
 2000*FX4,0
 2100VDU23;10,&72,0;0;0;28,0,24,39,23:ENDPROC
 2200 
 2300DEFPROCoff
 2400*FX225,140
 2500*FX4,1
 2600VDU23;10,&20,0;0;0;26:ENDPROC
 2700 
 2800DEFPROCmenu
 2900exit%=FALSE
 3000REPEATG%=GET:PROCon:VDU12
 3100IFG%>=140ANDG%<=149THENexit%=EVAL("FN"+FNoption(G%-140)):GOTO3400
 3200IFG%>=&88THENN%=N%+(G%=136)-(G%=137)+3*(G%=139)-3*(G%=138)
 3300N%=(N%+s-1)MODs+1:IFN%=s THEN3200ELSEPROCc
It's an interesting concept, and potentially a great way of squeezing more complicated game logic into a tight memory footprint, but the little we know about it suggests that it was incredibly difficult to use! Magic Mushrooms, a later Neil Raine game, doesn't appear to use it.
User avatar
Rich Talbot-Watkins
Posts: 1879
Joined: Thu Jan 13, 2005 5:20 pm
Location: Palma, Mallorca
Contact:

Re: Disassemblies of BBC Micro Games

Post by Rich Talbot-Watkins »

If anyone has any time, it'd be interesting to investigate one of the original Acornsoft disk releases of Hopper, to see if there is any GOAL source code on any of the unused sectors. Unlikely, if the disc is generated by a mastering program, but you never know.
User avatar
Diminished
Posts: 877
Joined: Fri Dec 08, 2017 9:47 pm
Contact:

Re: Disassemblies of BBC Micro Games

Post by Diminished »

Rich Talbot-Watkins wrote:
Wed Aug 10, 2022 9:21 pm
If anyone has any time, it'd be interesting to investigate one of the original Acornsoft disk releases of Hopper, to see if there is any GOAL source code on any of the unused sectors. Unlikely, if the disc is generated by a mastering program, but you never know.
The planets have aligned. The Snapper source code disc that just turned up seems to contain the following, in the file DESIGN. It may look ... strangely familiar.

Code: Select all

   0REM DESIGN
  100REM /// Shape designer for the GOAL system ///
  200 
  300page%=PAGE:PAGE=&1C00:IFpage%<>PAGE CHAIN$(page%+5)
  400mode%=2:d=8:p=2
  500VDU23,224,0,&3C,&42,&42,&42,&42,&3C,0
  600HIMEM=&2E00:names=HIMEM:ss=10
  700Sdata=&1100:maxshape=&1C00:s=48
  800shapelo=Sdata+&10:shapehi=shapelo+s:shdata=shapehi+s:I%=FNnew
  900bx=72:by=15:buff%=&3000+8*bx+&280*by
 1000bx%=d*p*bx:by%=1020-32*by:BX%=1:BY%=2
 1100*FX226,148
 1200 
 1300ONERRORGOTO1600
 1400PROCmenu:END
 1500 
 1600PROCon:REPORT:PRINT" at line ";ERL:END
 1700 
 1800DEFPROCon
 1900*FX225,1
 2000*FX4,0
 2100VDU23;10,&72,0;0;0;28,0,24,39,23:ENDPROC
 2200 
 2300DEFPROCoff
 2400*FX225,140
 2500*FX4,1
 2600VDU23;10,&20,0;0;0;26:ENDPROC
 2700 
 2800DEFPROCmenu
 2900exit%=FALSE
 3000REPEATG%=GET:PROCon:VDU12
 3100IFG%>=140ANDG%<=149THENexit%=EVAL("FN"+FNoption(G%-140)):GOTO3400
 3200IFG%>=&88THENN%=N%+(G%=136)-(G%=137)+3*(G%=139)-3*(G%=138)
 3300N%=(N%+s-1)MODs+1:IFN%=s THEN3200ELSEPROCcursor
 3400PROCoff:UNTILexit%:ENDPROC
 3500 
 3600DEFFNoption(I%)LOCALJ%,A$
 3700RESTORE3800:FORJ%=0TOI%:READA$:NEXT:=A$
 3800DATA new,old,load,save,nowt,edit,nowt,nowt,rename
 3900 
 4000DEFFNold PRINT"Sorry mush - can't do that":=FALSE
 4100DEFFNnew
 4200S%=shdata:FORI%=0TOs-1:shapelo?I%=S%:shapehi?I%=S%DIV256
 4300!S%=&101:S%=S%+3:NEXT:N%=1:Sdata!2=S%
 4400FORI%=0TOss*(s-1)STEPss:names?I%=13:NEXT
 4500PROCrestart:=FALSE
 4600DEFPROCrestart PROCmode(7):PROChelp:PROCdispnames:ENDPROC
 4700 
 4800DEFFNload
 4900*L.X.shapes 1100
 5000*L.X.names 2E00
 5100top=Sdata!2 AND&FFFC:PROCrestart:=FALSE
 5200DEFFNsave
 5300INPUT"Save ? "A$:IFA$<>"Y"THEN=FALSE
 5400*S.X.shapes 1100 1C00
 5500*S.X.names 2E00 3000
 5600=FALSE
 5700DEFFNnowt:PRINT"Not implemented":=FALSE
 5800DEFFNedit PROCdesign:PROCrestart:=FALSE
 5900DEFFNrename
 6000INPUT"Name = "A$:IFLENA$>=ss THENPRINT"Too long":GOTO6000
 6100$(names+ss*N%)=A$:PROCoff:PROCpname(N%):=FALSE
 6200 
 6300DEFPROChelp PROCoff
 6400FORI%=0TO1:VDU31,0,I%,&81,&9D,&83,&8D
 6500PRINT"       GOAL shape designer":NEXT
 6600FORI%=0TO8:PRINTTAB(1+13*(I%DIV3),2+I%MOD3)"f";I%" "FNoption(I%);:NEXT
 6700ENDPROC
 6800 
 6900DEFPROCdispnames
 7000PROCoff:@%=3:FORI%=1TOs-1:PROCptab(I%):PRINTI%;
 7100PROCpname(I%):NEXT:PROCcursor:ENDPROC
 7200 
 7300DEFPROCcursor LOCALI%,J%:PROCoff
 7400IFNN%=N%ENDPROC ELSEIFNN%THENPROCptab(NN%):PRINTNN%;
 7500NN%=N%:PROCptab(N%):PRINTTAB(POS+13,VPOS)CHR$&9C;
 7600PROCptab(N%):VDU&84,&9D,&87:ENDPROC
 7700 
 7800DEFPROCptab(I%)
 7900PRINTTAB((I%-1)MOD3*13,6+(I%-1)DIV3);:ENDPROC
 8000 
 8100DEFPROCpname(I%)
 8200PROCptab(I%):VDU9,9,9,32
 8300PRINTLEFT$($(names+ss*I%)+STRING$(9," "),9);:ENDPROC
 8400 
 8500DEFPROCdesign PROCmode(mode%):PROCoff
 8600PROCgetbuf(N%)
 8700PRINTTAB(0,0);N%". "$(names+ss*N%):PROCborder(7)
 8800FORI%=0TOXS-1:FORJ%=0TOYS-1
 8900PROCsq(I%,J%,POINT(bx%+I%*d,by%-J%*4)):NEXT,
 9000CX%=0:CY%=0:PROCcuron:REPEATG%=GET
 9100IFG%>=140THENPROCsq(CX%,CY%,G%-140):PLOT69,bx%+CX%*d,by%-CY%*4:PROCcuron:GOTO9600
 9200IFG%<&88THEN9600
 9300IFINKEY-1 THENPROCchsize:GOTO9600
 9400PROCcuroff:CX%=CX%+(G%=136)-(G%=137):CY%=CY%-(G%=138)+(G%=139)
 9500CX%=(CX%+XS)MODXS:CY%=(CY%+YS)MODYS:PROCcuron
 9600IFG%=ASC"Q"UNTILTRUE:ENDPROC
 9700UNTILG%=13:PROCputbuf(N%)
 9800ENDPROC
 9900 
10000DEFPROCchsize
10100x=XS+p*((G%=136)-(G%=137)):y=YS-(G%=138)+(G%=139)
10200IFx>CX%IFx<=128/d IFy>CY%IFy<29 ELSEENDPROC
10300PROCborder(0):XS=x:YS=y:COLOUR128
10400IFG%=136THENPRINTTAB(BX%+x,BY%)STRING$(y,"  "+CHR$10+CHR$8+CHR$8)
10500IFG%=139THENPRINTTAB(BX%,BY%+y)SPC(x)
10600GCOL0,0:MOVEbx%,by%-4*y:PLOT1,d*x,0:PLOT1,0,4*y:PLOT1,d,0:PLOT1,0,-4*y
10700PROCborder(7):ENDPROC
10800 
10900DEFPROCborder(C%)LOCALx,y:GCOL0,C%:x=8*d*XS+3*d:y=32*YS+12
11000MOVE8*d*BX%-2*d,1028-32*BY%:PLOT1,x,0:PLOT1,0,-y:PLOT1,-x,0:PLOT1,0,y
11100ENDPROC
11200 
11300DEFPROCsq(X%,Y%,C%)
11400VDU31,BX%+X%,BY%+Y%,17,128+C%,32:GCOL0,C%
11500ENDPROC
11600 
11700DEFPROCcuron
11800C%=POINT(bx%+d*CX%,by%-4*CY%):COLOUR128+C%:COLOURC%EOR7
11900VDU31,BX%+CX%,BY%+CY%,224:ENDPROC
12000 
12100DEFPROCcuroff
12200COLOUR128+POINT(bx%+d*CX%,by%-4*CY%)
12300VDU31,BX%+CX%,BY%+CY%,32:ENDPROC
12400 
12500DEFPROCgetbuf(N%)
12600S%=shapelo?N%+256*shapehi?N%:XS=p*?S%:YS=S%?1
12700FORI%=0TOXS*YS DIVp-1:IFI%MODYS=0THENJ%=buff%+I%DIVYS*8
12800?J%=S%?(I%+2):J%=J%+1:IF(J%AND7)=0THENJ%=J%+&278
12900NEXT:ENDPROC
13000 
13100DEFPROCputbuf(N%)
13200S%=shapelo?N%+256*shapehi?N%:T%=?S%*S%?1:Z%=XS*YS/p-T%:T%=S%+T%+2
13300IFSdata!2+Z%>maxshape THENVDU7:ENDPROC
13400top=(Sdata!2-T%AND-4)+T%
13500IFZ%>0THENFORI%=top TOT%STEP-4:I%!Z%=!I%:NEXT
13600IFZ%<0THENFORI%=T%TOtop STEP4:I%!Z%=!I%:NEXT
13700IFN%<s-1 ELSE14000
13800FORI%=N%+1TOs-1:J%=shapelo?I%+shapehi?I%*256+Z%
13900shapelo?I%=J%:shapehi?I%=J%DIV256:NEXT
14000FORI%=0TOXS*YS DIVp-1:IFI%MODYS=0THENJ%=buff%+I%DIVYS*8
14100S%?(I%+2)=?J%:J%=J%+1:IF(J%AND7)=0THENJ%=J%+&278
14200NEXT:?S%=XS/p:S%?1=YS:Sdata!2=Sdata!2+Z%
14300ENDPROC
14400 
14500DEFPROCmode(I%) NN%=0:VDU22,I%:ENDPROC
gtoal
Posts: 69
Joined: Sat Nov 04, 2017 2:07 am
Contact:

Re: Disassemblies of BBC Micro Games

Post by gtoal »

I remember the game programming language - didn't remember the name but GOAL sounds plausible.

It *was* used in one released game at least - the one with the roundabout and funfair-type games. Sorry, don't remember the name immediately.

The system was only capable of implementing very simple games. It wasn't as powerful, for example, as the current "Scratch" programming environment for teaching programming to kids.

I just remembered that Tim Dobson might have been the author of the game I was thinking of. 'Carousel' perhaps? No - 'Carnival'!

G
Post Reply

Return to “programming”