BBC Microcomputers

Introduction

In the 80's the BBC (British Broadcasting Corporation) wanted to make sure that computers were used for educating people but it was a company called Acorn computers that won the contract to make a computer for the BBC, the BBC micro, which came out in 1981. Acorn computers would later also produce other versions of the BBC micro such as the Acorn Electron which was a more basic version of the original BBC microcomputer. The BBC micro had the code name Proton and the computer was preceded by the Acorn Atom, which Acorn had previously made before they got involved with the BBC.

Please note:

Unless otherwise stated the screenshots on this page were taken using an Elgato capture card using the BBC Micro's RGB video connection upscaled.

The ampersand (&) is used to denote a hex value.

Overview

As seen below, the original BBC microcomputer was huge, almost as big as the Commodore Amiga 500, but the BBC microcomputer had almost everything you could need. Using an 8-bit 6502A CPU running at 2MHz, with the ability to add a second CPU (such as a Z80 8-bit microprocessor or even a 16-bit microprocessor) using the Tube port, with a fast BASIC and many different display modes it was a real winner.

There were a number of variations of the BBC micro; model A had 16KB RAM as standard, model B (see photo above) came with 32KB RAM, B+ had 64KB RAM, and the BBC Master (see section below) had 128KB RAM. There were other minor differences between model A and model B with the option to upgrade model A to model B without too much difficultly. The BBC Master featured a somewhat better processor which caused some compatibility issues but on the plus side some software ran enhanced on the Master compared to the previous models. Of the main BBC micro motherboard there were 7 revisions (5 and 6 weren't released).

The power supply was built into the computer and had a large power switch at the back where the mains lead connected (non-removable). The ports at the back are: econet (not fitted on my BBC-a form of LAN), analogue in (quite unique for a microcomputer), cassette, RS423 (one way serial port), RGB, video out, and UHF out (for connecting to a TV). There are also connectors at the bottom of the unit which are: aux. power output (to power a floppy drive, for e.g.), disc drive, printer. user port, 1MHz bus, and tube (a fast parallel communication interface for connecting a second processor; please see the Second Processors section for more information).

Early versions of Model A and B came with BASIC V1 while later model B computers came with BASIC V2, which fixed a number of bugs and provided a number of new keywords. Please see this site for an overview:

http://beebwiki.mdfs.net/6502_BBC_BASIC#BASIC_1.2C_1981

The BASIC was advanced as it featured keywords for switching video modes, creating sounds, line drawing and also had support for assembler instructions, although not terribly easily integrated with a BASIC program due to the way the assembler was loaded. A nice feature of the built-in BASIC was that keywords could be entered quicker than normal by typing the first two letters followed by a full stop, for example: CO. is shorthand for COLOUR.

Inside the machine there are a number of chip sockets for the Operating System ROM, language ROM(S) such as BASIC and other ROM(s), such as for a disk filing system ROM. These ROMs occupy what is known as 'sideways' or 'paged' memory and the right most socket has the highest priority and is where the main language ROM should live. While five ROM sockets are provided on the mainboard it is possible for up to 16 ROMs to be accepted using an adapter board, however, leaning on the keyboard can put pressure onto the socketed chips, causing anything from sudden crashes to the computer not starting up at all; this was remedied in the B+.

Unlike the later BBC Master which had dedicated battery backed RAM for storing user settings the BBC Model A/B/B+ lacks such a feature although it is possible to set options (such as the default video mode) by fitting an 8-way switch. Whenever you change settings using the switch either power off and back on for the changes to have an effect or press CTRL+BREAK. Note that it's good to have the computer start up in mode 7 as its text only and requires only 1KB of RAM, leaving plenty of space to write or load large programs.

Software was available on both cassette tapes (using a cassette player with DIN interface) and floppy disks but the BBC micro did support a hard drive (sometimes referred to as a 'Winchester disk') connected to its 1MHz bus port. It was also possible to connect a laserdisc unit; a laserdisc is like an older version of a CD but using a very different format.  Nowadays modern, floppy drive emulators can be used, such as Gotek and similar, which can hold 100's of 'disks' on a single flash drive and you can find out more on this page:

https://sites.google.com/site/jamesskingdom/Home/computers-exposed/gotek-floppy-drive-emulator

For me, and I'm sure may others, one of the most memorable things about the BBC microcomputer is how it starts up with a loud BLEEP! This bleep was actually an indication that the computer had started up without any troubles, that and the on-screen text.

BBC Master Overview

Produced by Acorn computers for the BBC, the Master (Master 128) was designed as the next step up from the BBC micro series model B while retaining compatibility with it (although it had trouble running some BBC model B software). It became available in 1986, featured 128KB RAM as standard and had two easily accessible cartridge slots (enhanced Acorn Electron cartridge slots) on the top of the case. The CPU used was a 65SC12 at 2MHz which was based on the 6502 but with slight differences such as not having an on-board oscillator.

The dimensions of the Master are approximately (WxDxH): 47cm x 35cm x 8 cm. As for I/O, the Master had the already familiar ports of the previous model that allows it to be connected to a monitor or TV, a network, a floppy drive or cassette player and a second CPU can be added externally or internally. Although the Master has an Econet socket as standard you still have to fit an Econet module internally to be able to use Econet.

As well as the built-in MOS (Machine Operating System), BASIC V4 was included (had a number of advancements and bug fixes) as well as some software packages (View word processor, Viewsheet spreadsheet, Terminal and Edit).

Take a look at the Master below:

Like the other BBC micro computers the Master had a built-in QWERTY keyboard which included function keys but added a numeric keypad and the ability to lock the break key. Another improvement on the previous BBC micro models was the addition of separate video RAM as to not limit user RAM availability for BASIC programs although user RAM could be used as a video buffer. Speaking of graphics, the Master has 8 graphic modes providing different resolutions and colours amounts. The Master has 4 independent sound channels and uses a sound chip which was also used in other computers and games consoles, such as the Master system.

As mentioned, the Master has two cartridge slots on the top which use the internal 2MHz bus and they support up to 256KB ROM per socket as well as sound I/O. Not many cartridges were produced for the Master due to high cost compared to floppy and cassette media, however, some Acorn Electron cartridges were supported. ROMs that are connected to the cartridge slots are recognised as 0 to 3 in the ROM map; To see all installed ROMS type *ROMS at BASIC prompt. If CMOS settings are corrupted due to a bad battery the listing may show that all ROMs as 'unplugged'. 

At the time, the standard means of putting software into the machine (other than typing it in) was to load it from cassette, floppy, or hard drive (very rare though). As for more recent times you can buy add on modules that let you access files from flash memory, such as a flash drive, with Gotek and similar floppy drive emulators being common examples.

There were a number of variations of the Master which include the Turbo, ET and Compact, each enhancing the Master in some way. The Master contains a battery which holds the current date and time (not Y2K compliant) as well as a number of settings, such as what software to start at boot up. The original versions of the Master used a rechargeable battery that was charged by the main board but most of the Master computers used non-rechargeable batteries (with a diode and resistor to prevent the batteries from being charged in circuit) because of fires caused by rechargeable batteries. If you acquire a Master it's a good idea to check the battery still works and that it hasn't leaked. The following site will be of help if you do need to change the battery pack:

http://lionels.orpheusweb.co.uk/CompNyb/TechStuff/8-Bit/Master128/128BatConfig.html

It would also be wise to check the power supply is outputting the correct voltages as the power supply is something that is likely to fail.

A photo of the internals of my Master follows:

Note the original battery pack to the left of the keyboard which had gone bad but I haven't taken it out yet. Above the keyboard and to the right of the power supply you can see a battery pack that I've added which includes the protection diode and resistor; I've yet to secure the new battery pack in place. I must add that it was better that Acorn placed the battery pack away from the main board unlike in other computers that had a battery on the motherboard which would leak if left long enough.

The main board extends beyond the keyboard and the loud speaker is visible to the left of the two cartridge slots.

You can view a service manual for the BBC master at:

http://chrisacorns.computinghistory.org.uk/docs/Acorn/Manuals/Acorn_MasterSM.pdf

While the Master was sold for about 8 years its downfalls were its compatibility problems with BBC A and B model software and the fact it wasn't different enough from the previous models because of trying to be backward compatible with model B. The extra RAM was one of the Master's biggest selling points but in terms of CPU power the Master was behind as 16-bit and 32-bit CPU's already existed. However, the Master's biggest legacy is that the ARM processor was developed for it as a second processor; to date the ARM architecture is one of the most used in the world.

You can view a video I did about the Master at:

BBC Master Mods

Please check out Adrian's Digital Basement's video for some modifications for the BBC Master:

Peripherals

Acorn IEEE488 Interface

The Acorn IEEE488 'cheese wedge' interface add-on was produced by Intelligent Interfaces for Acorn and connects to a BBC micro's 1MHz bus to allow control of up to 14 compatible IEEE488 devices (connected in a star or linear arrangement) but could also be used to connect up to 3 BBC micros together provided they each have unique GPIB addresses. IEEE488 is also known as HP-IB (Hewlett-Packard Interface Bus) or GP IB (General Purpose Interface Bus), a standard invented by HP, and was typically found on technical/lab equipment/etc before USB became standard.  For a good introduction to how IEEE488 works please see: 

https://www.electronics-notes.com/articles/test-methods/gpib-ieee-488-bus/what-is-gpib-ieee488.php

Initially, the BBC micro starts at the controlling device but can also become a controller-talker or controller-listener, and can also pass control to another device on the network.

To use the interface a BBC micro model B is required with MOS version 1.0 or higher installed and the IEEEFS ROM must be fitted, which holds the IEEE Interface Filing System consisting of 'English' commands used to control the devices on the network. As far as the BBC micro is concerned, IEEEFS is just another filing system so consequentially, IEEEFS uses a format that should already be familiar to users of the BBC micro. As well as issuing the commands manually, they can also be used as part of a program written in BASIC, 6502 assembly language, etc. The IEEEFS filing system is selected using the command *IEEE and is the only star command provided by the IEEEFS ROM.

As the interface uses the BBC micro's 1MHz bus, its tube interface is free to be used by a second processor to boost the computer's performance to better take advantage of the greater speed or increase in memory to handle the multiple devices on the network and the data they generate.

As taken from the brochure (linked further down), a summary of the available commands:

Access to the IEEEFS commands is provided by the command *IEEE. The commands available (with standard IEEE488 mnemonics in brackets) are:

BBC DEVICE NO (MTA & MLA) READ BINARY

CLEAR (IFC) REMOTE DISABLE

DEVICE CLEAR (DCL) REMOTE ENABLE (REN)

END OF STRING REQUEST CONTROL

EXECUTE SELECTED DEVICE CLEAR (SDC)

GO TO LOCAL (GTL) SERIAL POLL (SPE RQS STB & SPD)

LISTEN (LAG) STATUS

LOCAL LOCKOUT (LLO) TAKE CONTROL (TCT)

PARALLEL POLL TALK (TAG)

DISABLE (PPD) TIMEOUT OFF

PARALLEL POLL TIMEOUT ON

ENABLE (PPE) TRANSFER

PARALLEL POLL TRIGGER (GET)

REQUEST (PPR) UNLISTEN (UNL)

PARALLEL POLL UNTALK (UNT)

UNCONFIGURE (PPU) WRITE BINARY

The user guide (linked further down) explains that the IEEE488 interface makes use of two types of messages:

i) interface messages (commands) used to manage the interface

