[BBC-Micro] Ground Control UTA-1 Teletext Receiver: The Gory Details

Philip Pemberton philpem at philpem.me.uk
Wed Feb 10 01:11:58 GMT 2010

Hi guys,

I've been doing a bit of reverse-engineering this evening... I hacked my 
copy of the RPCEmu RiscPC emulator to log I2C requests, and ran the 
driver for the Ground Control Teletext interface (or rather Rick 
Murray's !Teletext) inside it. Miraculously it worked well enough to get 
some useful protocol traces. I've figured out a few of the unknowns 
about the hardware, which I just happen to feel like sharing with you 
lucky folk :)

Note that this is the first time (that I know of) that the UTA-1's 
secrets have been publicly disclosed...

== Hardware ==
There are two (known) versions of the Universal Teletext Adapter: the 
UTA-1, and the UTA-3. Both devices are based on (essentially) the same 
chipset, but differ in the tuners used to receive the signal:

   * The UTA-1 uses a Mullard "dumb tin-can" tuner and a Philips SAB3036 
"CITAC" chip. The CITAC feeds a 32V tuning voltage to the tuner can, 
which adjusts the frequency of the tuner. This tuning voltage is 
controlled by a frequency-locked loop in the CITAC. The CITAC is 
accessed via the I2C bus.

   * The UTA-3 uses an all-in-one tuner module, which sits directly on 
the I2C bus. The CITAC (or a similar part) is inside the tuner can.

There's a page on Rick Murray's website which has annotated photos of 
the UTA circuit boards, and some info on cabling. See 

Both versions of the UTA have three ports on the front -- the antenna 
socket, the Aux port (which carries composite video and mono audio), and 
the Data port. The latter carries I2C clock, I2C data, and ground. 
Annoyingly, Ground Control used the same connector for both sockets -- a 
5-pin 180-degree DIN. This makes it easy to mix up the two connectors...

Pinouts for both ports are on Rick Murray's website, see above link, 
then select "How It Works".

Both UTAs appear to use a Philips EuroCCT Teletext receiver. The UTA-1 
uses an SAA5240 EuroCCT with an SAA5231 VIP (data slicer). The UTA-3 
uses an SAA5243 EuroCCT with the same VIP chip. Programming of these ICs 
is essentially identical; the VIP is not present on the IIC bus, but the 
SAA524x is. The SAA524x is accessed using I2C addresses 0x22 and 0x23.

== Tuning the UTA-1 ==
To tune the UTA-1 to a given frequency, you first need to initialise the 
tuner module. This should be done every time the frequency is changed 
(just in case the UTA has been power-cycled between the last and current 
tuning events).

To initialise the UTA, send the following:
   s C0 29 0D p

s = "I2C Start"
p = "I2C Stop"
[0-9A-F][0-9A-F] = a hexadecimal byte to send

This sets:
   Tuner current -- Imax=875mA, ITmin = 250uA us, delta-VtunMax 250uV
   Tuning window -- 100kHz

Now we need to do some maths.
If you're tuning based on a UHF Channel number (from 21 to 69):
   TunerValue = ((ChannelNum * 160) + 6848)

If you're tuning based on a frequency (the centre frequency):
   TunerValue = (UHFFreq / 50) + 728

If you're tuning based on a frequency (the vision carrier frequency):
   TunerValue = (UHFFreq / 50) + 783

Now take TunerValue and OR it with 0x8000 -- that is, set the most 
significant bit. This is the "Instruction" bit for the CITAC. Split it 
up into two bytes, then send them to the CITAC like this:

   s C0 aa bb p

s = "I2C start"
p = "I2C stop"
C0 = CITAC write address
aa = (TunerValue >> 8)    -- the most  significant byte of TunerValue
bb = (TunerValue & 0xff)  -- the least significant byte of TunerValue

If you want to find out if the tuner has locked on, then you need to 
read the CITAC's status register. This is done as follows:

   s C1 g p

s = "I2C Start"
p = "I2C Stop"
g = "I2C Read" without ACK
C1 = CITAC read address

Take the byte returned in "g", and if the most-significant bit (0x80) is 
set, then the tuner is locked. If it's clear, the tuner is unlocked.

== Tuning the UTA-3 ==
See "How it Works: Ground Control Teletext Adapter" 

== Programming the SAA5240/SAA5243 ==
I need to get hold of a copy of the SAA5240 User's Manual before I can 
write this section.... anyone have a spare copy to sell or donate? It 
doesn't seem to have been scanned and put online (though IIRC, parts of 
the SAA5243 manual were uploaded to someone's Freeserve homepage a while 

The SAA5243 is, to the best of my knowledge, near identical to the 
SAA5240 (from a programming perspective).

Note that the UTAs only have 2K of RAM, and operate in Ghost Row mode. 
A0-A9 are wired to the RAM as-is, A10 and A11 are (typically) 
open-circuit, and A12 is wired to A10 on the RAM. This allows the 
EuroCCT to save the extended Teletext packets into the RAM where A12=1. 
This allows the EuroCCT to save data related to e.g. Fastext page links.

Unfortunately this also means that while the SAA524x chips can grab four 
pages of Teletext at a time, the limited RAM available (and its address 
wiring) means you can only grab a single Teletext page at a time on the UTA.


Comments (and constructive criticism) gratefully received. A copy of the 
SAA5240 manual (PDF or dead tree) would be even more gratefully received 
(hint hint) :)

philpem at philpem.me.uk

More information about the bbc-micro mailing list