A quick post this time. I’ve had an mbed (LPC1768) lying around for ages which I’d never gotten around to doing anything more than blinking an LED with, and I also — for reasons too boring to go in to here — have some BBC computer ROMs which I don’t know much about. I was interested to know what was on them though, so I’m just going to say a little bit about how I used the mbed to read them.
The ACORNOS and ACORNBASIC ROMs look legit, but as for the others… they appear to be EPROMs. These are chips which could be electrically written, and erased using UV light. To prevent accidental erasure you had to put a sticker over the window on the chip! I wonder if this could be an early case of pirated software? Or maybe it was common for software to be distributed on EPROMs? Since this is from over a decade before I was even born, I’m not really sure!
The ROMs were all of different part numbers but the first one I picked out was a 27C128 so I put together a reader on breadboard built around this. I figured the other chips must be all pin compatible anyway and a quick google for datasheets confirmed this. The circuit is super-simple: just connecting the chip to the 5v supply rails, pulling WE high (it’s an active low line), and connecting the data, address, CE and OE lines to the mbed’s GPIOs. I used all but one of the GPIOs. Cutting and stripping all of the wires was very tedious! The ROM chips need a 5v supply but have an input logic high level according to the datasheet of 2v. The mbed uses 3.3v logic but its inputs are 5v tolerant so it looks like we’re on to a winner.
I don’t use breadboard much so I only had one reel of solid core wire to hand. I hope you like green!
Next step was writing software. The way to read the chip is summarised by the read waveforms from the datasheet:
Essentially, you set the data address on the address bus, clock OE and CE low (they’re active-low lines), wait at least some minimum delay then read the data off the output bus. Afterwards, you clock OE and CE back high (in fact, I think you can leave one low all the time but I didn’t bother) and wait for the output to go back to tristate mode before repeating for the next word. The datasheet allowed ~250ns delays but just to be safe I used 1µs. Probably a good idea to allow for chips with different minimum timings anyway. Plus it would turn out later that the serial transfer is the bottleneck, rather than reading the chip.
Aside from that, the only thing to say about the code is that transferring the data to the computer over serial behaved a bit strangely. If I used Serial.putc() or Serial.printf(“%c”) on the data, I’d end up short of the expected 16KiB at the PC end. But if I used Serial.printf(“%d\n”), I got exactly the 16384 lines I expected. So instead of spending ages trying to debug this, I opted to use the decimal ASCII transfer and convert at the PC end.
The chip contents were just grabbed using a pipe:
$ pv -s 56000 > romcontents-decimal
This gave a fairly useless decimal output (example from the ACORNOS ROM):
76 31 128 76 233 188 64 14 0 66
…etc etc.
So I threw together a quick bit of python to convert from the decimal ASCII to the raw binary:
#!/usr/bin/env python3 import fileinput,struct,sys for line in fileinput.input(): thisnum=int(line) thisbyte=struct.pack('B',thisnum) sys.stdout.buffer.write(thisbyte)
Piping the decimal through this gave the raw ROM contents – exactly 16KiB! This could be viewed with hexdump. Here’s a couple of examples:
alex@Apollo:~/bbcroms$ hd graphics-bin |head 00000000 00 00 00 4c 49 80 82 21 a0 47 52 41 50 48 49 43 |...LI..!.GRAPHIC| 00000010 53 20 45 58 54 45 4e 53 49 4f 4e 20 00 31 2e 30 |S EXTENSION .1.0| 00000020 32 00 28 43 29 31 39 38 33 20 43 4f 4d 50 55 54 |2.(C)1983 COMPUT| 00000030 45 52 20 43 4f 4e 43 45 50 54 53 2d 50 61 75 6c |ER CONCEPTS-Paul| 00000040 20 48 69 73 63 6f 63 6b a1 08 2c 80 02 30 13 c9 | Hiscock..,..0..| 00000050 02 d0 11 2c cb 0c 10 08 98 9d f0 0d 8d f0 0c c8 |...,............| 00000060 a9 02 28 60 48 8e df 0c 8a 48 98 48 ba bd 03 01 |..(`H....H.H....|
Most of the ROMs had some plaintext descriptor telling you the software and its version.
This segment from AcornOS is quite interesting – a few familiar names here!
00003bf0 91 4c f4 ff 20 3a 53 45 54 53 44 46 20 4c 44 41 |.L.. :SETSDF LDA| 00003c00 bb c0 28 43 29 20 31 39 38 31 20 41 63 6f 72 6e |..(C) 1981 Acorn| 00003c10 20 43 6f 6d 70 75 74 65 72 73 20 4c 69 6d 69 74 | Computers Limit| 00003c20 65 64 2e 54 68 61 6e 6b 73 20 61 72 65 20 65 78 |ed.Thanks are ex| 00003c30 74 65 6e 64 65 64 20 74 6f 20 74 68 65 20 66 6f |tended to the fo| 00003c40 6c 6c 6f 77 69 6e 67 20 70 65 6f 70 6c 65 2c 20 |llowing people, | 00003c50 63 6f 6d 70 61 6e 69 65 73 20 61 6e 64 20 6c 6f |companies and lo| 00003c60 63 61 74 69 6f 6e 73 2c 20 63 6f 6e 74 72 69 62 |cations, contrib| 00003c70 75 74 6f 72 73 20 28 61 6d 6f 6e 67 20 6f 74 68 |utors (among oth| 00003c80 65 72 73 20 74 6f 6f 20 6e 75 6d 65 72 6f 75 73 |ers too numerous| 00003c90 20 74 6f 20 6d 65 6e 74 69 6f 6e 29 20 74 6f 20 | to mention) to | 00003ca0 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 |the development | 00003cb0 6f 66 20 74 68 65 20 42 42 43 20 43 6f 6d 70 75 |of the BBC Compu| 00003cc0 74 65 72 3a 44 61 76 69 64 20 41 6c 6c 65 6e 2c |ter:David Allen,| 00003cd0 42 6f 62 20 41 75 73 74 69 6e 2c 52 61 6d 20 42 |Bob Austin,Ram B| 00003ce0 61 6e 6e 65 72 6a 65 65 2c 50 61 75 6c 20 42 6f |annerjee,Paul Bo| 00003cf0 6e 64 2c 41 6c 6c 65 6e 20 42 6f 6f 74 68 72 6f |nd,Allen Boothro| 00003d00 79 64 2c 43 61 6d 62 72 69 64 67 65 2c 43 6c 65 |yd,Cambridge,Cle| 00003d10 61 72 74 6f 6e 65 2c 4a 6f 68 6e 20 43 6f 6c 6c |artone,John Coll| 00003d20 2c 43 6f 6d 70 75 74 65 72 20 4c 61 62 6f 72 61 |,Computer Labora| 00003d30 74 6f 72 79 2c 43 68 72 69 73 20 43 75 72 72 79 |tory,Chris Curry| 00003d40 2c 44 65 73 69 67 6e 65 72 73 20 6f 66 20 74 68 |,Designers of th| 00003d50 65 20 36 35 30 32 2c 4a 65 72 65 6d 79 20 44 69 |e 6502,Jeremy Di| 00003d60 6f 6e 2c 54 69 6d 20 44 6f 62 73 6f 6e 2c 4a 6f |on,Tim Dobson,Jo| 00003d70 65 20 44 75 6e 6e 2c 50 61 75 6c 20 46 61 72 72 |e Dunn,Paul Farr| 00003d80 65 6c 6c 2c 46 65 72 72 61 6e 74 69 2c 53 74 65 |ell,Ferranti,Ste| 00003d90 76 65 20 46 75 72 62 65 72 2c 4a 6f 6e 20 47 69 |ve Furber,Jon Gi| 00003da0 62 62 6f 6e 73 2c 4c 61 77 72 65 6e 63 65 20 48 |bbons,Lawrence H| 00003db0 61 72 64 77 69 63 6b 2c 44 79 6c 61 6e 20 48 61 |ardwick,Dylan Ha| 00003dc0 72 72 69 73 2c 48 65 72 6d 61 6e 6e 20 48 61 75 |rris,Hermann Hau| 00003dd0 73 65 72 2c 48 69 74 61 63 68 69 2c 41 6e 64 79 |ser,Hitachi,Andy| 00003de0 20 48 6f 70 70 65 72 2c 49 43 4c 2c 4d 61 72 74 | Hopper,ICL,Mart| 00003df0 69 6e 20 4a 61 63 6b 73 6f 6e 2c 42 72 69 61 6e |in Jackson,Brian| 00003e00 20 4a 6f 6e 65 73 2c 43 68 72 69 73 20 4a 6f 72 | Jones,Chris Jor| 00003e10 64 61 6e 2c 44 61 76 69 64 20 4b 69 6e 67 2c 44 |dan,David King,D| 00003e20 61 76 69 64 20 4b 69 74 73 6f 6e 2c 50 61 75 6c |avid Kitson,Paul| 00003e30 20 4b 72 69 77 61 63 7a 65 6b 2c 50 65 74 65 72 | Kriwaczek,Peter| 00003e40 20 4d 69 6c 6c 65 72 2c 41 72 74 68 75 72 20 4e | Miller,Arthur N| 00003e50 6f 72 6d 61 6e 2c 47 6c 79 6e 20 50 68 69 6c 6c |orman,Glyn Phill| 00003e60 69 70 73 2c 4d 69 6b 65 20 50 72 65 65 73 2c 4a |ips,Mike Prees,J| 00003e70 6f 68 6e 20 52 61 64 63 6c 69 66 66 65 2c 50 65 |ohn Radcliffe,Pe| 00003e80 74 65 72 20 52 6f 62 69 6e 73 6f 6e 2c 52 69 63 |ter Robinson,Ric| 00003e90 68 61 72 64 20 52 75 73 73 65 6c 6c 2c 4b 69 6d |hard Russell,Kim| 00003ea0 20 53 70 65 6e 63 65 2d 4a 6f 6e 65 73 2c 47 72 | Spence-Jones,Gr| 00003eb0 61 68 61 6d 20 54 65 62 62 79 2c 43 68 72 69 73 |aham Tebby,Chris| 00003ec0 20 54 75 72 6e 65 72 2c 41 64 72 69 61 6e 20 57 | Turner,Adrian W| 00003ed0 61 72 6e 65 72 2c 57 69 6c 62 65 72 66 6f 72 63 |arner,Wilberforc| 00003ee0 65 20 52 6f 61 64 2c 52 6f 67 65 72 20 57 69 6c |e Road,Roger Wil| 00003ef0 73 6f 6e 2c 41 6c 61 6e 20 57 72 69 67 68 74 2e |son,Alan Wright.|
In case the contents of these ROMs are useful to anyone, here’s a tarball of all of them. It contains:
- ACORNBASIC, unknown version, 1981
- ACORNOS 032 (?) 12-Aug-1981
- MOS+ 1.15, 3-May-1988
- DFS 2.26, 1985
- Computer Concepts Graphics Extension 1.02, 1983
Since I have no use for these chips, I’m probably going to donate them to the Centre for Computing History. Check them out if you’re in Cambridge!