ii) device dependent messages (data)

A device can have the ability to send data (act as a talker), receive data (act as a listener), or do both (act as a talker-listener), or manage the system (act as a controller).

Communication between a language and the interface is via two channels. The first is the 'COMMAND' channel used for transmitting IEEEFS commands and receiving information on the state of the interface. The second is the 'DATA' channel used for reading and writing data to other IEEE488 devices.

In the user guide they give an example:

10 *IEEE

20 cmd%=OPENIN(“COMMAND”)

30 data%=OPENIN(“DATA”)

If required these channels can be closed in the following way

1010 CLOSE#data%

1020 CLOSE#cmd%

I was very fortunate to buy an Acorn IEEE488 interface second hand supposedly unused, in the polystyrene box with the manual, interface lead and the ROM that needs to be installed into the BBC micro, which can be seen in the photo that follows:

Here's another look at the interface but without the cables across it:

Next, a look at the included user guide (which is linked to later in this section) a closer look at the ROM:

At the back of the unit (see photo below) is the wired-in mains cable, fuse holder (250mA), power switch and female IEEE488 Centronics connector for controlling an IEEE488 device.

On the underside is the 1MHz cable to connect to a BBC Micro as well as a 1MHz connector for an additional device to be connected to the 1MHz bus which I've shown in the next photo:

