Difference between revisions of "UVSG Satellite Data"

From Prevue Guide Wiki
Jump to navigation Jump to search
(Fix bad checksum in example color ad command)
 
(38 intermediate revisions by 3 users not shown)
Line 1: Line 1:
This was the format used by [[United Video Satellite Group]] to send data out at over a satellite feed. The baud rate was initially 2400, although the speed may have been increased to 9600 baud towards the end. Many different types of information were sent out through this feed, including time/date information, system settings, channel listings, and system updates. The format was broadcast until at least 2002 (to support [[Sneak Prevue]] and remaining installations of [[EPG Jr.]]), but may even have lasted until 2005.
+
This was the format used by [[United Video Satellite Group]] to send data out at over a satellite feed, launched some time between 1981 and 1985. The baud rate was initially 2400, although the speed may have been increased to 9600 baud towards the end. Many different types of information were sent out through this feed, including time/date information, system settings, channel listings, and system updates. The format was broadcast until at least 2002 (to support [[Sneak Prevue]] and remaining installations of [[EPG Jr.]]), but may even have lasted until 2005.
  
 
Tin and AriX have successfully reverse engineered parts of this format, and it is possible to send our own messages to emulated or real EPG/Prevue machines over serial. Additionally, some test files received from an ex-UV employee have helped to further the reverse engineering effort.
 
Tin and AriX have successfully reverse engineered parts of this format, and it is possible to send our own messages to emulated or real EPG/Prevue machines over serial. Additionally, some test files received from an ex-UV employee have helped to further the reverse engineering effort.
Line 14: Line 14:
 
===Initial Checksum===
 
===Initial Checksum===
  
Most commands have a checksum that is calculated on all the bytes of the data part of the command. This is sent over the serial port and compared to the correct value by the receiving machine. If the checksum does not match, the computer discards the whole command. The checksum is calculated by bitwise XOR of each byte of data within the command excluding the command letter itself. Each command has its own seed checksum which is loaded as the initial value of the checksum as soon as the initial command letter is received. This initial checksum is calculated by XORing the mode byte with $FF.
+
Most commands have a checksum that is calculated on all the bytes of the data part of the command. This is sent over the serial port and compared to the correct value by the receiving machine. If the checksum does not match, the computer discards the whole command. The checksum is calculated by bitwise XOR of each byte of data within the command INCLUDING the 55 AA training and the ASCII value of the command letter. However at least in the Atari code, the 55 AA and command letter are not checksummed, instead the code is seeded with the value that would be arrived at if that calculation had been performed.
  
 
===Command Modes===
 
===Command Modes===
  
