A quick note about connection timeouts

To maximise site performance and reduce hosting costs, the following limits are imposed:

  1. Inactive connections will be disconnected after 20 minutes of inactivity. Activity includes data sent and received, so for example, a TeeFax session will remain open as the TeeFax service pushes frequent updates.
  2. All connections are subject to a 24 hour maximum.
  3. In this context a connection refers to communication with a Viewdata service.

In both instances you're welcome to immediately open another connection.


The code for this site is now available on GitHub. It targets .NET 5 and should run on any platform where .NET 5 has been installed.


Feel free to contact me (Simon Laszcz) with any queries, suggestions, comments or bug reports (or post them on GitHub).


The site is provided in good faith for entertainment and maybe some education. The site is not responsible for the content of the sites and services made available and is not responsible for any views expressed therein.

The site does not seek to infringe any copyrights, trademarks or intellectual property rights. Please contact the site if you feel that your rights have been infringed in any way.


vd-view is a Viewdata/Videotex web client that can connect to the services listed below.

  • TeeFax also has it's own web viewer.
  • TELSTAR has three connection options:
    • Fast gives an unthrottled connection
    • Slow throttles the connection to simulate the network speeds typical in the 1980s
    • Test demonstrates new features
  • Tetrachloromethane has a long established web client of its own.

Read the Acorn Prestel System User Guide to get a feel for how Viewdata clients work.

Some Viewdata frames may contain flashing/blinking text. It's disabled by default but can be enabled using the Enable Flashing option.

Click to save an image of the current frame. These will be listed in your downloads.

On large displays, click for a full screen display. Some useful keyboard shortcuts are listed later on. Swipe down to exit full screen mode.

Select a service then click Connect. There will then be a short pause while the main index page is loaded.

You can navigate between pages using several methods.

Menu frames display a list of pages or categories and you select one by entering the corresponding menu number, e.g. 1

Most pages also allow you to navigate directly to another page and you do so by entering *nnnn#, where nnn is the page number.

You can either enter text directly or you can use the input and command buttons. Shortcuts are also given for some common Viewdata commands.

On mobile browsers you're limited to using the input field and shortcuts

Sends the contents of the input field, appended with '#'. Just '#' is sent when the field is empty. '#' can often be used instead of and is often used to continue to the next frame.
Sends '*#'. Often used to go back to the previous page or frame.
Sends '*0#'. Go back to the Main Index Page.
Sends '*00#'. Reload the current frame. In a real Prestel system the user would be charged for each page. This command allowed you to refresh a corrupt frame free of charge.
Sends '*09#'. Update the current frame. In a real Prestel system this would update a frame (e.g. one that contained real-time stock prices) in contrast to merely refreshing it.
Send one of the digits, e.g. if selecting a menu option.
Some frames contain content that is initially hidden (e.g. a quiz). This command reveals it. Use Alt+R when in full screen mode.
The saves the current frame to local browser storage so that you can view it offline.
Connect or Disconnect
Either connect to, or hard disconnect from the server. When disconnecting, log off postamble is always sent to the host system.
Log Off
Sends either '*90#' or 'FFF' depending on the current service. Some systems would require you to log off before ending the call with a hard disconnect. The user might have been alerted to new electronic mail for example. CCl4 requests that you do this.
TeeFax Only
Sends 'H'. Pause the frame carousel. Use Alt+H in full screen mode.
Sends '.'. Advance the frame carousel. Use Alt+A in full screen mode.
Sends 'T'. Toggle the header row between clock and FastText labels.
Sends 'Y'. Load the relevant index page.
Sends 'U'. FastText red button.
Sends 'I'. FastText green button.
Sends 'O'. FastText yellow button.
Sends 'P'. FastText blue button.
Full Screen Mode
  1. Swipe down to exit full screen mode.
  2. Swipe left to advance to the next frame (where applicable).
  3. Swipe right to return to the previous frame (where applicable).
  4. Tap to hold the current frame (Teletext only).

Your saved frames are displayed in this section. Click to display a frame. If you load a frame while connected, you can reload the current frame using . Click to remove a frame.


Click Start Download on the header frame (usually the frame after the description frame) of the program you want to download. Use Alt+D when in full screen mode. The client will retrieve each frame. The complete download will be stored in your downloads.

Clicking Save will allow you to store the file on your computer. You may have to rename the saved file to use it in an emulator (e.g. BeebEm).


The editor uses the same viewdata processor as the viewer. The processor is probably less than 100% compliant and probably contains a few bugs. One such bug is that the final row of a Telstar frame is rendered without full-width background colour. Otherwise, to the best of my knowledge, the processor works well with the currently available services.

The editor appends changes to the end of the byte stream. For example, you might backspace and overwrite a few characters but all characters will exist in the stream. In this sense, it's like a one-way stream of bytes sent to a client over the wire.