To open up the interface remove the single black screw on the underside and the two black screws at the rear and then the top half can be lifted up and separated from the other piece. As can be seen below, there is a single transformer separated from the PCB which contains the main circuit including the linear power supply using a bridge rectifier and 7805 voltage regulator, so fairly straightforward in operation.

Most of the chips are socketed, which is handy should any of them fail they can easily be replaced, and some components of interest are:

75162 Octal general purpose interface bus transceivers (IEEE488 - 1978 compatible).

75160 Octal general purpose interface bus transceiver (IEEE488 - 1978 compatible).

TMS9914A general purpose interface bus adapter (IEEE488 - 1975 compatible).

899-1-R2.2K x4 2.2K resistor network. These resistor packs are for terminating the 1MHz bus and should be removed if the interface is not the last device on the bus.

5MHz crystal for TMS9914.

Other observations:

Interestingly, if you look inside the case there are cutouts near the Centronics connector that are covered up as if the case could be used for something else or additional options could be fitted.

PCB labelled as 'II 100.006 ISS.1'.

Unpopulated PL3 connector.

S1 link option A/B.

S2 link option C/D.

The user guide says that link S1 is set to A as default, which sets the hardware as system controller, but to act as a talker-listener the link should be moved to option B. As for S2, the guide says that with the link in position C the IEE488 data bus is driven by open collector outputs.

For an overview of the interface and to see photos:

http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANK01_IEEE488IF.html

Here is a brochure for the interface:

http://chrisacorns.computinghistory.org.uk/docs/Acorn/Brochures/Acorn_AMP13_IEEEIFforBBCMicro.pdf

A copy of the user guide can be found at:

http://chrisacorns.computinghistory.org.uk/docs/IntInt/IEEE488IFUG.pdf

TMS9914A datasheet:

http://www.bitsavers.org/components/ti/TMS9900/TMS9914A_General_Purpose_Interface_Bus_Controller_Data_Manual_Dec82.pdf

