BBC information v0.01 by Wouter Scholten Some useless game info: Killer Gorilla has a an interesting bug: On the first screen jump to the left into the fire and you'll end up near the gorilla, unfortunately quit dead. Did you know that the machine code in Planetoid is approx. 6.6K, in Rocket Raid 4.2 K (both excl. init code) and in Hopper a measly 2.4K? --------------------------------------------------------------------------- Game versions * Snapper: v1, v2 * Defender > Planetoid v1 > Planetoid v2 > super defender. Planetoid v2 is supposed to have an easier to use scanner like the original defender, showing when an alien gets on screen. Also texts were non flashing * Hopper: v1, v2, german version what's different in v1? * Monsters v1,v2 what's different in v1? * Arcadians: v?, german version * Missile base: v?, german version Aliases * super defender: modified defender (slightly different basic loaders) * Star Swarm (acornsoft): tetrapod, actually starswarm is a bit different; the bullets don't bounce off the walls. * R*thur: Bouncer (Q*Bert clone) * Planetoid: Defender, actually this is an early, buggy, version of Planetoid. * Zany kong jr (1984): Killer Gorilla 2 (1988) (Superior soft.) * Danger UXB = Blockman (Micro Power) * Carnival = Carousel (Acornsoft) * Centipede = Bug Blaster (Alligata) * Deathstar (Superior) = Sinistar (Atari) * Skirmish = Joust --------------------------------------------------------------------------- 1. Reading and writing 5 1/4 BBC disks on a PC: You can use anadisk (simtel: msdos/diskutil/anad207.zip) to read disks and FDC (an improved version of FDCDEMO) to read and write disks. 3 bugs were removed: 1) the drive was not reinitialized after eg. DD 2) FORMAT didn't work for any format with minsector<>1. 3) ASCII conversion in SHOW was wrong and various commands added (single side reading/writing, CATalogue of files on side 0/1, ignore errors). Commands: DDINHD, CYL 80 (only for 1.2M drive) , DOUBLESTEP (for 40tr disk in 1.2M drive), FD0 if the 5 1/4 drive is your first drive, and for double density : DD, SECTORS 18. Now you can read thedisk with 'READ filename' (both sides), READ0 reads side 0, READ1 reads side1 or write a file to it with WRITE/WRITE0/WRITE1. 3. Emulator no go's: emulator no go's !6502em Boffin, Commando (works but _very_ slow), Firetrack, Super (v1.21) Invaders, Killer Gorilla (works but is unplayably fast). xbeeb v0.3 Elite, Meteors, Fortress. BeebEm Zalaga, Meteors, Contraption, Castle quest, Nutcraka Boffin, Firetrack, Fortress, Nutcraka, Manic Miner, Match Horizon Day, Repton 2 (the author admits that the latter 3 don't work because he hasn't yet implemented all the 'required' invalid opcodes.) Comment: Match day also doesn't work on my BBC, the screen is messed up with parts of men etc. Is this because of different 6502's? I thought the program was corrupted on disc but I got another copy from someone else with the same problems. The same problem occurs with Stryker's run. I have two copies neither of which run on my BBC. --------------------------------------------------------------------------- 4.1 Using diskimages: 1.BeebEm/Beebwin: you probably need to set an environment variable in beebem to use single sided diskimages. Eg. for BeebWin: Set BeebDiscLoad=S:80:\beebfile\beebim.1 before starting windoze to access a single sided diskimage named beebim.1) Windows '95 Beebem information The Problem: BeebWin uses an environment variable to define the disc image it uses. Solution: Write a DOS batch file that sets the environment variable then calls BeebWin. Write two batch files (one for single sided discs, the other for double sided discs, they look like this: @echo off SET BeebDiscLoad=S:80:%1 BeebWin @echo off SET BeebDiscLoad=D:80:%1 BeebWin Then create shortcuts for both, the short cut must have the 'close after execution' property set. Now double click on both types of disc, assuming no file type mapping exists already Windoze will ask whether you want to associate the file type with an application. Use the browse button to locate the shortcut for the appropriate batch file and click apply. You can now load Beebwin with a particular disc image by double clicking on it! 2. For !6502em and !65host you need to split the files with BEEBARC. 3. For MacBeebEm/Horizon use bbcim.cc to extract files and the utility included with MacBeebEm (to combine the bare files and the addresses in the cat file). If you don't have a command line change the source code by adding 'argc=1;' in main. 4. For xbeeb also use bbcim.cc and rename the catalogue file (remove the first couple of lines) 4.2 Using archive files: 1. BeebEm: make a diskimage with 'bbcim -a new.bbc *' to put all files of the current dir in a diskimage new.bbc. (in dos you will probably have to give a list of files which is what the shell in unix does, if you don't like this switch to linux. I will NOT put wildcard expansion in bbcim) 2. !6502em/!65Host: use Darren Salt's BEEBARC (contains UN/INF). 3. MacBeebEm/Horizon : use the utility included with MBE. 4. xbeeb: to get filenames right in one go do: bbcim -x * 4.3 Problems: Programs may need to be loaded higher (PAGE=&1900 on a BBC with Acorn DFS, 1900 in beebem, E00 on a cassette system and also E00 in some emulators and on BBC's with either a Opus CHALLENGER drive with RAM DISK or a Solidisk SWR DFS. If there are problems, see for example PLANETOID which loads PLANET2 high and then moves it down to E00). NOTE: all emulators should have PAGE at &E00 (there's no good reason to emulate a DFS). Cracking the protection is better. --------------------------------------------------------------------------- 5. Cassette transfer & CRC checking on the BBC If you want to transfer cassette software to disk the first thing you need in many cases is to *LOAD a locked file. type the following: P%=&C00 [PHA: LDA &3CA:AND #&FE:STA &3CA:PLA:RTS] ?&220=0:?&221=&C *FX14,4 Now you can *LOAD the program. Here's a small BBC program to calculate CRC's (as in bbcim) bbc-crc. Type it in on your beeb to check that files transferred correctly to the PC (mac, whatever). 10 FOR N%=0 TO 2 STEP 2 20 P%=&2000 30 [OPT N% 40 .mloop 50 JSR &FFD7:BCS end 60 LDX #8 70 EOR &71:STA &71 80 .lp 90 LDA &71:BPL skip0 100 EOR #8:STA &71:LDA &70:EOR #&10:STA &70 110 .skip0 120 ASL &70:ROL &71:BCC skip1:INC &70 130 .skip1 140 DEX:BNE lp 150 JMP mloop 160 .end 170 RTS 180 ] 190 NEXT 200 INPUT"Which file";F$ 210 Y%=OPENIN(F$) 220 IF EOF#Y% CLOSE #Y%:END 230 !&70=0:CALL &2000 240 CLOSE #Y% 250 PRINT" ";F$;": crc="~!&70 _____________ The following code is used in bbcim to calculate the same CRC's: unsigned int crc=0; while (1) { fread(&byte,1,1,fp); if (feof(fp)) break; length +=1; crc ^=(byte << 8); for(int k=0;k<8;k++) { if (crc & 32768) crc=(((crc ^ 0x0810) & 32767) << 1)+1; else crc =crc << 1; } } ------------ BBC connections: Looking at the back of the BBC: Cassette connections: 1 2 3 4 5 6 7 1 and 2:cassette motor control 3 :input 4,6 :output 7 :0 v Serial port: E A C D B A : data in B : data out C : 0v D : CTS E : RTS ___________________________________________________________________________ BBC disk formats: DFS/DDOS: 40/80 track single density/double density sd: 10 sectors per track, sector startno = 0 dd: 18 sectors per track, sector startno = 0 track startno =0. 256 bytes per sector ___________________________ File formats: Diskimage..... NEW ARCHIVE FORMAT: $.ELITE : bare file $.ELITE.inf : info text file containing '$.ELITE FF0E00 FF8023 Locked CRC=XXXX NEXT $.ELITE2' The $.ELITE is optional but if present the files may be renamed to say a and a.inf. $.ELITE is then the real filename. A CRC is included for various reasons (to check fileconversion software, serial- or disk- file transfer to/from a bbc, etc.) The CRC is calculated with the algorithm from the BBC user guide p. 399 (The same algorithm as used for the cassettte and rom filing system). 'Locked' may be abbreviated to 'L'. NEXT may be used for CHAIN"" or *RUN as used on cassette systems. file length may be included (after the execution address) but is unnecessary. --------------------------------------------------------------------------- 7. Emulation: The general emulation FAQ from the newsgroup comp.emulators.misc. contains lots of information on available emulators and where to get them. --------------------------------------------------------------------------- 8. The BBC emulators: speeds, file formats and screen size Speed test programs: 1. To test decode speed: 10FOR X=1 TO 1000 20Y=SIN X 30NEXT BBC B: 25.33 s, !6502em: 25.59 (arm 610), xbeeb 0.3 on my 486-66, 8MB, S3 864 (256 colour mode): 16.5s MacBeebEm Horizon Powermac 7200 (PPC601-90/256K cache): 11.5 s 2. To test graphics speed: 10MODE 2 20A=RND(-100) 30FOR N%=1 TO 200 40GCOL RND(255),RND(255) 50PLOT 85,RND(1280),RND(1024) 60NEXT BBC B: 21.83 s, !6502em: 21.95 (arm610), xbeeb 0.3 on my 486-66, 8MB, S3 864 (256 colour mode): 65 s MacBeebEm Horizon PPC601-90: 12-19 s (15 to 25 frames/s) 3. To test the mode 7 speed: 10MODE 7 20FOR N%=1 TO 2000 30PRINT N% 40NEXT BBC B: 21.36 s, !6502em: 21.41 (arm610), xbeeb 0.3 on my 486-66, 8MB, S3 864 (256 colour mode): 33.5 s. MacBeebEm Horizon PPC601-90: 12-18 s (15-25 frames/s) , beebwin on 486-66: ca. 115 s The emulator !6502em runs at precise BBC speed (not just on these benchmarks) which means that it is decoding a lot faster that e.g. beebem and probably also xbeeb. Q: shouldn't parts of the emulators be programmed in assembler? R: but that isn't portable. Just when you've got a X11 program that works on all computers! A: So what, a house isn't portable but do you prefer to live in a tent? 8.1 File formats: * Beebem: diskimage (SINGLE SIDED)/interleaved diskimage (DOUBLE SIDED) * xbeeb: separate files with names as on the BBC. Catalogue file contains LOAD/EXEC adresses. * !6502em: separate files with LOAD/EXEC adresses in the file attributes. * !65host: separate files with LOAD/EXEC adresses in the file attributes. * MacBeebEm: separate files with a header of 10 bytes containing the load/exec addresses. From the documentation for MacBeebEm: "The storage of BBC files is made more troublesome by the need to store the load and execute addresses for each file somewhere. The 'directory' approach was finally rejected in favour of keeping the information in a small header at the start of each file. The header consists of 10 bytes in the following format. Offset Byte Comment 0 255 Must always be 255 1 L-LO Load address 2 L-HI 3 E-LO Execute address 4 E-HI 5 * Checksum 6..9 0 Four spare bytes 10.. EOF data File data proper The checksum * is computed as (L-LO + L-HI + E-LO + E-HI) & 255. If this check fails or if the first byte is not 255, MacBeebEm will refuse to load the file. The last 4 bytes are currently unused and may take any value." MacBeebEm comes with a program which generates this header, so all MacBeebEm users really need are the raw files and a list of the load/execute addresses for each file. 8.2 Screen size: * BeebEm 640*256: why ? Robert Schmidt has recompiled it (beebwin for winsuck95) with the right aspact ratio for mode 1,2,4,5,6,7, not mode 0 and 3. * xbeeb : 640*512 (2*2 pixels in 320*256 mode etc.) * MacBeebEm: 320*256 (teletext 320*250), or 480*384 (interpolated), what about MODE 0? It is not displayed in a higher resolution (but sets the nearest pixels in the previous modes) * Horizon: 320 x 256, 480 x 384, 640 x 448 and 640 x 480 Notes: 1) The reason for the second to last setting is that a standard Apple 14" monitor has a resolution of 640x480, but needs room for the menu bar and window title. 2) In 640x480, Horizon is just pixel doubling, so mode 0 is still missing every second pixel. * !6502em: full screen, 320*256 or 640*256 Note: these are the standard resolutions, but where the source is available you can always change this. --------------------------------------------------------------------------- BBC pages: 1. Robert Schmidt's BBC page excellent http://www.idt.unit.no/~robert/bbc/bbc.html 2. James Fidell's xbeeb page. 3. BBC archives: ftp://micros.hensa.ac.uk/micros/bbc ftp://ftp.uni-stuttgart.de/pub/systems/acorn/6502 ftp://maekong.ohm.york.ac.uk/pub/BBC ftp://ftp.dcs.ed.ac.uk/pub/ajcd/BBC For a description of available BBC emulators see the comp.em.misc.FAQ and Robert Schmidt's emulator information pages for up to date information. Where to find BBC B emulators: 1. Beebem (X11 and windoze). v0.06 has sound! Runs at BBC speed on a P90 (at least, and only under linux). See also Robert Schmidt's page for an enhanced version of beebwin. ftp://ftp.compsoc.man.ac.uk/pub/beebem/ 2. xbeeb page (X11, by James Fidell). v0.3 has sound (not as good as beebem's I'm told). http://www.OiT.co.uk/~james/BBCMicro/Xbeeb/ 3. PC: Tom Seddon's bbc emulator http://www.ncl.ac.uk/~n5013784/bbc-emu.htm 4. Mac: Horizon information and the demo program (limited version of the commercial one). http://www.cityscape.co.uk/users/jx91/horizon.html>Mac: Horizon 5. !6502em: commercial (15 pounds) Also emulates Masters (information). http://www.comlab.ox.ac.uk:80/oucl/users/robin.watts/wss/products.html 6. !65host: Free, but needs to be patched on Risc PC's (see Acorn's ftp site)