A History of my Adventures with Teletext

If you've come here looking for the history of the BBC's Ceefax service, unfortunately you're in the wrong place; this page will cover only my own generated services.

Unfortunately I didn't possess a smartphone until around 2017; whilst other photography equipment was available prior to this, one tends not to bother taking photos of anything without specific significance; as such the first parts of this article are a little light on photos.

I first became aware of the VBIT-Pi, and other Raspberry Pi teletext-related goodness, as a result of an obsession I have with electronics in general, and broadcasting, specifically televisual broadcasting, in particular.

NMPTV Presentation Gallery
NMPTV control desk in 2015; I still have most of this equipment, but very little of it is still in regular use

Since a young age I've had an internal TV service of sorts, distributed around the house alongside the traditional broadcast services; the exact specifics of this I won't go into here, (perhaps a future article?) but the gist is I could 'broadcast' programmes and other material for anyone in the house to view when I pleased, from my 'control room' in the attic. I enjoyed attempting to 're-create' the analogue TV service - and after being gifted and Raspberry Pi in school, (and buying a fellow student's for £10), I was interested in using it to add further 'realism'.

My original Raspberry Pis
My two original Pis circa 2016; One of these still serves as a playout server for the channel

After discovering it's uses as a caption generator, I wondered if it could perhaps be used to generate a NICAM signal; It was during research for this brainwave I stumbled across Peter Kwan's VBIT-Pi project, and Alistair Buxton's AVR-Teletext. Having thus been reminded of the existence of teletext, the idea of generating my own service to run on my TV service became firmly hooked in my mind.

Early Attempts

Early NMP Teletext Service
The earliest teletext file I have; the 'date created' field says late 2016, but I'm almost certain the true date is a year prior.

It didn't take too long for me to discover that I didn't have to build a physical inserter board, Buxton's Raspi-Teletext combined with Kwan's VBIT-Pi-Stream could create a valid teletext service with nothing but a standard Pi. I also learned how to use wxTED to design my own teletext pages. As my clearest memories of teletext are of Ceefax, my main goal was to produce a similar news-based service. This quickly morphed into a re-creation of Ceefax.

Early NMP Ceefax Service
P100 of the first NMP Ceefax Service

The biggest issue with this plan was updating the content; The only way I had of updating Ceefax news was manually typing in stories from BBC News, which is obviously extremely time-consuming. While the front page may have declared twice-daily updates, in reality it only got updated every 2-3 days at best, with maybe only 1 or 2 news pages. I should point out that at the time I had never written a line of code in my life; However, it did occur to me that it shouldn't be difficult to make the computer do all this typing for me. Luckily for me, I wasn't alone in this thought - in mid-2016, Peter Kwan released 'makenews': this was a set of PHP scripts which would automatically scrape the BBC's RSS Newsfeed and produce a full Ceefax news service in a matter of minutes.

Ceefax Failure!
Ceefax was a major casualty when my laptop's hard drive died in late 2016 - losing all my modified code in the process

Now, as I've just mentioned, at this time I'd never written a line of code in my life; but it wasn't too long until I wanted to try modifying Peter's code to adjust some things, and replace the BBC's Logo with mine. After spending considerable time reverse-engineering the code and modifying lines "to see what would happen", it became obvious that I wouldn't achieve this without outside help. As such I emailed Peter several times to pester him with silly coding questions; I have since lost the emails, which is probably just as well since they'd likely make me cringe in horror.

My first code-produced weathermap
My first weather map produced soley by code was very basic, but functional. Coloured regions wouldn't appear for another year, and re-definable regions a further year after that!

Peter was very helpful, explaining how I could fix all my coding mistakes and offering to examine my page files when I inevitably broke something in them. You could say that it's thanks to him and Ceefax that I write code to this day, hopefully to a greater degree of success than at that stage. In any case, I learned to modify his code to do my own thing, and even began writing my own scripts to produce more pages. So much so, by November 2016 my service consisted of national and local news, weather and basic TV Listings.

Throughout 2017, I kept writing more code and adding more pages; by the end of the year, magazine 1 was complete except for newspaper headlines, which incidentally has never happened since; Mag 2 had a finance index page which was automatically updated; mag 3 had football results; mag 4 had national and regional weather; mag 5 had entertainment news, and mag 6 had TV listings. In fact, looking back through the service at that time, there are a few pages available then that aren't available on the current service, hmm. This meant that apart from maintenance, the service had everything I wanted it to have; as such, I began to turn my attention to a long time goal, building my own VBIT-Pi.


VBIT-Pi Boards
My first VBIT-Pi boards fresh from JLCPCB

Once again Peter was very kind in sending over all his original design files and offering advice when things didn't work out. This is somewhat a cautionary tale, the moral of the story being 'no matter how obvious a fault may seem, test it before ripping a mostly-working board apart'... Having never soldered SMD components before, it took me a while to get the hang of it, especially the tiny pins on the video Codec pair. But with my first board built, and none of the pins shorted as far as I could make out, it was time for testing. Perhaps one issue was that I really didn't expect it to work; as such, the fact that it didn't came as no big surprise, but considerable dissappointment.

This is where I messed up; rather than test the board to see why it wasn't working I immediately jumped to the conclusion that my hot soldering iron, combined with how long it took me to solder the main chips, had heat-damaged them. Now as it's particularly difficult to un-solder these chips, and I had 5 PCBs, I decided to simply build another board. It was at that point I realised my mistake with the first board, I'd ordered the wrong resistor for the power rail and it was not making 3.3v, closer to 1v. Unfortunately I'd already ruined the first board by this stage trying to remove the sockets for re-use, but at least I now had the second board; However, it also failed to work.

NMS UHF TV Transmitter
The NMPTV transmitter, still runnning with over 25,000 hours on the clock

At this point, I must deviate from the story slightly to explain my TV transmitter. This contains a Maplin TV Modulator, a power supply and various amplifiers to produce a signal that's then distributed around the house. It's given hours of entertainment, trying to hunt down, and reduce, noise on the picture; In fact it's only within the last year or so that a new and improved power filter circuit for the main amplifier resulted in an almost perfect image. But I digress.

In the earlier days, there was no teletext TV anywhere in my attic, so I tested VBIT-Pi boards by plugging them directly into the transmitter, then running down to the Living Room TV to check the results. As it turns out that's where another problem lay; For reasons I have never been able to determine (not that I've put much effort in, to be fair), the VBIT-Pi produces a horrendously reflected image when plugged directly into the transmitter; It wasn't until I realised that the third board would work plugged directly into a TV but not into the transmitter that I discovered this behaviour. However, that meant my third board worked! Fortunately, the interference issue was solved by putting another piece of equipment in the video chain between the VBIT-Pi and the transmitter; In most cases this was a video titler with the titles disabled.