Some of this is conjecture and named according to clues found in the reverse-engineered code - it's subject to change and mistakes! Some of the checksums were found from an Atari disassembly, and a few were found by running UVSG sample messages through [[UVSGXOR]].
+
Some of this is conjecture and named according to clues found in the reverse-engineered code - it's subject to change and mistakes!
  
 
{| border="1" cellspacing="0" cellpadding="2"
 
{| border="1" cellspacing="0" cellpadding="2"
Line 24: Line 24:
 
!scope="col"| Command
 
!scope="col"| Command
 
!scope="col"| Name
 
!scope="col"| Name
!scope="col"| Initial Checksum
 
 
!scope="col"| Description
 
!scope="col"| Description
 
!scope="col"| Notes
 
!scope="col"| Notes
Line 32: Line 31:
 
!scope="row"| A
 
!scope="row"| A
 
| Box On
 
| Box On
| $BE
 
 
| Addresses the machines by select code, informing them to listen for commands
 
| Addresses the machines by select code, informing them to listen for commands
 
|  
 
|  
Line 39: Line 37:
 
|-
 
|-
 
!scope="row"| C
 
!scope="row"| C
| Channel
+
| Channel lineup
| $BC
 
 
| Contains the channel lineup
 
| Contains the channel lineup
 
| Divided by the receiving machine into a list of channel numbers, call letters, and sources.
 
| Divided by the receiving machine into a list of channel numbers, call letters, and sources.
 
| Yes
 
| Yes
 +
| Yes
 +
|-
 +
!scope="row"| c
 +
| Source Attributes
 +
|
 +
|
 +
| No
 
| Yes
 
| Yes
 
|-
 
|-
 
!scope="row"| D
 
!scope="row"| D
| ?
+
| Diagnostic mode
| $BB
 
 
| ?
 
| ?
 
| ?
 
| ?
Line 56: Line 59:
 
!scope="row"| E
 
!scope="row"| E
 
| ?
 
| ?
| $BA
 
 
| ?
 
| ?
| Atari L9118 (3 bytes - some kind of configuration bytes relating to CURDAY and NXTDAY?)
+
| Atari L9118 (3 bytes - some kind of configuration bytes relating to CURDAY and NXTDAY?) - on Amiga, reads in a bunch of bytes... possibly related to select code?
 
| Yes
 
| Yes
 
| Yes
 
| Yes
Line 64: Line 66:
 
!scope="row"| F
 
!scope="row"| F
 
| Configuration
 
| Configuration
| $B9
 
 
| Gives the receiving machine information about its location, local time, settings, ads, and more.
 
| Gives the receiving machine information about its location, local time, settings, ads, and more.
 
| Same syntax on both Atari and Amiga, just a lot of unused values on Atari.
 
| Same syntax on both Atari and Amiga, just a lot of unused values on Atari.
Line 71: Line 72:
 
|-
 
|-
 
!scope="row"| f
 
!scope="row"| f
| Config.dat
+
| new look config
| ??
 
 
| Provides some settings, like GridMR, Sport, SBS, ClockCmd, and more that are written to config.dat.
 
| Provides some settings, like GridMR, Sport, SBS, ClockCmd, and more that are written to config.dat.
| Length specified in first byte of command. Checksum is strange?
+
| Length specified in first byte of command.
 
| No
 
| No
 
| Yes
 
| Yes
 
|-
 
|-
 
!scope="row"| g
 
!scope="row"| g
| ?
+
| new local config avail
| $98
+
| also defines future DST information
| Defines future DST information
 
 
|  
 
|  
 
| No
 
| No
Line 88: Line 87:
 
!scope="row"| H
 
!scope="row"| H
 
| Download
 
| Download
| $B7
 
 
| Can be used to write a file to disk, likely other Amiga maintenance tasks as well
 
| Can be used to write a file to disk, likely other Amiga maintenance tasks as well
 
| Exact same command is also available under 'h' and '='
 
| Exact same command is also available under 'h' and '='
 +
| No
 +
| Yes
 +
|-
 +
!scope="row"| h
 +
| Download
 +
|
 +
| Same command as 'H'
 +
| No
 +
| Yes
 +
|-
 +
!scope="row"| I
 +
| Weather ID
 +
|
 +
| Sets weather ID
 +
| No
 +
| Yes
 +
|-
 +
!scope="row"| i
 +
| ?
 +
|
 +
|
 
| No
 
| No
 
| Yes
 
| Yes
Line 96: Line 115:
 
!scope="row"| J
 
!scope="row"| J
 
| Order Information
 
| Order Information
| $B5
 
 
| For pay-per-view channels
 
| For pay-per-view channels
 
|  
 
|  
Line 104: Line 122:
 
!scope="row"| j
 
!scope="row"| j
 
| Order Information
 
| Order Information
| $95
 
 
| For pay-per-view channels
 
| For pay-per-view channels
 
| (likely newer format)
 
| (likely newer format)
Line 112: Line 129:
 
!scope="row"| K
 
!scope="row"| K
 
| Clock
 
| Clock
| $AB
 
 
| Sets the time centrally
 
| Sets the time centrally
| Requires ClockCmd to be 2 on Amiga
+
| Requires ClockCmd to be 2 on Amiga version 9
 
| Yes
 
| Yes
 
| Yes
 
| Yes
 
|-
 
|-
 
!scope="row"| L
 
!scope="row"| L
| Ad
+
| Local text (aka Local Ad)
| $B3
 
 
| Centrally provides an ad or message
 
| Centrally provides an ad or message
| Seems to crash Prevue Grid if there is already ad in a slot, maybe bad syntax
+
|  
 
| Yes
 
| Yes
 
| Yes
 
| Yes
 
|-
 
|-
 
!scope="row"| M
 
!scope="row"| M
 +
| Mode
 
| ?
 
| ?
| $B2
+
| Atari L9152 (reads 2 bytes) - on Amiga, reads 0 bytes and does NOTHING but increment the Cmds count
| ?
 
| Atari L9152 (reads 2 bytes)
 
 
| Yes
 
| Yes
 
| Yes
 
| Yes
Line 136: Line 150:
 
!scope="row"| N
 
!scope="row"| N
 
| ?
 
| ?
| $B1
 
 
| ?
 
| ?
 
| Atari L92A4
 
| Atari L92A4
Line 143: Line 156:
 
|-
 
|-
 
!scope="row"| O
 
!scope="row"| O
| ?
+
| Reset Blackout
| $B0
+
| Clears program listings - but not immediately?
| ?
+
| Reads 0 bytes - send 00 B0 after
| No checksum - send $00 $B0 immediately after - Atari L91BA (Amiga accepts as valid)
 
 
| Yes
 
| Yes
 
| Yes
 
| Yes
 
|-
 
|-
 
!scope="row"| P
 
!scope="row"| P
| Program
+
| Program info
| $AF
 
 
| Program information
 
| Program information
 
|  
 
|  
Line 159: Line 170:
 
|-
 
|-
 
!scope="row"| p
 
!scope="row"| p
| Program
+
| Program attribute
| $8F
 
 
| Program information
 
| Program information
 
| Possibly newer format, example in NEWP test file
 
| Possibly newer format, example in NEWP test file
Line 168: Line 178:
 
!scope="row"| Q
 
!scope="row"| Q
 
| ?
 
| ?
| $AE
 
 
| Not sure, probably has something to do with PPV channels
 
| Not sure, probably has something to do with PPV channels
 
|  
 
|  
Line 176: Line 185:
 
!scope="row"| R
 
!scope="row"| R
 
| Reset
 
| Reset
| $AD
+
| Reset/reboot all listening computers
| Reset computer
+
|  
| No checksum - send $00 $AD immediately after.
 
 
| Yes
 
| Yes
 
| Yes
 
| Yes
 +
|-
 +
!scope="row"| S
 +
| Script
 +
|
 +
| For laser-guide only
 +
|
 +
|
 
|-
 
|-
 
!scope="row"| T
 
!scope="row"| T
 
| Title
 
| Title
| $AB
 
 
| Sets the guide title
 
| Sets the guide title
| Only applicable to EPG, but recognized by Prevue Grid as a valid command
+
|  
 +
| Yes
 +
| No
 +
|-
 +
!scope="row"| t
 +
| Color Local Ad
 +
| Provides local ad data (identical to mode L, but unsupported on older software)
 +
|
 +
| No
 
| Yes
 
| Yes
 +
|-
 +
!scope="row"| V
 +
| Version
 +
| ?
 +
| Software upgrade/version check mechanism?
 +
| No
 +
| Yes
 +
|-
 +
!scope="row"| v
 +
| PPV info
 +
| ?
 +
|
 +
| No
 +
| Yes
 +
|-
 +
!scope="row"| W
 +
| Weather Data
 +
| ?
 +
|
 +
| No
 +
| Yes
 +
|-
 +
!scope="row"| w
 +
| ?
 +
| ?
 +
|
 +
| No
 +
| Yes
 +
|-
 +
!scope="row"| x
 +
| "x command"
 +
| ?
 +
| Has sub-commands?
 +
| No
 
| Yes
 
| Yes
 
|-
 
|-
 
!scope="row"| Z
 
!scope="row"| Z
 
| ?
 
| ?
| $A5
 
 
| ?
 
| ?
 
| Atari L9206 (12 configuration bytes read into 04E7 onwards)
 
| Atari L9206 (12 configuration bytes read into 04E7 onwards)
Line 201: Line 256:
 
| ?
 
| ?
 
| ?
 
| ?
 +
| Atari L949F (hexadecimal 03)
 +
| Yes
 +
| No
 +
|-
 +
!scope="row"| ! ($21)
 
| ?
 
| ?
| Atari L949F (hexadecimal 03)
+
| ?
 +
|
 +
| No
 
| Yes
 
| Yes
 +
|-
 +
!scope="row"| % ($25)
 +
| Save Data
 +
| Saves/backs up data to disk the next time it gets a $BB command
 +
| Analogous to one of the "Save Data" options under Special Functions, freezes guide for a few seconds while saving
 
| No
 
| No
 +
| Yes
 +
|-
 +
!scope="row"| + ($2B)
 +
| VCRplus
 +
|
 +
|
 +
|
 +
|
 +
|-
 +
!scope="row"| = ($3D)
 +
| Download
 +
| ?
 +
| Same command as 'H'
 +
| No
 +
| Yes
 +
 
|-
 
|-
 
!scope="row"| $BB
 
!scope="row"| $BB
 
| Box Off
 
| Box Off
| $44
 
 
| Tells all listening boxes to stop listening
 
| Tells all listening boxes to stop listening
| No checksum - send $BB $00 $FF immediately after
+
| No checksum - send BB 00 FF after
 
| Yes
 
| Yes
 
| Yes
 
| Yes
|-
 
 
|}
 
|}
  