Unfortunately I didn't have any equipment with an IEE488 interface but I had researched online and saw it was possible to use an Arduino to talk to the interface. However, I wanted to do a simple test first and as I would need a IEE488 connector for the Arduino I bought a connector. These can be expensive and it's worth trying different keywords - IEE488, GPIB, HP-IB - but for me I found the cheapest results by just looking for Centronics connectors with 24 pins.

Some things to note, as mentioned in the guide, IEE488 devices should be turned on first, then the IEE488 interface and lastly the BBC Micro. 

Before we get into connecting anything to the IEE488 interface we need to start with the basics and that is how to enter the IEE488 filing system:

*IEEE

Now we are able to use the IEE488 commands and it takes some getting use to how they are used and work; please go over the user guide. I will give some examples though, with this first one:

CMD%=OPENIN("COMMAND")
PRINT#CMD%,"STATUS"
INPUT#CMD%,STATE%
PRINT STATE%

The first line opens up the command channel and on the second line we issue the STATUS command. Note that PRINT# writes to a data file which is, in this case, the IEE488 filing system. On the next line we actually get the status of the interface, which is placed into variable STATE%, which we then print out on the last line and should be the value 1024. The user guide lists what the value means but in summary the main significance of 1024 is that the command file (channel) has been opened. Unfortunately with this test, it doesn't actually test the interface as such as you'll get the same value regardless of whether the interface is on or not.

Now on to a very simple test of the interface but first let's look at the IEE488 pinout:

http://www.interfacebus.com/Design_GPIB_Mechanical.html

I found that pin 12, pins 18-24 are all internally connected in the Acorn interface so any one of them can be used for GND.

For this test connect an oscilloscope or logic analyser to pin 17, Remote Enable, and GND, and with the interface on you should see the signal at roughly 3.4V. Then issue the following:

CMD%=OPENIN("COMMAND")
PRINT#CMD%,"TIMEOUT ON"
PRINT#CMD%,"BBC DEVICE NO",7
PRINT#CMD%,"CLEAR"
PRINT#CMD%,"REMOTE ENABLE"

You should see Remote Enable drop to 0V and then if you follow up with:

PRINT#CMD%,"REMOTE DISABLE"

Remote Enable will return to its previously higher voltage. A very simple test but a fairly easy way to check the interface is doing something. Just to go over that on the second line we turn the timeout on so that when we use clear, the system doesn't hang, and we have to use clear to be able to use remote enable or remote disable (and clear should be used anyway to reset the devices). To be able to use clear, however, we have to first set the BBC device number, which I have set to 7, as I have just followed closely to the user guide but you can see how there is a minimum number of commands just to do something simple.

Concept A3-128 Keyboard

The A3-128 Concept keyboard from The Concept Keyboard Company (originally Star Microterminals) is a keyboard-like peripheral for the BBC microcomputer that came about in around 1985. As well as being supported by the BBC microcomputer it could also be used by the Master, and the RM Nimbus and Acorn Archimedes with fitted user ports. The keyboard features an array of touch sensitive square 'cells' (using underlying flexible membranes) arranged in a grid of 16 x 8 numbered 00 to 127 as well as USER, REPEAT, BLEEP ON/OFF and SHIFT LOCK pads. The idea behind the concept keyboard was to provide an alternative form of input that either would provide specific functions (imagine an array of buttons to operate a machine where a QWERTY keyboard would not make sense) or help those with disabilities to still be able to use a computer. Bought new, or second hand complete, the keyboard came with a user port connection cable, software floppy disk, user guide and plastic overlays.

Have a look at the A3-128 below:

The overall dimensions of the Concept keyboard are approximately 440mm x 310mm x 28mm, the inner large area for the overlay is 420 mm x 300mm (the size of A3 paper) and the 16 x 8 key area measures 390mm x 240mm. There was also available a Concept keyboard model A4-128 which an appropriate size area designed for A4 overlays, and an A3-256 with an overlay size of A5 and featuring 256 keys arranged in 16 x 16 grid. The keyboard draws power from the connected microcomputer's user port and is rated at 5VDC @ 140mA max but I measured a draw of only 43mA.

As you can see in the image above, there are a number of lights in line with the large pads; the LED to the left of the USER pad is the power light, the LED to the left of BLEEP ON/OFF is the data accept light (illuminates when a cell is pressed) and the LED to the right of the SHIFT LOCK pad indicates the shift lock on/off status.

The USER pad does not normally do anything; it's an on/off switch that the user can connect whatever they wish to and is rated for maximum of 5V @ 20mA. The repeat pad functions in conjunction with the main cells by continuously sending the cell code instead of just once with each press. The use of the BLEEP ON/OFF pad decides whether to make a sound when a cell is pressed using the internal bleeper. The shift lock when activated allows the main cells to effectively have a second function; instead of outputting the value written on the cell the values range from 128 to 255. The keyboard does not support multiple presses; only one value will ever be sent from the keyboard.