With my very own VBIT-Pi now working, there were two new projects in my mind: putting the board in a nice, professional looking case, and trying to make some of the revenue back by selling the remaining 2 boards. I won't go into the full build process of the case, take a look here if you like, but I also managed to sell the remaining boards, which covered some of the initial investment. I rather hope there's still one of those original boards out there somewhere in operation, as mine have all since been destroyed.

In-Vision Experiments

Now I had a 'proper' Ceefax service which could be transmitted on top of any video signal with the VBIT-Pi, the next thing I wanted to build was an In-Vision Decoder, with which I could transmit a Pages From Ceefax type programme. I decided fairly early on that building one from scratch would be much to complicated, and so looked for ways to harness already available equipment. One of my first attempts used a TV capture card tuned to my channel and displaying the teletext via DScaler; this worked but didn't decode the pages very well, frequently overwriting lines from other pages and other issues. Also, leaving a PC running 24/7 just to decode an in-vision teletext service is not very sensible, as well as very difficult to build a suitably professional looking case for.

PAL Encoder
My first PAL encoder board

So the next plan was to re-use the decoder card from an 80s TV. As it output an RGB signal rather than CVBS, I first had to build a PAL encoder; for this I used the MC1377 encoder IC. This plan did in fact work, but as I couldn't figure out how to control the card outside of the TV it was of limited use & was only used experimentally.

At this point I decided to try building a decoder from scratch after all; The main requirement was that the chip had to be of the all-in-one variety, as I felt introducing RAM chips and seperate decoder/display ICs would make things overly complicated. As such, the STV5348 IC seemed perfect for the job. I ordered 2 of them and built up the application circuit on a breadboard.

First Decoder Prototype
Prototype decoder using the STV5348