Line 223: Line 304:
 
  0x12 [flags, byte] [6-character source, string]
 
  0x12 [flags, byte] [6-character source, string]
 
  0x11 [Channel #, string]
 
  0x11 [Channel #, string]
  0x01 [5- to 6-character channel name, string]
+
  0x01 [5 to 6-character channel name, string]
 
  0x00 [checksum, byte]
 
  0x00 [checksum, byte]
  
Line 296: Line 377:
 
| PREVDAYSDATA
 
| PREVDAYSDATA
 
| 0x80
 
| 0x80
 +
|}
 +
 +
==== L Command Syntax ====
 +
 +
0x4C [ad number, byte]
 +
[text alignment byte] [line 1 text, string]
 +
[text alignment byte] [line 2 text, string] (repeated for each desired line)
 +
0x14 [ad beginning timeslot, 1-48] [ad ending timeslot, 1-48] (optional)
 +
0x00 [checksum, byte]
 +
 +
Here is an example which sets the contents of the first ad:
 +
55 AA 4C 01 18 42 45 46 4F 52 45 20 59 4F 55 20 56 49 45 57 2C 20 50 52 45 56 55 45 21 00 D1
 +
 +
The optional 0x14 (CTRL-T) sequence allows the command to limit the timeslots in which the ad appears. This is supported on Amiga only, and ignored on Atari.
 +
 +
'''NOTE:''' Sending 0x92 in place of the ad number causes all text ads to be reset. Example:
 +
55 AA 4C 92 00 21
 +
 +
===== Text Alignment Bytes =====
 +
 +
The following text alignment bytes are supported:
 +
 +
{| border="1" cellspacing="0" cellpadding="2"
 +
|-
 +
! Text Alignment
 +
! Hex value
 +
|-
 +
| Center
 +
| 0x18 (CTRL-X)
 +
|-
 +
| Left
 +
| 0x19 (CTRL-Y)
 +
|-
 +
| Right
 +
| 0x1A (CTRL-Z)
 +
|-
 +
| Crawl
 +
| 0x0B (CTRL-K)
 +
|}
 +
 +
A new text alignment byte must be included for each new ad line. The byte 0x0B (CTRL-K) can be used on EPG Sr. to indicate that the ad should be used as a crawl ad instead of a scroll ad.
 +
 +
==== t Command Syntax ====
 +
 +
0x4C [ad number, byte]
 +
[text alignment byte]
 +
0x03 [background color byte] [foreground color byte] [text, string] (repeated for each desired new color)
 +
0x14 [ad beginning timeslot, 1-48] [ad ending timeslot, 1-48] (optional)
 +
0x00 [checksum, byte]
 +
 +
The 0x03 (CTRL-C) sequence can be included as many times as desired, and defines the colors to be used for the characters which follow the sequence.
 +
 +
Example:
 +
55 AA 74 05 18 03 36 33 50 72 65 76 75 65 20 03 35 34 46 69 72 73 74 21 00 E8
 +
 +
'''NOTE:''' The 't' command and 'L' command are identical and handled the same by ESQ. Using 't' as the command byte instead of 'L' guarantees that color ads are not received by older software that doesn't support color ads (like Atari), since older software doesn't recognize the 't' command.
 +
 +
===== t Commmand Colors =====
 +
 +
{| border="1" cellspacing="0" cellpadding="2"
 +
|-
 +
! Color name
 +
! Hex value
 +
|-
 +
| Transparent
 +
| 0x30
 +
|-
 +
| White
 +
| 0x31
 +
|-
 +
| Black
 +
| 0x32
 +
|-
 +
| Yellow
 +
| 0x33
 +
|-
 +
| Red
 +
| 0x34
 +
|-
 +
| Light blue
 +
| 0x35
 +
|-
 +
| Grey
 +
| 0x36
 +
|-
 +
| Blue
 +
| 0x37
 
|}
 
|}
  
