What was the 1 MHz bus used for on the BBC micro series and how did it compare with the TUBE in terms of speed/bandwidth?
I read somewhere that EPROM programmers used the 1 MHz bus, but anything else?
Retrocomputing Stack Exchange is a question and answer site for vintage-computer hobbyists interested in restoring, preserving, and using the classic computer and gaming systems of yesteryear. It only takes a minute to sign up.Sign up to join this community
The so-called "1MHz bus" is not actually a separate bus. It is just the set of devices which were too slow to run at the full 2MHz in the original BBC Micro, and which therefore incur a clock-stretched cycle when accessed. These include most of the SHEILA (
$FExx) devices, except for the Econet, floppy, Tube, VIDPROC, and memory mapping registers.
The 1MHz extension bus, one of the ports under the keyboard, additionally includes buffers to prevent 2MHz cycles from going out on an unpredictable user-supplied set of cables and electronics, which would otherwise potentially cause trouble. The BBC Micro reserves the FRED (
$FCxx) and JIM (
$FDxx) pages which directly map to the extension bus.
JIM is, by convention, reserved for large memory expansion devices, some of which have additional functionality such as advanced video framebuffers. Four registers at the top of FRED are reserved as paging registers for such devices. This allows supplying up to a 40-bit address (1TB) to a JIM memory - pretty forward-looking.
A partial list of devices that map to FRED:
&FC00-&FC03 Byte-Wide Expansion RAM &FC08-&FC0F Ample M2000 MIDI Interface (see also FCF0) &FC10-&FC13 Teletext Hardware &FC14-&FC1F Prestel Hardware &FC20-&FC3F SID Interface &FC20-&FC27 IEEE Interface &FC28-&FC2F Electron Econet &FC30-&FC3F Cambridge Ring interface &FC40-&FC4F Hard Drive Access &FC50-&FC5F &FC60-&FC6F Electron Serial &FC70-&FC7F Electron expansion &FC80-&FC87 LCD Display Control &FC88-&FC8F &FC90-&FC9F Electron sound and speech &FCA0-&FCAF &FCB0-&FCBF Electron 6522 VIA expansion &FCC0-&FCCF Morley Electronics RAMDisk &FCC0-&FCCF Electron floppy disk expansion &FCD0-&FCDB &FCDC-&FCDF PRES Battery-backed RAM &FCE0-&FCEF Electron Tube expansion &FCF0-&FCF7 JGH/ETI MIDI Control (see also FC08) &FCF8-&FCFB USB port &FCFC-&FCFF Page-Wide Expansion RAM
The 1MHz bus and the Tube can't really be compared in terms of speed, because they do totally different things. The Tube is specifically intended for attaching a Second Processor, which includes a protocol and buffers for the necessary communications between the application code and the "I/O host" that the BBC Micro itself then becomes. Indeed there is an OSBYTE call specifically for allowing the Tube to access the 1MHz expansion bus (or other) hardware devices.
The Tube protocol allows transferring 256 bytes of bulk data at a rate of 10µs per byte - which is 20 cycles at 2MHz. The following loop is capable of transferring 256 bytes from JIM to an arbitrary main memory page at 16 cycles per byte:
LDX #0 : LDA $FD00,X ; normally 4 cycles, but JIM access stretched to 5 STA (dest),X ; 6 cycles INX ; 2 cycles BNE :- ; 3 cycles per taken branch
Unrolling this loop could speed it up a little more.