The only connection to the keyboard is via a male DB-25 connector at the back of the unit (see it sticking out top left in the photo above) which, via the appropriate cable, connects to the BBC microcomputer's user port. Later revisions of the Concept keyboard feature both a serial (RS232) and user port connector; use of the serial connection requires an external power supply to be used to power the keyboard.

I could not find a definite release date for the Concept keyboard but the following article is from 1985:

http://chrisacorns.computinghistory.org.uk/docs/Mags/AU/AU_May85_ANewBreedOfKeyboards.pdf

It mentions that the A4-128 has been out for a year and that the A3-128 and A3-256 are available. The article lists the prices (without VAT) as; A4-128 @ £90, A3-128 @ £114 and the A3-256 @ £156. There is also reference to yet to be released A2-128 and A2-256 keyboards but they are either very rare or were never actually released.

You can download the Concept keyboard user guide from:

http://www.8bs.com/othrdnld/manuals/hardware/concept_keyboard_user_guide_pdf.zip

I paid £23 for a secondhand A3-128 which came as just the keyboard itself and no accessories as I figured I could make up a suitable cable and write some test software.

With regards to the Concept keyboard's user port connector I will now present the pinout. Looking from the back of the keyboard and toward the connector pin 1 is top left.

1 User pad                              

2 User pad

3 D7

4 N/C

5 0V

6 D6

7 D5

8 D4

9 D3

10 D2

11 D1

12 D0

13 Negative strobe

14 Positive strobe

15 N/C

16 N/C

17 RS232 serial data out

18 N/C

19 N/C

20 N/C

21 N/C ?

22 N/C

23 N/C

24 N/C

25 Regulated +5V in

I found various pinouts for the keyboard in a number of different versions of the user guide available onilne but even though my keyboard presumably isn't MK II (as it does not have the serial port connector) it does internally have connection to pin 17 even though the components for the serial connector aren't fitted (see the circuit board below). From my understanding the serial data connection on a MK II is available on both the user port and the serial connector. I've put a question mark by pin 21 as supposedly there should be no connection but there is on my keyboard and is to do with the unpopulated components.

Just 2 screws hold the circuit board in place and they are located on the user port connector side; the circuit board will slide out but be very careful to not break the 2 flat flex cables from the keyboard that are attached to the circuit board.  You can see the board below:

At the left of the photo above you can see the area where there are unpopulated components which possibly would be for the serial port connection. Note that while the visible side of the board uses what look to be bare tracks on the other side of the board the more usual protected green tracks have been used although they are 'wrinkly' as was quite common in the 80's. On the back of the board it is marked as 'S1070-01-03'.

The 2 rectanglar red components are octal diode arrays, and the connector below them looks to be for the cell column selection; the 74HC154 IC (4- to -16 line decoder/demultiplexer) most likely selects a column. There are 2 74HC04 (hex inverter) chips in the middle of the board, which is used for some simple logic, such as to provide positive and negative strobe. The large IC on the right is an INS8048, an 8-bit microcontroller which looks to be scanning the cell rows (with the row connector below the chip) and communicating with the user port. Lastly to mention is a QMB-111 magnetic sounder at the far right of the board along with a transistor to drive it.

Beyond using the Concept keyboard with one of the originally intended computers there is no reason why it cannot be used with more modern computers by building a 'bridge' of some sort between the computer and the keyboard such as by using an Arduino or Raspberry Pi. Speaking of the Arduino, as a very simple way to test the Concept keyboard I wrote a sketch which outputs to the serial monitor the value of the cell that is pressed. The sketch is called 'BBC_concept_keyboard_test.ino' and is downloadable from the bottom of this page. Write the sketch to an Arduino Uno/Nano and connect up the keyboard to the Arduino  (I wired up my own lead); check the Hardware setup section near the beginning of the sketch for how to connect the Concept keyboard to an Arduino. Please note that the sketch is very simple and I put it together quickly so it doesn't present the best way to achieve the result but it does the job. .

Once connected up, open up the serial monitor and observe that whenever you press a cell on the Concept keyboard the cell value will appear in the serial monitor.

Now to explain how the sketch works:

In the setup() function we initialise the serial port and then set up the Arduino I/O to be used as inputs with the internal pull-up resistors enabled. Inputs keyD0 to keyD7 read data bits D0 to D7 from the keyboard which represents the cell value of the key pressed and keyStrb is wired to the negative strobe output of the keyboard. When a cell is pressed the negative strobe transitions from high to low briefly. By using an interrupt, enabled using attachInterrupt() in setup(), we can respond as soon as a key is pressed rather than having to continually check. Note that on the Uno and Nano only D2 and D3 can be used as an interrupt source.