It was at this point I started publicly posting about the project - having just joined the Teletext Facebook group, my first post was a picture of the prototype decoder in action. This began to get some interest from other members. The chip definitely worked, before long I had it decoding pages from the number I typed in via the serial interface. One annoying issue it had was decoding the wrong page momentarily; I put this down to being badly built on a breadboard, but it turned out to do this all the time.

I decided to design 2 PCBs, one for the decoder itself and another for a new PAL encoder design. The thinking behind keeping the two boards seperate was 'if the decoder doesn't work, I can use the RGB converter for something else; or if the RGB converter is rubbish, I can connect a different one to the decoder'. All things considered, my PCB design left a lot to be desired; The PAL Encoder had the wrong sized resistors, so the had to be placed at an angle to fit, and the footprint for the IC (a CXA1645p) wasn't wide enough, so the chip's legs had to be bent in to fit. The decoder featured an inward-facing keyboard connector and reverse polarity CVBS connector. However, the fundamental parts of the boards worked well enough that with only a few bodges I could use them as intended.

First Decoder PCB

This decoder, as mentioned above, did work, but not the most realiable. So it was only used for a short time before I turned my attention building a new one with another IC, the SAA5244. This is a much bigger chip, but with fewer features than the STV5348 - however initial tests proved that it was much more reliable.


At this point in the narrative, we'll take a quick break from In-Vision shenanagins and take a look at what's been going on with Ceefax. The code has been changing significantly in this time; I had pushed some updates to Peter's MakeNews git, but eventually decided I wanted to take it in another direction; thus MakeCeefax was developed. This was designed to be very customisable, and had a few users that I'm aware of. In late 2019, I started pushing a selection of my pages to Teefax; these included weather and sport, but not news as Peter was still looking after this on Teefax.

The pages on Teefax attracted the attention of Alistair Cree, particularly when MakeCeefax threw a wobbly and spat out a bunch of blank pages, which in turn made vbit2 lose its marbles. He requested my Newsreel Carousel (P152) be pushed to Teefax, along with a few other bug fixes and general improvements to the pages committed there.

Back to In-Vision stuff...

First Decoder PCB
The SAA5244 decoder prototype

A few days later, I finished building a prototype decoder using the SAA5244 - it worked incredibly well, and gave me the idea of reviving an earlier project of mine, streaming Pages From Ceefax Live on YouTube. After about an hour with only a handful of viewers, I decided to post a link on the Facebook group; this attracted several of the main 'teletextrs' to view and comment on the stream - most notably Alistair Cree, who was so impressed by the decoder and the content it was decoding, he suggested I make a Ceefax feed available to the general public.

As for the SAA5244, it went on to a full PCB design, which was then sold in small quantities, and remains on-sale at the moment. It is described more fully on it's main page.

Ceefax For All

Thus, my new project was converting my existing code, 'makeceefax', generate both a 'Northern Ireland' feed for me, and a more generic 'worldwide' feed for everyone else. While I did intend to offer regions, I couldn't see an easy way of doing it at the time. 3 days after Cree's initial suggestion, I told him privately of a 'very experimental' Ceefax service running on my server; Almost exactly 10 minutes later it went live on channel 2 of his zxnet teletext viewer.

When I said 'very experimental', I meant exactly that; the services were running from three completely independent piles of code which would fall over at the slightest provocation, and the whole thing was hosted on a Pi which was incresingly showing signs of SD Card wear, but hey, it worked. When Alistair Cree pointed out an easy way to do Ceefax regions, and added some functionality to vbit2 to facilitate this, I was faced with 10 or more versions of makeceefax working on their own, and came to the swift conclusion that it was no longer fit-for-purpose; as such, I completely re-wrote the page generating code and dubbed it "CIMS". CIMS is specifically designed to generate many regional variations of one main service, and works fairly well, even though I say so myself.

CIMS Opening lines of code

CIMS is still producing the service today; there are 8 individual regions available on Ceefax. Work continues (intermittently) to add more features, but most time is given over to maintenance.

And so you are up to date on the history of my NMS Ceefax Service; thanks must be given to Peter Kwan, without whose patience I'd likely have given up on coding altogether, and Alistair Cree, whose idea it was to make the service public in the first place, and who gives continued advice & assistance on technical (and spelling) issues.

- Nathan Dane, 2021

155 views Facebook Reddit Twitter