The bytes sent to a Viewdata client are a mix of terminal control codes (e.g. backspace, tab), Teletext control codes (which are preceded by an ESC character) and printable characters. A byte (ignoring negative numbers) is a number in the range 0 to 255. Terminal codes lie in the range 0 to 127 (although only a few are used). The other two groups lie in the range 128 to 255 (but not all are used). Terminal codes affect the printing position (and the cursor if it's shown) and once processed are discarded by the processor. If the processor determines that a byte is not a terminal code (i.e. it's greater than 127) it will treat it as one of the final two groups of codes. It will discard the highest bit leaving a number in the range 0 to 127. See the Mullard SAA5050 Teletext Character Generator Specification for a description of these codes.

In the Teletext specification, control codes are called Spacing Attributes because once interpreted a space is output in lieu of the byte. You can backspace and overwrite the space if you wish. Some control codes take immediate effect (set-at), while some take effect after the next character (set-after). Starting a new row or frame will reset the attributes to their defaults. Some attributes are changed by other attributes, e.g. changing text height.

See page 76 of Enhanced Teletext specification (ETSI EN 300 706) for a detailed description of these attributes. Here are few recipes for performing some simple effects.

Show the cursor
By default the cursor is hidden. Click Cursor ON to display it. It can be shown or hidden at will.
Move the Cursor
Writing control codes and printable characters will advance the cursor automatically but you can also move it around using terminal codes BS, HT, VT, LF. You can use your cursor keys for these but you'll need to use the onscreen panel for the others. Note that CR (carriage return) moves the cursor to the start of the current row. FF (form feed) clears the screen and moves the cursor to the start of the frame. RS (record separator ) moves the cursor to the start of the frame without clearing the screen. Note that the screen doesn't scroll and the cursor will wrap around. When transmission speeds were slow, it may have been important to move the cursor using as few bytes as possible.
Writing text
Use your keyboard or the onscreen panel.
Changing text colour
ESC followed by an alpha (denoted by A) colour code.
Changing background colour
ESC A (colour) ESC New BG
Reset the background colour to black
ESC Black BG
Writing mosaic (graphics) characters
ESC M (colour). This will switch the character set. Use the onscreen panel. They also map to letters in the range a-z on the keyboard but you'll need a good memory for this. Mosaics come in two forms. Contiguous (default) and separated (with extra padding). Use ESC Contig. OFF and ESC Contig. ON to switch between the two.
Write a span of flashing characters
ESC Flash ON followed by your text. Turn off flashing with ESC Flash OFF.
Write hidden text
ESC Conceal ON followed by your text. This attribute persists until the start of a new row or frame. The text remains hidden to the user unless they press Reveal.
Write double height text
ESC Double Height followed by your text. Double height persists until ESC Normal Height is issued or the start of a new row or frame.
Holding mosaic characters
There may be situations where you want to change attributes and continue to output mosaics instead of the space that would normally be output in lieu of a control code. Issuing ESC Mosaic HOLD will cache the last mosaic printed and use it instead of the spaces written for control codes. This attribute persists until ESC Mosaic RELEASE is issued or the start of a new row or frame.
Save work in progress
Clicking will add the current frame to your list of saved frames. The thumbnail there has options to load, copy as base 64 encoded text or delete.
Import base 64 encoded frame data
Paste the encoded text into the onscreen panel then click 64.
Copy the current frame as base 64
As well as from the saved frame panel, you can also do this from the onscreen panel using .
Undo the last byte sent
Clicking will undo the last byte sent. Consequently it may just undo a control code or just an ESC. You're advised to save your frame regularly.
5 November 2020
  • Bug Fix: the viewer intermittently failed to load in Firefox.
29 October 2020
  • CSS tweaks and a garish background gradient.
  • General maintenance and performance changes.
28 August 2020
  • Added a simple Viewdata editor. See the Help page for more details.
14 July 2020
  • Viewdata is now rendered using Scalable Vector Graphics (SVG). This should give a sharper display that scales better across various screen sizes and makes better use of screen space.
1 July 2020
  • You can now use FastText buttons on TeeFax.
  • The log window has been removed as it was probably just a distraction. Log messages are written to the developer tools console instead.
February 2019

Initial release.

The site uses the following cookies and local storage:

User controlled
Every visitor to the site is assigned a random id (a GUID). This is used to associate them with a TCP client running on the site's server. You may remove the cookie, in which case it will be regenerated when you refresh the page.
Every 30 minutes
Microsoft Azure telemetry
After 1 year
Microsoft Azure telemetry
User controlled
Saved frames are stored in local storage in base64 format. They may be removed at any time by clicking the button.
User controlled
Telesoft downloads are stored in local storage. They may be removed at any time by clicking Remove.
User controlled
User interface state
User controlled
Local storage structure version number