In the loop function we wait for showkeyValue to become high which only happens when an interrupt occurs (a cell is pressed) which causes the readKeyValue routine to be called. In readKeyValue(), keyValue (the pressed cell value) is reset to 0 and then a loop is entered which checks whether currently each bit of D0 to D7 from the keyboard is set. If a bit is set then the appropriate power of 2 value is OR'd with keyValue, effectively setting the matching bit; note that bitSet() could alternatively have been used. Lastly showkeyValue is set to true so that in loop() the cell value will be picked up and displayed by outputting keyValue to the serial monitor using Serial.println(), before clearing showkeyValue to false to prevent the same value being displayed multiple times for one press. While we could have called Serial.println() in readKeyValue() it's always best to keep the interrupt routine as short as possible.

Second Processors

Please go to BBC Micro Second Processors.

Repairs, Tips & Tricks

Keyboard Problems

Please visit this site for help on fixing a number of different BBC micro keyboards:

http://www.8bs.com/submit/subkeyboard.htm

From my own experience, I had a BBC Model B with a non-working 'X' key so I opened up the computer, removed the keyboard and used a multimeter in continuity mode with the probes on the 'X' key switch to see of the key was faulty which indeed was the case, as when I pressed the key there was no response from the multimeter. So I first used an air duster to give the keyboard a good clean and then I used some contact cleaner (branded WD40), spraying it on the switch (which is quite difficult to get to considering its position amongst the other keys) while holding the keyboard right way up. I then pressed the 'X' key multiple times and after fitting the keyboard back and powering on the micro the key worked multiple times. So, before resorting to more drastic measures, such as removing the switch and attempting a repair or replacing it, try a good clean first to see if that fixes the problem.

It's also quite common for some keys to fail on a BBC master but other than replacing the entire keyboard it is possible to change individual keys for working ones. However, there are a variety of different key switch types used for the BBC master computers, some of which can be opened up and fixed once they are removed from the keyboard. For my BBC master, I found that the keys switches could not be opened up and so I had to order some replacement ones. I then found I had a keyboard from what I believe to be an Atari 800XL that uses the same key switches as in my BBC master, so if you have any spare retro keyboards laying around it may be worth check if the switches are compatible.

Language?

If when you switch on your BBC Micro you are met with 'Language?' then the computer cannot find the language (BASIC, etc.) ROM so power off, open up the BBC Micro and try re-seating the language ROM. If the ROM or chip socket contacts look bad use some form of contact cleaner and if the IC holder is in a really bad state it will need to be replaced.

No Colour on Video Out

By default the BBC Micro does not output a colour signal on the video out (composite) connector so you will only get a monochrome image. To enable colour for issue 4 and later boards simply fit a jumper shunt to S39, located close to the video out BNC connector. For issue 3 and earlier you will need to make the link yourself for S39 and may also need to fit C58 which will need to be 470pF. 

Noise from speaker

If you hear loud. constant noise from the internal speaker but sound otherwise works then you may need to renew the electrolytic capacitors on the -5V rail in the power supply  but only do so if you are confident, if in doubt get someone else to do the repair for you. As a sort of temporary 'fix'  you can turn down the internal volume control, see post 5 at:

https://stardot.org.uk/forums/viewtopic.php?t=12684

Second Processor

Because the BBC master can also use an internal second processor you must tell it that you want to use an external tube device by issuing:

*CONFIGURE EXTUBE

*STATUS should then show ‘External tube’ in its output. If your Master has a working internal battery the setting will be saved.

Servicing the Power Supply

If you have not used your BBC microcomputer in a long time or obtained one from someone that did not service the computer it's very important that you (or someone else) at least services the power supply. There are a couple of interference suppression capacitors in the power supply that dry up and when the power supply is turned on they are very likely to explode, causes a large bang and smoke to pour out of the computer. While it is alarming to see (as witnessed by myself) and the smell is horrid, usually the power supply will survive but even so it's best to replace the capacitors before they go bang.

Please see this video instructing how to repair the BBC microcomputer power supply but only attempt a repair if you really know what you are doing; it's better to have someone else service the power supply if in doubt:

As the BBC Master power supply can also suffer from the same exploding capacitor problem, a Master's power supply should also be serviced sooner rather than later.

Slow to turn on

Normally, the BBC Micro should make a short bleep when turned on and the BBC BASIC screen should quickly appear, however, if the computer takes many seconds to turn on it could possibly be the power supply at fault, possibly one of the suppression capacitors is on its way out. Please see the 'Servicing the Power Supply' section for more information.

User Port Faults

Although a mouse is not something commonly associated with the BBC Micro they were available and typically connected to the micro's user port and required special software, with GEM being an example of a package that supported a mouse. I had wired up my own adapter to convert a Commodore mouse to work with my BBC Micro's user port, just as I had done a similar thing to get a Commodore mouse to work with an Acorn Archimedes computer. But when I loaded up the GEM software I could only move the mouse pointer vertically; any attempts to move the mouse from side-to-side resulted in tiny movement horizontally back and forth.

