Making ROMs for the BBC Micro

      No Comments on Making ROMs for the BBC Micro

Here’s something I’ve only just learned about the BBC Micro: you can burn ROM chips using modern EEPROMs. Who knew?*

One of the strengths of the BBC Micro was the way it handled ‘language’ ROMs. The quotes are there because while many of these ROMs were, indeed, programming languages, others were applications such as word processors, spreadsheets, utilities and so on. To switch between the normal Basic environment and, say, Lisp, all you had to do was type *LISP.

Having code in ROM was so much more convenient than loading it from cassette, or even from floppy. The software was always ready and waiting, and available instantly. And with utility ROMs, you could invoke their functions from within other language environments, effectively extending the operating system.

The BBC Micro had a limited number of ‘sideways ROM’ slots available, so ROM extension boards became popular add-ons (I had one in my Model B).

The BBC Master took this a couple of steps further with cartridge slots for ROMs and sideways RAM. You could load ROM images from disk into one of four RAM banks, where the software would remain, acting like a ROM, until you powered-down the machine. Sideways RAM boards were also available as aftermarket add-ons for the Model B.

Burn, baby, burn

Back in the day, I toyed with burning my own code into ROMs. But it wasn’t easy. Erasable programmable read-only memory (EPROM) chips were not the simplest things to use. The erasing part involved exposing the little, clear window on the chip to sufficient ultraviolet (UV) light. That meant having a UV lamp or special UV chip eraser. And burning the new code into the chip required an expensive programmer tool that used relatively high voltages (15V was common, although some chips needed more). I couldn’t justify the cost of either.

Many retrocomputing enthusiasts still do this. But, for some reason, that whole UV erasing malarky just feels too time-consuming, even though you can get cheap UV eraser devices now (from the usual suspects in China). Also, you need to use vintage chips, with all the potential for high failure rates that implies.

Modern electrically erasable programmable read-only memory (EEPROM) chips are much more malleable beasts. Both erasing and burning are done at normal TTL voltages – no fancy lamps required and the programmers themselves are fairly cheap. The USB-connected TL866 II Plus has pretty much become the de facto standard and is yours for around $50-60. (I have the older TL866CS, which supports fewer chips but all the ones I need.)

MiniPro EEPROM programmer

Instantly available

Given that I own a BBC Master, with its handy sideways RAM, why bother with burning EEPROMs? After all, I can just load in the necessary ROM image when and as I need it.

To explain, let’s take the example of Basic Editor, a program I like having available at all times. Here’s the process of running the program using sideways RAM:

  • Make sure you have the disk with the ROM images on it available. In my case, this means loading the disk image from a USB stick into the DataCentre’s RAM disk with: *IMPORT -1 LANGROM.SSD, which loads the disk image to RAM disk 1. Having the ROM image on an actual floppy disk would be another option.
  • Load the ROM image from disk into the sideways RAM with: *SRLOAD :1.BE139 8000 7.
  • Wait a moment. It takes some seconds for the image to load.
  • Hit Ctrl-Break.
  • Type *ROMS to check everything has worked.
  • Type *BE to invoke the Basic Editor.

Now here’s the process with the Basic Editor in a physical ROM:

  • Type *BE to invoke the Basic Editor.

Okay, so the long-winded way only has to be done once per session – after first starting up the machine. And I could probably script this process. But it’s annoying when, say, you think you’ve finished for the day, power down the machine, then think of a brilliant change you could make to the code, power on the machine and … here we go again.

Top half only

The Atmel AT28C256 EEPROM is a popular chip. I, and probably thousands of other people, are currently using it while following along with Ben Eater’s 6502 computer project.

But it’s a 32kB EEPROM (or 32k x 8, if you prefer that way of putting it). Normal ROMs used in the BBC Micro series were 16kB. (Other sizes were used, but that’s a whole other discussion.) That’s not a problem – you just use half of the space and accept that the other half will be wasted.

However, due to the quirks of the Beeb’s addressing regime, it’s the top half of the space that you need to use.

This isn’t a problem. There are two ways of doing this – the slightly convoluted way and the simple way. Or, alternatively, what I would call the way I thought of first and the way I discovered later.

The MiniPro software (Windows only) that comes with the TL866 is a simple but effective application. You select the chip you’re using (it has search facilities that make this easy), then use the File -> Open option to select the ROM binary image file and load its data into the app’s buffer. The binary file you need is the same one you would normally load into sideways RAM using *SRLOAD (ie, not a disk image of the type whose filename normally ends with .SSD or .DSD).

By default, the software loads the binary data starting at buffer (ie, ROM) address 0. That’s not where we want it, but no matter.

Once the code is in the bottom 16kB of the address space, you can use the File -> Define Block option with start address 0 and end address 3FFF to select the code in the buffer, press Ctrl-C to copy it, click on the data at buffer address 4000 (the start of the top half of the address space) and press Ctrl-V to paste. Now there are two copies of the code in the memory, one of which we can actually use.

Alternatively, after you’ve selected the binary file, you may notice – as I eventually did – that there is an option to read the data into a different section of the address space. You select 0 as the file start address and 4000 as the buffer start address (or ‘Strat Addr’, as the app has it) and the code will be loaded into the upper half of the buffer space from the get-go. Much simpler.

Either way, use Device -> Program to burn the code and you’re done.

The code loaded, starting at address $4000.

Thanks to a generous benefactor (hi Richard!), I have two cartridges for my Master each of which can hold two ROMs. He also gave me a Viglen cartridge system. However, four ROMs is enough for now.

Suitably labelled AT28C256 EEPROMs pretending to be ROMs.

And my choice of ROMs? Basic Editor, Lisp, MicroProlog and Communicator. For now. I suspect that, after a bit of a play with MicroProlog, I may replace it with WordWise – the first word processor I used for my day job as a tech journalist.

Cartridges in place in the Master.

__

* Actually, lots of people – just not me.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.