Line 303: Line 471:
  
 
In the CTRL format, there is no initial 55 AA to start a command. Commands are begun right away with a mode byte, which is a number from 0 to 16 (instead of an ASCII value). Next, the body of the command is sent, followed by a $0D, and then the message checksum, which uses the same format as the DATA feed. The CTRL format has not yet been fully reverse engineered, but more information can be found [http://ariweinstein.com/prevue/viewtopic.php?f=5&t=140&start=20#p1536 here].
 
In the CTRL format, there is no initial 55 AA to start a command. Commands are begun right away with a mode byte, which is a number from 0 to 16 (instead of an ASCII value). Next, the body of the command is sent, followed by a $0D, and then the message checksum, which uses the same format as the DATA feed. The CTRL format has not yet been fully reverse engineered, but more information can be found [http://ariweinstein.com/prevue/viewtopic.php?f=5&t=140&start=20#p1536 here].
 +
 +
===CTRL Commands===
  
 
{| border="1" cellspacing="0" cellpadding="2"
 
{| border="1" cellspacing="0" cellpadding="2"
Line 309: Line 479:
 
!scope="col"| Control
 
!scope="col"| Control
 
!scope="col"| Name
 
!scope="col"| Name
 +
!scope="col"| Length
 
!scope="col"| Description
 
!scope="col"| Description
 
|-
 
|-
Line 314: Line 485:
 
| A
 
| A
 
| ?
 
| ?
 +
|
 
| Branches based on the first byte it receives - looks like it has "sub-commands"
 
| Branches based on the first byte it receives - looks like it has "sub-commands"
 
|-
 
|-
Line 319: Line 491:
 
| B
 
| B
 
| ?
 
| ?
 +
|
 
|  
 
|  
 
|-
 
|-
Line 324: Line 497:
 
| C
 
| C
 
| ?
 
| ?
 +
| 0 bytes
 
| Different than the other commands - not parsed
 
| Different than the other commands - not parsed
 
|-
 
|-
 
!scope="row"| $04
 
!scope="row"| $04
 
| D
 
| D
| ?
+
| Set Position
|  
+
| 1 byte
 +
| Sets CTRLEvent_Position to 1 if byte is 'L' or 0 if 'R', if neither, CTRLEvent_Position is toggled
 
|-
 
|-
 
!scope="row"| $05
 
!scope="row"| $05
 
| E
 
| E
 
| Event
 
| Event
| "NOW!!" command?
+
| 2 bytes
 +
| First byte corresponds to right side, second corresponds to left - seems to set a "mode" for the overlay of each side
 
|-
 
|-
 
!scope="row"| $07
 
!scope="row"| $07
 
| G
 
| G
| ?
+
| Resume Scroll
|  
+
| 0 bytes
 +
| Resumes listing scroll (analogous to pressing 's')
 
|-
 
|-
 
!scope="row"| $0B
 
!scope="row"| $0B
 
| K
 
| K
 
| Clock
 
| Clock
 +
|
 
| Slightly different syntax than DATA, only works when ClockCmd is 1
 
| Slightly different syntax than DATA, only works when ClockCmd is 1
 
|-
 
|-
Line 350: Line 528:
 
| ?
 
| ?
 
|  
 
|  
 +
| Has something to do with what program is displayed in the overlay in E mode
 
|-
 
|-
 
!scope="row"| $0D
 
!scope="row"| $0D
 
| M
 
| M
 
| End of Command
 
| End of Command
 +
|
 
|  
 
|  
 
|-
 
|-
Line 360: Line 540:
 
| ?
 
| ?
 
|  
 
|  
 +
| Blanks out screen - probably used to set some stuff
 
|-
 
|-
 
!scope="row"| $10
 
!scope="row"| $10
 
| P
 
| P
| ?
+
| Stop Scroll
|  
+
| 0 bytes
 +
| Stops listing scroll (analogous to Control-S)
 
|-
 
|-
 
!scope="row"| $11
 
!scope="row"| $11
 
| Q
 
| Q
 
| ?
 
| ?
 +
|
 
|  
 
|  
 
|-
 
|-
Line 374: Line 557:
 
| T
 
| T
 
| ?
 
| ?
 +
| 1 byte?
 
| Sets some internal variable
 
| Sets some internal variable
 
|-
 
|-
Line 380: Line 564:
 
| ?
 
| ?
 
|  
 
|  
 +
|
 +
|}
 +
 +
===Mode A Sub-Commands===
 +
 +
{| border="1" cellspacing="0" cellpadding="2"
 +
|-
 +
!scope="col"| Byte
 +
!scope="col"| ASCII
 +
!scope="col"| Name
 +
!scope="col"| Length
 +
!scope="col"| Description
 +
|-
 +
!scope="row"| $31
 +
| 1
 +
|
 +
|
 +
|
 +
|-
 +
!scope="row"| $33
 +
| 3
 +
|
 +
|
 +
|
 +
|-
 +
!scope="row"| $34
 +
| 4
 +
|
 +
|
 +
|
 +
|-
 +
!scope="row"| $35
 +
| 5
 +
|
 +
|
 +
|
 +
|-
 +
!scope="row"| $36
 +
| 6
 +
|
 +
|
 +
|
 +
|-
 +
!scope="row"| $37
 +
| 7
 +
|
 +
|
 +
|
 +
|-
 +
!scope="row"| $44
 +
| D
 +
|
 +
|
 +
|
 +
|-
 +
!scope="row"| $46
 +
| F
 +
|
 +
|
 +
|
 +
|-
 +
!scope="row"| $57
 +
| W
 +
| Weather
 +
| 0 bytes
 +
| Show weather info?
 
|}
 
|}
  
 
[[Category:Prevue Emulation]]
 
[[Category:Prevue Emulation]]

Latest revision as of 05:56, 9 May 2020

This was the format used by United Video Satellite Group to send data out at over a satellite feed, launched some time between 1981 and 1985. The baud rate was initially 2400, although the speed may have been increased to 9600 baud towards the end. Many different types of information were sent out through this feed, including time/date information, system settings, channel listings, and system updates. The format was broadcast until at least 2002 (to support Sneak Prevue and remaining installations of EPG Jr.), but may even have lasted until 2005.

Tin and AriX have successfully reverse engineered parts of this format, and it is possible to send our own messages to emulated or real EPG/Prevue machines over serial. Additionally, some test files received from an ex-UV employee have helped to further the reverse engineering effort.

DATA Format

Every box on message always starts with the header "55 AA", followed by a select code, a 00, and a checksum. A command is started with a "55 AA", then a byte indicating which mode of command is being sent out, then the data of the command, which is usually followed by checksum.

For example, here are two commands that will tell an EPG machine to listen, then change its title to "PREVUE GUIDE":

55 AA 41 2A 00 94 55 AA 54 50 52 45 56 55 45 20 47 55 49 44 45 00 D0

In this example, the select code being addressed is 2A, or the ASCII code for an asterisk (*). This means every machine that is connected to the satellite feed will act on this command. Then, a 00 to terminate the string, and a checksum (94). After the 55 AA, you see the mode byte (54, or T for Title), and then an ASCII string (PREVUE GUIDE). Lastly, there is another 00 to terminate the string, and D0, the checksum for the entire string.

Initial Checksum

Most commands have a checksum that is calculated on all the bytes of the data part of the command. This is sent over the serial port and compared to the correct value by the receiving machine. If the checksum does not match, the computer discards the whole command. The checksum is calculated by bitwise XOR of each byte of data within the command INCLUDING the 55 AA training and the ASCII value of the command letter. However at least in the Atari code, the 55 AA and command letter are not checksummed, instead the code is seeded with the value that would be arrived at if that calculation had been performed.

Command Modes

Some of this is conjecture and named according to clues found in the reverse-engineered code - it's subject to change and mistakes!

Command Name Description Notes Atari Amiga
A Box On Addresses the machines by select code, informing them to listen for commands Yes Yes
C Channel lineup Contains the channel lineup Divided by the receiving machine into a list of channel numbers, call letters, and sources. Yes Yes
c Source Attributes No Yes
D Diagnostic mode ? ? No Yes
E ? ? Atari L9118 (3 bytes - some kind of configuration bytes relating to CURDAY and NXTDAY?) - on Amiga, reads in a bunch of bytes... possibly related to select code? Yes Yes
F Configuration Gives the receiving machine information about its location, local time, settings, ads, and more. Same syntax on both Atari and Amiga, just a lot of unused values on Atari. Yes Yes
f new look config Provides some settings, like GridMR, Sport, SBS, ClockCmd, and more that are written to config.dat. Length specified in first byte of command. No Yes
g new local config avail also defines future DST information No Yes
H Download Can be used to write a file to disk, likely other Amiga maintenance tasks as well Exact same command is also available under 'h' and '=' No Yes
h Download Same command as 'H' No Yes
I Weather ID Sets weather ID No Yes
i ? No Yes
J Order Information For pay-per-view channels No Yes
j Order Information For pay-per-view channels (likely newer format) No Yes
K Clock Sets the time centrally Requires ClockCmd to be 2 on Amiga version 9 Yes Yes
L Local text (aka Local Ad) Centrally provides an ad or message Yes Yes
M Mode ? Atari L9152 (reads 2 bytes) - on Amiga, reads 0 bytes and does NOTHING but increment the Cmds count Yes Yes
N ? ? Atari L92A4 Yes No
O Reset Blackout Clears program listings - but not immediately? Reads 0 bytes - send 00 B0 after Yes Yes
P Program info Program information Yes Yes
p Program attribute Program information Possibly newer format, example in NEWP test file No Yes
Q ? Not sure, probably has something to do with PPV channels No Yes
R Reset Reset/reboot all listening computers Yes Yes
S Script For laser-guide only
T Title Sets the guide title Yes No
t Color Local Ad Provides local ad data (identical to mode L, but unsupported on older software) No Yes
V Version ? Software upgrade/version check mechanism? No Yes
v PPV info ? No Yes
W Weather Data ? No Yes
w ? ? No Yes
x "x command" ? Has sub-commands? No Yes
Z ? ? Atari L9206 (12 configuration bytes read into 04E7 onwards) Yes No
$03 ? ? Atari L949F (hexadecimal 03) Yes No
! ($21) ? ? No Yes
% ($25) Save Data Saves/backs up data to disk the next time it gets a $BB command Analogous to one of the "Save Data" options under Special Functions, freezes guide for a few seconds while saving No Yes
+ ($2B) VCRplus
= ($3D) Download ? Same command as 'H' No Yes
$BB Box Off Tells all listening boxes to stop listening No checksum - send BB 00 FF after Yes Yes

Known Command Syntax

C Command Syntax

0x43 [Julian day, byte]
0x12 [flags, byte] [6-character source, string]
0x11 [Channel #, string]
0x01 [5 to 6-character channel name, string]
0x00 [checksum, byte]

NOTE: On EPG Jr. the channel name has a limit of 5 characters

C Commmand Flags

Flag name Hex value
None 0x01
HILITESRC 0x02
SUMBYSRC 0x04
VIDEO_TAG_DISABLE 0x08
CAF_PPVSRC 0x10
DITTO 0x20
ALTHILITESRC 0x40
STEREO 0x80

P Command Syntax

0x50 [Timeslot 1-48, hex] [Julian day, hex] [6-character source, string]
0x12 [flags, byte] [Program name, string]
0x00 [checksum, byte]

P Commmand Flags

Flag name Hex value
None 0x01
Movie 0x02
ALTHILITEPROG 0x04
TAGPROG 0x08
SPORTSPROG 0x10
DVIEW_USED 0x20
REPEATPROG 0x40
PREVDAYSDATA 0x80

L Command Syntax

0x4C [ad number, byte]
[text alignment byte] [line 1 text, string]
[text alignment byte] [line 2 text, string] (repeated for each desired line)
0x14 [ad beginning timeslot, 1-48] [ad ending timeslot, 1-48] (optional)
0x00 [checksum, byte]

Here is an example which sets the contents of the first ad:

55 AA 4C 01 18 42 45 46 4F 52 45 20 59 4F 55 20 56 49 45 57 2C 20 50 52 45 56 55 45 21 00 D1

The optional 0x14 (CTRL-T) sequence allows the command to limit the timeslots in which the ad appears. This is supported on Amiga only, and ignored on Atari.

NOTE: Sending 0x92 in place of the ad number causes all text ads to be reset. Example:

55 AA 4C 92 00 21
Text Alignment Bytes

The following text alignment bytes are supported:

Text Alignment Hex value
Center 0x18 (CTRL-X)
Left 0x19 (CTRL-Y)
Right 0x1A (CTRL-Z)
Crawl 0x0B (CTRL-K)

A new text alignment byte must be included for each new ad line. The byte 0x0B (CTRL-K) can be used on EPG Sr. to indicate that the ad should be used as a crawl ad instead of a scroll ad.

t Command Syntax

0x4C [ad number, byte]
[text alignment byte]
0x03 [background color byte] [foreground color byte] [text, string] (repeated for each desired new color)
0x14 [ad beginning timeslot, 1-48] [ad ending timeslot, 1-48] (optional)
0x00 [checksum, byte]

The 0x03 (CTRL-C) sequence can be included as many times as desired, and defines the colors to be used for the characters which follow the sequence.

Example:

55 AA 74 05 18 03 36 33 50 72 65 76 75 65 20 03 35 34 46 69 72 73 74 21 00 E8

NOTE: The 't' command and 'L' command are identical and handled the same by ESQ. Using 't' as the command byte instead of 'L' guarantees that color ads are not received by older software that doesn't support color ads (like Atari), since older software doesn't recognize the 't' command.

t Commmand Colors
Color name Hex value
Transparent 0x30
White 0x31
Black 0x32
Yellow 0x33
Red 0x34
Light blue 0x35
Grey 0x36
Blue 0x37

CTRL Format

In 1988, with the introduction of Prevue Guide, a second, 110-baud feed called CTRL was added.

In the CTRL format, there is no initial 55 AA to start a command. Commands are begun right away with a mode byte, which is a number from 0 to 16 (instead of an ASCII value). Next, the body of the command is sent, followed by a $0D, and then the message checksum, which uses the same format as the DATA feed. The CTRL format has not yet been fully reverse engineered, but more information can be found here.

CTRL Commands

Command Control Name Length Description
$01 A ? Branches based on the first byte it receives - looks like it has "sub-commands"
$02 B ?
$03 C ? 0 bytes Different than the other commands - not parsed
$04 D Set Position 1 byte Sets CTRLEvent_Position to 1 if byte is 'L' or 0 if 'R', if neither, CTRLEvent_Position is toggled
$05 E Event 2 bytes First byte corresponds to right side, second corresponds to left - seems to set a "mode" for the overlay of each side
$07 G Resume Scroll 0 bytes Resumes listing scroll (analogous to pressing 's')
$0B K Clock Slightly different syntax than DATA, only works when ClockCmd is 1
$0C L ? Has something to do with what program is displayed in the overlay in E mode
$0D M End of Command
$0F O ? Blanks out screen - probably used to set some stuff
$10 P Stop Scroll 0 bytes Stops listing scroll (analogous to Control-S)
$11 Q ?
$14 T ? 1 byte? Sets some internal variable
$16 V ?

Mode A Sub-Commands

Byte ASCII Name Length Description
$31 1
$33 3
$34 4
$35 5
$36 6
$37 7
$44 D
$46 F
$57 W Weather 0 bytes Show weather info?