After double checking my wiring I tried another Commodore compatible mouse which had the same issue with lack of horizontal movement and after swapping the horizontal and vertical signals and still getting movement on only one axis I was convinced the fault was the BBC Micro's user port. So I disconnected the mouse and in BASIC tested the user port by setting port B (which is the digital lines on the user port as part of one of the 6522 IC's) to all inputs and then read in the value, which gave me 254 (&FE), strongly suggesting that PB0, which has one of the mouse's horizontal signals connected to, was being held low due to a fault in the 6522. As to further test, I set port B to all outputs and although I was able to turn on and off an LED connected to  a a known good pin I was unable to get PB0 to drive the LED (which always glowed dimly as if stuck in input mode).

Please see this site for some very helpful information if you need to test a BBC Micro/Master's user port:

https://stardot.org.uk/forums/viewtopic.php?t=11671 

Unfortunately, as I was using a BBC Master the 6522 (IC6) isn't socketed so I would have to desolder it before I can put in another (it's a good idea to use a chip holder to make future replacements easier). On a BBC Micro B, however, the 6522 (IC59) should be socketed and so more straightforward to change but it's worth reseating the original IC first to see if that fixes any user port issues before trying a replacement IC.

Resources


Advanced User Guide (links in the forum post):


https://stardot.org.uk/forums/viewtopic.php?f=42&t=17242


Assembly Language Programming for the BBC Microcomputer (links in the forum post):


https://stardot.org.uk/forums/viewtopic.php?t=13722


New Advanced User Guide (links in the forum post):


https://stardot.org.uk/forums/viewtopic.php?f=42&t=17243


The Advanced Disk User Guide For The BBC Micro

http://archive.retro-kit.co.uk/bbcdocs.com/filebase/hardware/AdvDiskUG.pdf

Software

EXMON

EXMON is an extended machine code monitor from Beebug soft, which had at least 2 versions made, which were available in ROM form; the first one came on an 8KB ROM. It's very convenient having a machine code monitor built in to ROM, having it available 'instantly' rather than having to load from disk, and using very few resources of the computer.

The manual for the original EXMON can be found at:

http://8bs.com/othrdnld/manuals/applications/Exmon-manual.zip

This is the version that will be covered here.

For version 2 the manual can be found here::

http://8bs.com/othrdnld/manuals/applications/EXMONIImanual.zip

