sudd Spectrum UoSAT Data Demodulator User's Guide N.P. Taylor (G4HLX) 46 Hunters Field SOFTWARE BY Stanford in the Vale Faringdon Oxon. SN7 8LX G4HLX Program and explanatory material Copyright (C) 1985,87 N.P. Taylor Users Guide revised for SUDD version 3.1 February 1987 1. INTRODUCTION The two University of Surrey satellites, UoSAT-1/OSCAR-9 and UoSAT-2/OSCAR-11 (abreviated here as UO-9 and UO-11) are capable of transmitting data in a variety of formats. The most commonly used is the synchronous 1200 baud ASCII data transmission, using 1200 Hz and 2400 Hz tones (in UO-9 data, the 1200 Hz tone represents "space" and 2400 Hz "mark"; in Uo-11 these are reversed). Transmissions include news bulletins and general satellite information sent as text, and telemetry data which, after decoding, provides the output from a number of sensors around the spacecraft. Also sent is the output from experiemental modules on-board the satellites. These transmissions are carried on the beacons in the 145 MHz and 435 MHz bands, the general beacon on 145.825 MHz carrying the information on more general interest. The modulation is AFSK using narrow band frequency modulation. The received audio has to be decoded to recover the ASCII text characters, and the conventional means of doing this is with a hardware demodulator (essentially the receive part of a specialized modem), feeding the serial data input of a computer or VDU, etc. In the case of the ZX Spectrum, an additional serial interface woould also be required to accomplish this. The SUDD program performs the functions of both the demodulator and serial interface using software, the only connection to the Spectrum being the receiving audio to the "EAR" socket (or via the datacorder in the Plus 2 model). After demodulating the signal, the text is stored in a buffer within the Spectrum RAM, from where the SUDD program will process it to display the vallues of all the telemetry channels, performing a validation test on the checksum digit. Alter- natively, the data in the buffer may be displayed on the screen or printed as text. Another option enables the demodulated text to be saved on cassette or microdrive, from where your own programs can read it, enabling you to experiment with the various data sent by the satellite. 2. RECEIVING UoSAT The general beacon of both UO-9 and UO-11 is on 145.825 MHz. This signal may be readily received with a suitable narrow-band FM receiver. This may be a dedicated unit such as the ASTRID, or an FM receiver for the 2m amateur band. A VHF scanning receiver may also be suitable. Good signals can be obtained with a simple antenna such as crossed dipoles, provided these are mounted in an elevated position with a clear view of the sky. If you use a directional antenna such as a yaggl array, this should be rotated (and, ideally, elevated) to track the satellite, but such sophistication is not generally necessary to get signals of adequate strength. Your success will depend on the level of noise on 145 Hz at your location. Of course, you will need to know when to listen for the UoSATs. There will be several orbits each day which are in range of your station (typically, in the UK, 5 orbits of each satellite provide a "pass" of 8 or more minutes ) - if you're using a simple antenna you should aim to receive the near overhead passes. The timing of these orbits can be obtained from a number -1- of sources. One option is to run a satellite tracking program, using basic orbital data (either as EQX data or Keplerian elements, depending on the complexity of the program): this data is sent by the UoSATs and published in Oscar News, the AMSAT-UK journal (see section 9), and in various other magazines. AMSAT-UK also have available to members a detailed orbital calendar which gives times for all orbits in range of the UK. Another method is to use the "Oscarlocator", a simple chart system, also available from AMSAT-UK. The University of Surrey recorded telephone message (see section 9) also gives basic orbital data. The announcements give the times and longitudes at which the satellites will cross the equator (travelling North) for selected orbits. Times and long- itudes for other orbits may be calculated by repeatedly adding the period and longitude increment which are also given. In the UK, the satellite comes into range typically 8-10 minutes after an equator crossing at around 350 degrees W. For minimum error rate the audio signal from the receiver should be as noise-free as possible. It is not difficult to receive strong, fully-quieting signals from UO-9 and UO-11, but if signals are noisy, attention should be given to the receiving system and antenna. The use of a filter in the audio can help in difficult cases. By far the most efficient is the G3RUR UoSAT Decoder, the current version of which produces re-generated tones as an output option, so the unit acts as a highly optimized filter. Details can be obtained from AMSAT-UK (see section 9), who also produce a printed circuit board. If you build this unit, note that the sense of the tones produced are such that for SUDD the selector switch should be permanently set to "UoSAT-2", whicheer satellite is being received. 3. GENERAL PRINCIPLES OF DECODING If using s Spectrum 48K, Spectrum Plus, or Spectrum 128, the audio signal derived from a suitable FM receiver must be conn- ected into the "ear" socket of the computer using a standard 3.5mm jack plug. The level of signal required will be roughly that used when loading programs from cassette tape. This can be provided directly from the loudspeaker output of the receiver, or from a cassette recorder on which the signals have been recorded. If you are using a Spectrum 128K Plus 2, which does not have an "ear" socket, the signals should be recorded on cassette tape, and then replayed on the Plus 2's internal Datacorder. There are a number of advantages in recording the UoSAT signals onto cassette as they are received rather than decoding them "live". Firstly the buffer which stores the demodulated data in SUDD is long enough to store only about 90 seconds of data as transmitted (this is actually a lot of text at 1200 baud!). If a tape recording of one pass of the satellite is made, it can be processed in several sections if desired. Secondly you may find that the 145 MHz receiver experiences considerable interference from the Spectrum computer if it is running whilst receiving. Thirdly, during the pass you will be free to concentrate on jobs such as tuning the receiver, rotating the antenna, if necessary, whilst the signal goes onto the tape. Finally, using the same cassette recorder as usually used for loading programs simplifies connections to the computer (and of course, this becomes essential if using a Spectrum 128K Plus 2). -2- To summarize the receiving - demodulating - decoding procedure: (i) Signals from the satellite are received on suitable equipment and recorded on cassette (or if you prefer, fed directly into the Spectrum) (ii) The received audio is replayed into the Spectrum "ear" socket (or through the Datacorder in Plus 2 models), with SUDD in its "demodulate" mode. It will demodulate the signals and fill a buffer with the data recovered (up to a maximum of 9450 characters). (iii) The data in the buffer is displayed, printed or processed by SUDD to decode the telemetry data. Or the data may be saved on tape or microdrive for use by other programs. 4. DETAILED INSTRUCTIONS All the options in SUDD are selected from menus. After loading the program (using LOAD "SUDD" or just LOAD "", having selected 48 BASIC mode if using a 128K machine), you will see the main menu. To pick an option just press the key indicated alongside your choice on the menu. In some cases this will bring up a further menu which should be used in a similar way. The "break" key remains active in SUDD, i.e. you can abort the process at any time by pressing it. The program can then be simply restarted without loss of data (see section 4.4). The options of the main menu and sub-menus are described below in the order in which they occur, which is also the order in which they will be used in many cases. 4.1 Main Menu 4.1.1 "S" - Select satellite It is essential that the correct satellite is selected here before demodulating, due to numerous differences in data formats between UO-9 and UO-11. When loaded, UoSAT-1/OSCAR-9 is selec- ted. Each press of the "S" key will flip the selection between this and UoSAT-2/OSCAR-11, as shown on the display. 4.1.2 "C" - parity Check select Usually, the even parity check performed during demodulation should be on, so that errors in received data can be spotted. However, some of the data from experimental modules in the U0SATs are sent as 8-bit data with no parity bit (this is true, for example, of the Digital Communications Experiment in UO-11). To demodulate this data, the parity check in SUDD must be first disabled by the "C" option. Each press of C will toggle the parity check between ON and OFF, as shown on the display. The normal telemetry frames and news bulletins always use 7-bit data with an even parity bit, so the parity check should be left ON for reception of these. 4.1.3 "D" - Demodulate signal This option will display the demodulator "front panel", and the -3- audio signal fed into the ear socket is demodulated. As this is being done, you will see a number of things on the display : (i) The border shows a pattern similar to that obtained when loading programs, except the colours are magenta and green. (ii) The green "mark" and "space" lights illuminate as valid tones are recognised; these should be flickering on and off during demodulation. (iii) The red "parity" and "framing" error lights illuminate when an error is detected in the incoming data. The parity error light shows that a byte has failed the even-parity check; the framing error light shows that valid stop bits were not found in the expected position. During normal demodulation of a clean signal, these lights should rarely flash. If the signal is noisy, or if the data format is not as expected (e.g. you've selected the wrong satellite, or the satellite is sending experimental data in an unusual or non-parity-checked format) one or both lights will flicker continually. (iv) A graphic indication of how full the data buffer has be- come is shown at the bottom of the display. About 9.2 Kbytes can be accomodated, and as the buffer is filled the yellow line extends across the tick marks to give you some idea of the space used. Each tick represents 1 Kbyte of buffer, except the rightmost one which is the buffer end. The demodulation process will end in one of two ways. Either the buffer will become full, or you can halt the process by pressing the break key (once). In either case the display will show the total number of bytes of data (i.e. no. of characters) received, and the total number of parity and framing errors. For reliable reception these error counts should be small. 4.1.4 "P" - Process/display/print options This option brings up the process etc. options menu to determine what to do with the data in the buffer. This is fully described in section 4.2. 4.1.5 "E" - Erase buffer contents If, after demodulating one section of data, option "D" is sub- sequently invoked to receive some further data, this will be appended to that already in the buffer. If you wish to clear the buffer of the earlier data before proceding (which will be essential if the buffer has already been filled), option "E" should be used. You will be asked to confirm your intention to erase the con- tents of the buffer (respond by pressing "Y" to confirm, or "N" if you've changed your mind), and the "number of bytes in buffer" value displayed will be seen to change to zero. 4.1.6 "T" - save data to Tape, etc. This option brings up the menu for saving demodulated data/text to tape or microdrive, or loading previously saved data. This is -4- described in section 4.3. 4.2. Process/Display/Print Options The menu offering these options is reached via the "P" option on the main menu, which can be used only after data has been read into the buffer by the demodulation step. Any of the following options can be repeatedly used in any order to process the same section of data in different ways. 4.2.1 "T" - Telemetry decoding The basic telemetry data sent by both UoSATs are in the form of 60 analogue values ("channels"). In addition to these, UO-11 (but not UO-9) sends 96 "status points" (basically on/off values). When the satellite is sending this telemetry data a complete set of these values (a "frame") is sent approvimately every 5 seconds. With experience you will be able to recognize the repetitive sound of the telemetry frames. Using the "T" option, SUDD will decode the telemetry data to provide the analogue results, applying the calibration formula published by the University of Surrey. Due to differences in data formats, it is, of course, essential that the correct sat- allite has been selected on the main menu. If the data is from UO-11, after selecting the "T" option, a further short menu offers either analogue channels or status points. SUDD searches the buffer for a valid sequence of characters rep- resenting the start of a telemetry frame. If there are no telemetry frames in the buffer (i.e. the satellite was not sen- ding data of this type), the outcome will be rather un- predictable, but no valid data will follow. This will be evident from the top line of the display, which shows the 7 characters which head each telemetry frame; these should be "UOSAT-1" or "UOSAT-2". Assuming that valid telemetry data is present, the position within the buffer of the start of the first frame will be dis- played at the foot of the screen as a "byte no.". The UOSAT-1 or UOSAT-2 heading is displayed, followed by the date and time decoded from the frame heading. As there is no error-checking of this heading and date/time, odd results may sometimes occur. Each analogue channel (or status point) is then checked and converted in turn. The checksum is tested, and the channel is rejected if the checksum fails, or if any of its component characters failed the parity check during demodulation. During this process, the number of the channel or status point being checked is shown at the foot of the screen. These digits will change rapidly, unless the data is highly corrupted when the time taken to find valid data will increase. For any channel which is rejected, the number is shown on a red background. After a rejection, the subsequent characters in the buffer are tested to find the next valid chabel, subject to certain rules to ensure that the date is correctly interpreted. In this way loss of information due to erroneous or missing characters is minimized. The results for the first 20 analogue channels or status points are then displayed on the screen. If a particular channel was not found in the frame (due, for example, to a data error corrupting the channel number), the position for that result is -5- left blank. If the channel was identified, but was rejected due to a checksum or parity error, as error code "c" or "p", re- spectively, is shown. For status points the errors are not distinguished, and "e" is shown for either condition, which will always affect groups of 12 status points together. Several options are then displayed at the foot of the screen. The "down" cursor key (or "6" key on older keyboards" can be used to display the next 20 channels or status points. The up and down cursor keys (or "7" and "6") may be used repeatedly to browse up and down through the results. The "P" option will print all the analogue channels or status points in the currently analyzed frame (not just the 20 being displayed), to a connected printer (see section 6). Pressing ENTER will cause SUDD to jump forward to the next telemetry frame in the buffer, and repeat the checking and display of results, the screen display always initially showing the same channel numbers as when the ENTER key was pressed. This may be done repeatedly to see all the telemetry frames in the buffer in turn, until the message "No further frames in buffer" is given. The "E" key can be used to end the processing of telemetry frames and return to the previous menu. All menus contain an "R" option to return to the next highest level menu, and thence back to the main menu. 4.2.2. "D" - Display text This option displays on the screen the contents of the buffer as text, at 32 or 64 characters per line according to the use of the "C" option (see below). Any character in which a parity error was detected during demodulation is replaced by a "_" in the display. If the parity check was switched off, this same character is shown in place of any non-ASCII character received. At the end of each screen-full of text, three options are shown at the foot of the screen, as well as the range of byte numbers for the displayed data (i.e. the address within the buffer) so that you know where in the buffer you are viewing. The options are the ENTER key to scroll down and display the next 22 lines, "E" to end the display and return to the previous menu, and "C" to copy the screen image to a ZX, Alphacom, or similar printer (must be able to respond to the COPY command). If using 64 character/line display, this option is useful way of printing at this density on these simple printers, otherwise printing is normally done by the "P" option (see section 4.2.4). Note that any line of text which is longer than the currently selected line length (64 or 32 characters), will "wrap-round" at the end of the display. 4.2.3 "C" - Characters per line select Each press of the "C" key on the process/display/print menu flips the character per line setting between 32 and 64. This affects only the format of the text display described in section 4.2.2. The 32 chars/line selection gives the normal Spectrum character set, while the 64 chars/line set is highly compressed. The advantage of this option is that the news bulletins sent by -6- the UoSATs are generally up to 62 characters in each line, so that they are displayed more naturllay at this pitch without splitting each line in half, particularly if tables of data are included. On the other hand, on some TV monitors it may prove difficult to read the tiny characters, and you may prefer to return to the standard set. 4.2.4 "P" - Print text Provided a suitable printer is connected, this option is uded to print the buffer contents as text in the normal. The maximum line length is set by the characteristics of the printer. For advice on connection of printers, see section 6. 4.2.5 "S" - set Start point The processing, printing and display of buffer contents as de- scribed in the above sections will normally start at the first byte in the buffer (known as "byte no." 1). The "S" option can be used to set the starting byte to some other point. After pressing "S", SUDD will ask you to enter the byte no. of the new start point. This can be useful for jumping through the buffer to a desired point, particularly when used in conjunction with the display of byte number shown during the other displays. For example, if the telemetry displays shows the start of a certain frame as byte no. 967 and you wish to look at the raw data which comprises that frame, you can use the "S" option to set the start point to 967 and then use "D" to display. 4.3 Save/Load Data to/from Tape, Microdrive or Opus Disc This menu is reached by the "T" option on the main menu. It enables data which has been demodulated and stored in the buffer to be saved on tape, microdrive or Opus disc, as a conventional CODE file. This can then be loaded back in by your own program for processing in some way, for example to use some of the other experimental data sent by the UoSATs. Furthermore, there are options for loading previously saved data back into the buffer. Use of the four options is straightforward - just follow the instructions displayed on the screen. All four options will ask for a file name (this may be null for the "L" tape load options, whereupon the next file on the tape will be loaded); the microdrive options "M" and "D", which are also used for Opus disc, will always save or load using drive number 1. The two save options "S" and "M", will display the absolute address of the start and end of the data block to be saved, as well as the number of bytes of data (including the two initial bytes - see below). Note that only that part of the buffer which is currently filled will be saved. When loading the data back into your own program, it is, of course possible to re-locate the data anywhere you like in the address map (having reset RAMTOP appropriately). The number of bytes actually saved is two more that the number of bytes of data. The first two bytes give, in the usual Z80 low byte - high byte format, the number of data bytes which follow. An example of a program segment which might be used to load in a -7- saved file is given here: CLEAR 49999 LOAD "FRED" CODE 50000 LET N = PEEK 50000 + 256 * PEEK 50001 PRINT "There are ";N;" bytes starting at 50002" The data bytes contain the ASCII codes as received from UoSAT during demodulation. If the parity check is switched on, these are 7-bit values (i.e. decimal 0 - 127), with the most sig- nificant bit set to "1" if a parity error was detected (i.e. if a value is 128 or more, a parity error is indicated). If the parity check was switched off during demodulation, the values are un-modifed 8-bit codes. Important: If you are intending to save the data using these options, it is good practice to make it the first thing you do after demodulating is complete, to guard against loss of data. But it is particularly important that you do not use the telemetry decode option (see section 4.2.1) before trying to save, because the extra memory that this decoding uses will leave insufficient space for the save operation. If you do get into the unfortunate position of wishing to save your buffer- full of data after you have used the telemetry decode facility, the only way it can be done is to press the break key and restart SUDD with the RUN command (see next section), which will clear the memory needed for the save process. 4.4 Restarting after a break Pressing the break key at any time will stop the program (except during demodulation, see section 4.1.3). If this happens, or if any other condition has caused a return to BASIC, SUDD may be restarted simply by the BASIC command RUN. If the BASIC loading program has somehow been lost, the command RANDOMIZE USR 23792 can be used instead. Any data which was in the buffer before the break will still be intact and may be processed in the usual way. Note however, that settings of some options, in particular the selection of satell- ite, UC-9 or UO-11, will have returned to their defau 1 values, so check carefully that the correct options are set before proceeding. 5. MAKING A BACK-UP COPY OF SUDD or TRANSFERRING TO MICRODRIVE OR OPUS DISC The SUDD program is copyright. You are, however, permitted to make a single back-up copy for your own personal use, or to transfer the program to microdrive or Opus disc. This is done automatically by a "hidden" option on the main menu, accessed by pressing SYMBOL SHIFT and "S" together. This will bring up a short menu with two options: tape or micro- drive (also used for Opus disc, but first see the next sections). In either case, three files will be created, called SUDD, SUDDC1 and SUDDC2. For a microdrive save, which is to drive no. 1, these files must not already exist on the cartridge inserted. To run the saved program, simply used LOAD "SUDD" or, from micro- drive, LOAD *"m";1;"SUDD", which will automatically load the other two files and run. Note that the title screen is not -8- saved. 5.1 Transferring to Opus disc Before saving SUDD on an Opus disc system, a small modification must be made in the BASIC loading program. First load SUDD from tape in the normal way, and when the main menu is displayed press the break key to gain access to the BASIC program. Line 210 must then be edited to remove the words "REM for Opus", so that the line now reads 210 RANDOMIZE USR 64481 Then use the RUN command to re-start SUDD and follow the pro- cedure for transferring to microdrive as described above. 6. USING A PRINTER The printing options in SUDD will drive any printer which operates normally for the LPRINT command. As noted in section 4.2.2, the option to copy the screen image to the printer only works if the COPY command is also obeyed normally by the printer. A ZX printer or Alphacom 32 (or equivalent) is particularly suitable, and will be driven by SUDD without any modification. Most other printers, with a suitable interface, will also work satisfactorily, and 80-column printers will provide a neat print-out of news bulletins, etc. If additional commands are required to initialize the printer and its interface, these may be added to the BASIC driving program as additional lines with line numbers in the range 10 to 80. For example, if using the ZX Interface 1 to drive a printer via the RS232 port at 9600 baud, the two lines 10 FORMAT "t";9600 20 OPEN #3;"t" would set this up. Another line which should be added with these is to set the byte at 63689 to a value of 1, e.g.: 30 POKE 63689,1 This signals to SUDD that an 80-column printer is being used, which will cause the format of the telemetry printing to be changed slightly to make use of the longer line length. Having modified the BASIC as appropriate, the customized version of SUDD should be saved as described in section 5. One problem which may be encountered is with printer interfaces which require a small machine code routine to be loaded into the Spectrum RAM to operate the interface. Almost all the available 48K RAM is filled by the SUDD program and its data buffer. However, some interfaces of this type provide an alternative version of the code which can load into the printer buffer at 23296, and this should operate OK - the commands to load and execute this code can be added to the SUDD BASIC program as lines 10 - 80, as described above. 7. USING THE SUDD MACHINE CODE The following discussion is for the benefit of the more advanced user who may wish to make use of parts of the SUDD code in their own programs. The SUDD code is in two sections: the first, of -9- length 24594 bytes starting at 23792, has been compiled from a BASIC source. The section section, of length 1847 starting at 63689, includes the main machine code routines, two of which may be useful in your own programs. These are the demodulating routine, which you could use to input data directly into a buffer in your own program, and the 64 character per line printing routine, which can be used in any program to print text on the screen at this density. These machine code routines are part of the file "SUDDC1" on the SUDD tape (this is the fourth file on the tape). This could be loaded in your program by, for example, CLEAR 63688 : LOAD "SUDDC1" CODE 63689,1847 although a lower RAMTOP will be needed in the CLEAR statement to make room for a buffer if the demodulator routine is to be used (see below). 7.1 The demodulator routine Before calling this routine, a data buffer to receive the demod- ulated text must be set up. The size of this will depend on how much space has been left in the RAM by your program. You must tell the SUDD code where this buffer is by POKEing the starting and ending addresses into certain locations. These are all 2-byte values stored in the normal Z80 convention of low byte first: 63730-1 STBUF - address of start of buffer 63732-3 END - address of end of buffer 63734-5 CEND - address of last byte in buffer which was filled; intiall this should be set to (STBUF-1) Don't forget that RAMTOP should be set to some value below the start of the buffer using the CLEAR command. In addition to these 2-bytes values, there are two single byte values which mmust be set: 63724 BIRD - set =0 for UO-9, or =4 for UO-11 63729 PARCH - parity check switch =0 for Off, =1 for On The entry point for the demodulating routine is 63736, which can conveniently be called by a statement such as LET A = USR 63736 Using this statement, after the end of demodulation the variable A, which will contain the contents of the bc register, will =0 if termination was because the buffer became full, or =1 if the break key had been pressed. Other values that may be obtained after demodulation are stored as 2-byte values: 63734-5 CEND - address of last byte in buffer which was filled (i.e. no. bytes received = STBUF-CEND+1) 63727-8 PARER - no. of parity errors 63725-6 FRAMER - no. of framing errors 7.2 64 Character per line screen printing Use of this routine is straightforward. The code for each character to be printed must be POKEd into the byte at 65272, and then the routine at 65273 called. For example, to print a string stored in the variable A$: -10- 10 FOR I=1 TO LEN A$ 20 POKE 65272, CODE A$ (I) 30 RANDOMIZE USR 65273 40 NEXT I The characters will appear on the screen two at a time, i.e. only every other call to the routine will add something to the display. Only printable codes are accepted: codes below 32 are ignored (except code 13, ENTER, which is treated as NEWLINE), codes above 128 are replaced by 128. If you want to change printing colours, etc., this can be down with the usual commands PAPER and INK. Print position on the screen can be set by preceding the call to the routine by a normal PRINT command, for example PRINT AT 10,0; to make the next character appear at the start of line 10. PRINTing at 32 characters per line (as normal) can be mixed with that at 64 line (even mixed on the same line) by using the normal PRINT statement. However the UDG character "U" (i.e. GRAPHIS-U) should be avoided as this is used by the routine. 8. SAMPLE DATA RECORDINGS On the second side of the SUDD tape you will find two sample recordings of UoSAT data, the first from UO-9, the second from Uo-11. You may like to use these to acquaint yourself with the facilities of SUDD. Each sample contains examples of both a text bulletin and telemetry data. 9. FURTHER INFORMATION ON UoSAT If you require further information about the UoSAT spacecraft, there are two principal sources of information in the UK: AMSAT- UK and the University of Surrey. The address of AMSAT-UK is given below. It is a purely voluntary organisation and a stamped addressed envelope should accompany any enquiry: AMSAT-UK R.J.C. Broadbent, G3AAJ, 94 Herongate Road, Wanstead Park, London E12 5EQ. Membership of AMSAT-UK is recommended to anyone interested in the amateur satellite scene. The bi-monthly journal Oscar News is a major source of information on all current and future satellites, including the UoSATs. The University of Surrey issues up-to-date information in the news bulletins which you will now be receiving fom the UoSATs (mainly UO-11 at weekends). In addition, the university issues printed data sheets, the "UoSAT Spacecraft Data Booklet" being a complete digest of information on UO-9 and UO-11. A telephone recorded message service gives basic orbital data on both satellites, the number is Guildford (0483) 61707 for information on Uo-9, and 61202 for UO-11. -11-