The EXMON monitor relies on the BASIC ROM being installed and should be called from BASIC, but is also mindful of it, so you can edit a basic program, and move between BASIC and EXMON while preserving a BASIC program (provided you don't alter it in EXMON).

To enter EXMON, call it as a 'star' command:

*EXMON

Alternatively, you can use the shorthand:

*E

This is the screen you are greeted with:

At the top of screen are the 6502 saved registers and their values, which will be restored when executing a program. The top 4 bytes of the stack (if there are any) are also displayed on the same line. This is followed by a hex and ASCII memory dump of 128 bytes from address 0 and a '?' prompt at the bottom, waiting for a command.

Use '?' (the same character as the prompt) to get a list of commands, which will give you this screen:

We will now go over a few examples of using EXMON but please read up on it and play around with it to get a better sense of how useful it is. Something to get used to is that often you will not need to press return to enter a command, it will automatically execute as soon as you give it enough information. Additionally, the cursor will automatically move, adding a space or other character as you type. For example, to list memory with hex values and ASCII, use the List memory (L) command, such as below:

As soon as you type 'L' a space will be added and then you type the start memory address (in hex); the commands on this page will be presented as they appear so no need to type the space character, which will be ignored anyway.


A right arrow will appear once you have completely typed the start address; at this point, if you press return 104 bytes from and including the start address will be displayed:

The cursor will be flashing at the bottom right of the screen, press either shift key for the memory dump to continue or escape to return to command input.


To display a memory range, type an end address in addition to the start address, for example:

L 0596->05A0

(Don't forget, the space and right arrow characters will automatically be added.)


You can also use an offset to specify how many bytes to display in addition to the start address, for example:


L 0596->+20 

Will list memory from and including &0596 to &05B6.


To edit memory us the Edit command (E), such as:


E 0596


As seen below, you will then be shown the current value at the memory location specified (&FF in the screen capture below), and prompted for a new value (&4A). After typing the value to put to memory, the next memory location and its current value are shown, so you can type the next new value, and so on. Press escape when you no longer want to edit memory, or return to skip a memory location, or space bar to go back an address.

In the example above I chose memory locations not normally used (in BASIC at least) and inputted the ASCII values for my name (JAMES). Of course, you can enter any types of values you want but for entering ASCII values into memory there's actually a dedicated command, the ASCII to memory command ("). This is an example of using the command, which accomplishes the same as using the Edit command, to put my name into memory:


" 0596 "JAMES

(The second double quote is added automatically.)


You have to press escape to terminate and input the string to memory since pressing return will enter the return code value to memory.


A very useful command is the Change panel command (T), letting you set the 'default' screen memory dump when you press return, by specifying a start and end address, like this:

T 0596 05A0


Note that you must give it a start and end address, or start address and offset; you cannot press return after the first address has been entered, otherwise the command will be cancelled. Once the command has successfully been given, you only have to press return to display the memory range specified, which is very handy for monitoring certain parts of memory, for example.


We can enter assembly language mnemonics using the Assemble (N) command, by specifying a start address, such as:

N 0596


This will prompt for you to enter the mnemonic to be placed starting at the address specified, in this case starting at &0596. Enter each instruction, followed by return and it will move to the next appropriate  memory location (provided you entered a correct assembly language instruction), and press escape when you have finished.


As seen below, I have written a simple program to add the byte from &50 to the accumulator and store the result to &51:

Note that addresses &50 and &51 are not normally used by the system nor EXMON.


To disassemble memory to assembly language mnemonics, use the Disassemble (D) command, specifying the start and end addresses to disassemble from and to, like this:


D 0596 059D

The disassembly includes the address, instruction values, ASCII dump, and mnemonics.


Going back to the simple addition program from earlier, we can run it in a number of different ways but first we need to set the accumulator register to some value, which we can do with the Set accumulator (A) command, like this:

A 34


The accumulator will now be set to &34, which you can see below:

The other registers can be edited with the X, Y, S, P and @ commands.


Back to the program I put into memory, to use it - as well as setting the accumulator to some value - you will also need to set memory &50 to a value using the E command. Then the program can be run using the JSR (J) command:


J 0596


You will see the accumulator value change at the top of the screen to the addition result (&34 + &10 in my case) and if you view memory &51 you will see it has the same value:

As well as running the program without interruption using the J command, we can also step through it one instruction at a time, useful for debugging, by using the space bar


First, set the accumulator to a different value, and change memory &50 if you want (or keep it as the same value if you like), and put the PC to &0596 using:


@ 0596


Keep pressing the space bar to execute each instruction (as below), observing how the current register values are displayed inline with the top of the screen, until RTS is displayed. Don't press the key again, instead press escape as we don't want the RTS to be executed, which would cause a jump to unintended address.

This time, &22 and &10 were added together.


We can also run the program using the Execute program (GO) command, letting us take advantage of breakpoints. As we have only a simple program and we don't want the RTS instruction to be executed (as only the JSR command treats it as a subroutine), we will need to set up a breakpoint on the RTS instruction:

B 059B


You will then see the breakpoint listed at the bottom of the screen.


Set the accumulator again to some value and alter memory &50 to a different value if you want, and set PC back to &0596, like in the following image:

Type GO and press return, and the program will be run and the screen will refresh with the addition result showing in the accumulator at the top of the screen and also in memory &51.


To end this section, just a few tips:


Break resets and reenters EXMON.

OS commands (star commands) can be executed at the prompt by typing them and pressing return.


EXMON uses locations &08 to &4F as workspace so you shouldn't alter them for normal running of EXMON.

Emulation

Using the original hardware is always the way to go for the best experience, however, retro computers can be expensive and take up considerable space. Fortunately, there are a number of emulators which recreate a BBC Micro (or other Acorn computer) on a modern computer, providing a convenient means to 'own' a BBC Micro, with other advantages, such as ease of loading software by making use of virtual tape and disc files (images).

I decided to try the BeebEm emulator, which emulates the BBC Micro and Master, and is considered as one of the best Acorn emulators. The official page can be found at:

http://www.mkw.me.uk/beebem/

The emulator is available for various operating systems, including Windows, Linux, and Mac, and is open source. The GitHub, containing links for the emulator executable and source code can be found at:

https://github.com/stardot/beebem-windows/releases

As of September 2023 the most recent version of BeebEm is 4.19, released 1st May. I downloaded the BeebEm419.exe file and ran it, which installed the emulator. When run, BeebEm boots straight into emulating a BBC Micro model B, as seen below:

Let's write a simple BASIC program and run it:

The emulator provides a wealth of options, for example, take a look at the file menu:

You can load disc and tape images, there is support for save states, as well as taking screenshots and recording videos. Very handily, the edit menu allows pasting text into the emulator and the copy option forces a LIST and copies the program listing and the LIST command (shortened to 'L.') to the clipboard. Other options include video options, available from the View menu, which let you change the window size or go into full screen, and change the type of video monitor being simulated. The View menu also lets you simulate various LEDs (disc and keyboard) at the bottom of the window, and the Sound menu, which gives you numerous options for adjusting the sound, also lets you emulate cassette and disc drive sounds. By default disc drive sounds are emulated, to disable click Sound->Sound Effects->Disc Drives to uncheck the option.

For changing the type of computer being emulated you can go to Hardware->BBC Model; choosing a different model restarts the emulation. Other features of the Hardware menu include options for Teletex and Econet, and selection of a second processor, for example here is the ARM second processor selected: 

The Options menu gives access to various peripheral settings, such as joystick, configuring the keyboard, as well as access to the debugger:

Lastly, it's worth mentioning that clicking Help->View Help takes you to the BeebEm main page (local version). 

All content of this and related pages is copyright (c) James S. 2016-2023