JP1 For Beginners
By Tommy N. Tyler
Rev 1.0  08/17/01

Click here for a Microsoft Word version of this document.




If you browse through the JP1 site you'll find several guides and instructions on how to use available software to program remote controls. JP1 is primarily a hackers' forum, so it is appropriate that much of this information is written on a fairly high level. It is to a relatively small group of talented and dedicated hackers that we are indebted for the knowledge of how to do amazing things with an interface and a few pieces of software. These guys can talk to each other with a level of understanding that doesn't require explaining every detail.

But I'm not a hacker, and I've had to struggle with some of the concepts involved. There's also a growing number of members who want to use JP1 technology on a fast learning curve, which means finding all the information they need quickly, in one place. It is probably hopeless to expect that anyone without computer literacy and some technical experience will ever be able to deal with the complexities of customizing remote controls, and that's not the goal of these instructions. But I will explain as simply as I can, using detailed examples, the steps involved in using the IR program to upload changes to a remote, and those for creating an upgrade spreadsheet. My qualifications for doing this are the experience gained by asking a million questions before I could do it myself.

For some time now I've been collecting messages passed through the forum to get an idea of the kinds of questions that confront many first-time users. These instructions borrow shamelessly from Chris Nappi's JP1 Device Upgrade Code Guide, his JP1 FAQ, Rob Crowe's Instructions for Using the Keymap-Master Spreadsheet and his Readme file, and contributions from Jim Henry, Ellen Tunstall, and too many others to mention. To all these people I acknowledge true authorship of this document. I consider myself just an editor. And a special thanks to Rob for proofreading this and helping so much to make it sound like I know what I'm talking about.


Perhaps one of the most frequently asked questions is "How do I get started?" The very first thing you should do is familiarize yourself with the wealth of information available at and If you haven't already done so you should join the JP1 Group at Read as many of the forum messages as you can to get ideas of how other members are using their remotes and the kinds of problems discussed. This is the place to go for help if you can't find information on an obscure or new consumer product you would like to add to your remote control, but only after you have researched it yourself and looked in all the places suggested in the above web sites. As a JP1 member you'll have access to many files related to the hardware and software needed for programming a remote. If you need help with some of the jargon there's a Glossary of Terms at the end of these instructions.

One of your first tasks will be to acquire an interface for connecting your remote to your PC. But don't expect to find these for sale in the JP1 Group. They are relatively easy to build if you know how to use a soldering iron. Otherwise, get a friend or relative with some experience in this area to make one for you. There are several designs in the Files>Interface Designs folder at the JP1 site. They all have complete parts lists and illustrated step-by-step details on how to assemble them. A good choice is the "Simple" interface, so-called because it has so few parts and is so easy to build. The parts cost for one of these can be less than $5.

There are three or four key pieces of software required, and one of these will be necessary to checkout your interface to make sure it is functioning properly. So while you're in the neighborhood downloading interface construction plans, download a few software programs as well. The first program you'll need is (or latest), which you can download from the Files>Programs folder at the JP1 site. When you unzip this package you will find IR.exe bundled with about a dozen RDF files (Remote Definition Files) for the different model remotes supported. The RDF file for any remote you are programming MUST reside in the same directory as IR.exe. You won't use these files directly, but IR must have access to them to identify and work with a remote.

For adding a device to your remote you will need three spreadsheet files:,, and These can all be downloaded from the Files>Spreadsheets folder at the JP1 site. You must have either Excel 97, Excel 2000, or Excel XP installed in your computer to use these spreadsheets But even if you don't have Excel you can still do a lot of programming using just IR alone.


The first time you open IR the display will probably look like Figure 1. The upper portion of the display shows the Device buttons for the model remote identified in the title bar. This default display is for a Radio Shack 15-1994 remote, and shows seven device keys, Device 0 [CBL/SAT] through Device 6 [P&P]. Other model remotes might

Figure 1. Typical IR Start-up Screen

show only four, five, or six. When we download our remote, IR will identify it (using its library of RDF files) and automatically change this portion of the display to correspond. Thereafter, each time IR runs it saves configuration information in the Windows Registry (Figure 2). Included in this information is the RDF filename of the last remote downloaded, so you won't have to reconfigure it every time you use it.

Figure 2. Registry Display Showing IR Configuration Information

Plug your interface into the PC but leave the remote disconnected. Drop down the Configuration menu (Figure 3) and you'll notice a checkmark beside Auto Check. That means every time you start to do an upload or download

Figure 3. Configuration Menu

you'll be prompted to first run the Check Interface test. This is a simple echo-back routine that confirms the interface is detected at the selected parallel port. Once you're setup and running you'll probably not want to be bothered with this every time. To de-select Auto Check, click on it, then click on Ignore in the Confirm box and Yes in the Warning box. You can still run the test any time you want to by selecting Check Interface in the Configuration menu, or you can restore the Auto Check feature by just clicking on it.

From the Configuration menu select Transmission Delay and change it from 0 to 400 (Figure 4), which slows

Figure 4. Setting the Transmission Delay and Port Address

things down a bit so we're not trying to outrun the interface. Also change the Port Address if the default value (378) is not the address of the port you're working with. Be sure you're plugged into a parallel port (like the one your printer is normally connected to) and not a serial port. If you don't know your parallel port address and can't find out by reference to the documentation that came with your computer, you can try each of the three settings in the Port Address selection box and see which one responds to the Check Interface test.

Unless things change, you won't have to do any of this again because of the Registry file mentioned earlier. To make sure everything is setup and ready to go, run the interface test. You must be able to pass this test or you won't be able to download your remote. Click on Check Interface and then the OK button in the Confirm window. When you see a message that says "The remote interface check succeeded. . . . " go ahead and plug the interface cable into your remote. If you have problems passing this test refer to the troubleshooting information included with the instructions for building your interface.

From the main display, drop down the Remote menu and click on Download from Remote. Disregard the message that says "Verify that the interface's voltage switch is set to the correct position . . . " That's for older type interfaces with external power supplies. Normally when IR completes a download and releases its reset of the remote, the red LED blinks twice to indicate the remote has been re-enabled. There are some circumstances where the LED doesn't blink, and in that case you must unplug the remote before you can use it. The causes of this and possible remedies are discussed in detail elsewhere, so we won't elaborate on it here. Just keep in mind that it does not interfere with upload or download. To compensate for this, IR simulates the LED with a little red dot at lower left of the display. When that dot blinks after about two seconds you know the operation has been completed successfully. Otherwise you'll usually see error messages displayed.

Figure 5. Initial Download from Cinema 7

Figure 5 shows the IR display after we complete our first download. (Of course if you're following along with a different remote the display may look different from that shown.) Notice the title bar now identifies the remote we're using for demonstration, a Cinema 7. This remote also happens to have seven Device buttons, as did the 15-1994. The name following the Device number is the label of that device button permanently marked on the remote, and you can see that Devices 4, 5, and 6 are marked differently on the Cinema 7 than they were on the 15-1994. The name in the drop-down menu immediately below that is the Type of device presently assigned to that button, and the Code number below that is the Setup Code for the assigned device. The seven Setup Codes you see here are factory default selections. These are in ROM, so any time you clear the remote's memory to start over this is what you'll get. The odds are pretty slim that any of these are of use to you, but of course that's why UEIC gave you an owner's manual with lists of Setup Codes.

The drop-down menu for Punch-Thru Device allows you to select one device to which all volume and mute commands will be sent, and the State box allows you to turn this feature off if you don't want to use it. In most remotes, Volume Punch-Thru (VPT) works only in TV, VCR, and CBL/SAT modes.

The AdvCode, Upgrade, and Learned displays across the bottom of the screen provide bar graphs showing the relative amounts of special programming memory used, and the values in parentheses show the exact number of bytes of free memory remaining in each partition. This makes it easy to tell if you're nearing the limit of memory as you modify and upgrade your remote.

Most of the lower portion of the main display is devoted to seven pages of data which are accessed by clicking on the tabs. Try this now to get an idea what the pages look like. Here's a brief description of the contents.

Advanced Codes all buttons that have Advanced Codes (EFC's) assigned
Macros macros that have been created, showing bound keys and command sequences
Scan/Fav scan lists (applies only to remotes with SCAN/FAV button, such as 15-1994)
Devices all upgrade devices added to the remote, a keymap for each, and some other data
Protocols any protocols that have been added to the remote
Learned Codes buttons that have been programmed using the learning feature
Raw Data contents of the remote's EEPROM and locations of important pieces of data

Initially all the pages are blank except the Raw Data page, a portion of which is shown below. This page shows the

Figure 6. Portion of Raw Data Display

EEPROM contents in hexadecimal format, starting at address 000 and ending at address 7FF. This page is fun to look at and see how the memory changes as our remote's features evolve, but you should not change anything here. The memory display and all the data in the Control Information area is primarily for qualified hackers who are doing analysis or troubleshooting. Actually, we don't have to use this page for any of the programming we're going to do.


Rather than manually selecting our device Setup Codes using the SETUP button, we'll do it with IR. It's not only faster and easier, you also create a text file that can be saved for backup or cloning. Once you've learned how much fun it is to program your remote you'll be using this file again and again to experiment with changes. In fact, you should adopt a good file naming system at the outset so that you can keep track of experimental configurations. When you start a session with IR just click on File>Open>, select your file, and you'll be right back where you last left off.

If you've already done some manual programming, or if you do any later, it will show up in a download. If you're just starting out and this is your first experience with JP1 programming, your first download presents an opportunity. Suppose, for example, you've invested a lot of time searching out Setup Codes for your equipment, and perhaps manually tweaking a few key moves, macros, etc., to get them just the way you like. Once you've made a download of your remote those changes can be preserved forever in an IR text file. The chances are you'll accomplish all that and more, with greater efficiency, after you start using IR. But you'll have the comfort of knowing you can always upload that file and get back to square one if worse comes to worse. And you can throw away all those scribbled notes on scraps of paper because any time you want to see how your remote is programmed it's all right there on the screen.

For purposes of our example let's assume we're setting up our remote to control a home theater system containing the components shown in Figure 7. Looking in the Cinema 7 owners manual we find three different Setup Codes for

Figure 7. Example Home Theater System

Hitachi TV's, two for Yamaha receivers, and one each for our Toshiba DVD and Echostar satellite receiver. There are lots of Panasonic VCR codes but these probably won't work with our ShowStopper (Panasonic's version of ReplayTV). We'll deal with that later. Finding which of several codes is the right one is no different with IR than doing it manually, you just have to try them. As long as we're going to do an upload we may as well take a guess at Setup Codes for all the components at one time and see if we get lucky. Since we want our TV to be selected by the button marked TV on the remote, we type the Hitachi TV Setup Code (0145) in the Code window for Device 1 [TV]. Likewise, type the Yamaha receiver Setup Code (0176) in the Code window for Device 4 [RCV], and the Echostar Setup Code (0775) in the Code window for Device 0 [CBL/SAT]. The Toshiba DVD Setup Code (0503) already appears in the Code window for Device 2 [DVD] because that's the default device for a Cinema 7 remote. We don't yet have a need for Devices 5 or 6 so we'll just leave those for now. While we're at it let's assign the A/V receiver as our master audio control. Drop down the Punch-Thru Device menu, select RCV for Type, and change the State to On. The upper portion of our display now looks like Figure 8.

Figure 8. Main Display After Selecting Setup Codes

You may notice the Type of device shown for Device 0 is Cable, and that for Device 4 is Audio. If you drop down any of the Type menu's you'll see that the Cinema 7 remote supports six device types, whereas a 15-1994 remote supports only five because it combines VCR/DVD. In both these remotes, satellite receivers fall within the Cable group and receivers and tuners fall within the Audio group. Some remotes with only three or four device buttons group CD together with Audio. But regardless of how many device types your remote supports you can assign any one of them to any device button. It doesn't have to agree with the name for that button on the remote. It wouldn't make sense to make the TV button (Device 1) a VCR, but nothing prevents it. But suppose we had two VCR's in our theater. If we wanted to assign the second one to the AUX button (Device 5) we would click on the Type drop-down menu under Device 5 [AUX] and select VCR, then enter a Setup Code.

We are now ready to upload and try our Setup Code selections. Any time you upload, the data in the IR session at that moment completely overwrites whatever is in the remote. By the same token, any time you download, whatever is in the remote completely overwrites the data in IR. There is no protection against accidental overwriting as there is with file management. So be very careful not to confuse upload with download, and always save a copy of your IR text file immediately before uploading and immediately after downloading.

Drop down the Remote menu and click on Upload to Remote. In about two seconds the little red dot will blink to signal completion of upload. Unplug the remote (if necessary) and see if it works with each device by turning power ON and OFF, and maybe a few other commands. In our case the first Setup Codes we picked from the Hitachi and Yamaha lists just happened to be the right ones for our components, so no changes are necessary. Otherwise we would simply type a new number in the Code window and upload again.


As we learned, there's no Setup Code in the Cinema 7 owners manual for any kind of ReplayTV device such as the Panasonic ShowStopper. After a little checking around we learn that UEIC has assigned a Setup Code (VCR/0616) for ShowStopper but it's only available in newer model remotes. Remember that the Setup Codes in the owner's manual are the only ones placed in ROM at the factory, and our Cinema 7 was built before ShowStopper was introduced. If we were to go ahead and enter Code 0616 for Device 2 and upload, the remote would ignore it because it doesn't recognize that code. (A later download would show that Device 2 had in fact been changed back to the default Code 0060 to avoid any confusion about why it didn't work.) We need to upgrade the remote by adding a new Setup Code to its repertoire. Then we can assign that code to one of our devices.

The spreadsheet is a tool for creating blocks of code that can be pasted into IR and uploaded to a remote to provide it with a new Setup Code, which is the process we call "upgrading". There are several reasons we might want to upgrade a remote. The most common is the situation we have here, a device we want to control that is not supported by the remote. Another reason might be that we have done so many key moves and programming of EFC's on a supported device that we are running out of memory. The spreadsheet lets us assemble all these changes and assign a new Setup Code to them, just as if we were designing a newly manufactured device, then generates upgrade code that is much more compact and efficient so we can do more with less memory.

We will want to pick a 4-digit Setup Code number to identify our upgrade. It can actually be any number from 0000 to 2047, but there are a couple of factors to consider. It is generally a good idea to avoid using a number that's the same as one of the built-in Setup Codes already used by your remote to identify a device of the same type. By "type" we mean one of the types that you see in the drop-down menu for Device Type. If you look through a Cinema 7 owners manual you'll see Setup Code 0039 used for three different types of devices: an Emerson TV, an Admiral VCR, and a Marantz receiver. But there's no 0039 Setup Code for CD players. Since the Cinema 7 treats CD's as a separate type from Audio, if we were creating a CD upgrade we could use that number. But the simplest way to be sure the number you've picked isn't already supported by your remote is to try manually entering it. If you get two short blinks of the red LED the remote accepted it. That means the remote already knows that Setup Code, so you've got to pick another one. If you get one long blink of the LED the remote has rejected that code because it doesn't yet support it, so it's OK to use that number as your new Setup Code.

If the upgrade happens to be a modification of a supported device, selecting a different number will keep both Setup Codes accessible, which might come in handy for troubleshooting the new upgrade as well as avoiding confusing the two. For example, suppose we wanted to create an upgrade for our Hitachi TV, not because it's an unsupported device as is the case with ShowStopper, but just to remap some button functions or add a function that wasn't supported by the OEM remote. A very common practice when modifying a built-in Setup Code like this is to give it a number 1000 higher than the original number, in this case, 1145 for an upgrade of our 0145 Hitachi TV.

On the other hand, if the upgrade is an unsupported device, but one for which UEIC has already established a Setup Code, its not a bad idea to use the number they have already assigned. In our case the Setup Code UEIC has assigned to ShowStopper is VCR/0616, so that's the code we'll use.

Before using the spreadsheet to create a new Setup Code from scratch you should first check the JP1 Files section to see if someone has already setup a spreadsheet for the device you are trying to add. Many of the popular new devices, such as TiVo, ReplayTV, Dishplayer, etc., have already been programmed on a few types of remotes. If you find one that has been setup for a different type of remote you may be able to adapt it to your needs by just changing the remote to the one you're using. One word of advice. If you encounter problems when trying to use a spreadsheet that was prepared on an early version of Keymap-Master, try downloading the latest version and copy the data over to it to see if that solves the problem. If you look through the revision list on the Setup page of the latest version you may even see an update mentioned that relates to the problem you're having. Even if there isn't a spreadsheet for your exact device, it might help to take a look at someone else's spreadsheet before you attempt to create a new Setup Code for the first time. In our case there are some relevant spreadsheets on file, but we'll pretend we can't find one for the ShowStopper for the sake of our exercise.

If you've already downloaded the three spreadsheet files mentioned in section 2 you're all set. Otherwise, do that now. The one we'll use to create the upgrade is Keymap-Master-v4.18 (which was the latest version at the time this was written), and when I refer to "the spreadsheet" that's the one I mean. The other two are for reference when we need certain information. Make sure you install the Excel Analysis ToolPak. Click on Tools>Add-Ins and select Analysis Toolpak and Analysis Toolpak - VBA.

Although you must have Excel installed in your computer to use the spreadsheet, you don't really have to be proficient in using Excel. The reason for this is that the spreadsheet is designed as a form that you fill in by typing values and pulling down selection menus. It is very intuitive and has many explanatory notes and pop up text labels. All the work is done in the background as fast as you enter data. There are, to be sure, many places in the spreadsheet where serious hackers can override the form with manual entries, but these instructions will avoid those areas.

Figure 9. Keymap-Master Setup Page

When you start Keymap-Master you'll see a display somewhat like Figure 9. The reason there's already data in the

Upgrade Code box is that the spreadsheet automatically calculates the code for whatever upgrade parameters are shown in the display. The default configuration just happens to represent adding a Cable device (cell B17) with Setup Code 0000 (cell B15) to a Radio Shack 15-1994 remote (cell B16). You will see the code change each time we modify one of these parameters to match our situation. The box labeled Protocol Code will remain blank unless the spreadsheet determines that a protocol upgrade is required by your remote.

The first prerequisite to using the spreadsheet is knowing the code for every function that will be used to control the upgrade device, usually in EFC format. You can also work with OBC codes, but these are not as readily available so we won't use them. Most people will have EFC codes that they got from published lists on the web or from UEIC, or from the Devices4 spreadsheet. Another method sometimes necessary to get EFC codes is to use your remote to "learn" the buttons from an OEM remote, download, and read their descriptions off the Learned Codes page. To obtain EFC's for all the buttons of an OEM remote requires several passes because, as we saw at the bottom of Figures 1 and 5, the Learned memory partition is only 1022 bytes, which limits you to learning approximately two dozen buttons at one time.

Another prerequisite is that you know the protocol for controlling the upgrade device. Simply stated, a protocol specifies how the remote communicates with a certain device, including such things as infrared carrier frequency, bit timing, message organization, etc. At present, the spreadsheet knows and supports over 40 different protocols, each with a distinctive name, and more are constantly being added. The Devices spreadsheet is a handy resource for obtaining protocol information on a great many devices.

Notice the row of tabs across the bottom of the spreadsheet, for selecting pages. The Setup page is where you specify the device this upgrade is for, and the remote you're using. It's also the output page for all the work done by the spreadsheet. The Functions page shows all the control functions available, and the Buttons page shows how they are mapped to various buttons. Most of your work can be accomplished using only these three pages.

For reasons explained previously, we've decided to use Setup Code 0616 to identify our VCR upgrade. We'll start by replacing Device Name in cell D2 with the name 0616 ShowStopper. We can also use that as the filename when we save the spreadsheet. Click on Setup Code (cell B15) and enter 0616. Click on Remote (cell B16), drop down the menu, and select 02 = Cinema6/7. Click on Device type, (cell B17), drop down the menu, and select 03 - VCR. (Note: The Device type specified for an upgrade does not have to correspond to the actual type of device. We could have selected 01 - Cable or 02 - TV, for example.) Leave Button codes set on EFC because that's the type of data we'll be using. Also leave the Number Table set on USE. A Number Table is a standardized method of handling numeral buttons that uses less memory. Always try to use the Number Table unless you have problems with it or you know it doesn't apply.

Open the Devices4 spreadsheet as a second file so that you can easily switch between it and the upgrade spreadsheet. This is where we'll get the remaining data for the spreadsheet, including Protocol name, device codes, and button codes. After selecting VCR in cell B2 (always select Device Type with the drop-down menu, don't try and type it in) and typing 0616 in cell B3 the display should look like Figure 10. (Be sure to hit Enter after typing in the Setup Code number.)

Figure 10. Devices4 Spreadsheet with ShowStopper Information

Go back to the upgrade spreadsheet, click on protocol name (cell B4), drop down the menu, and select the protocol that we found in cell B5 of Devices4, which was Panasonic. (Disregard the number preceding Panasonic. It's just a reference number for that protocol.) As soon as we select a protocol name a device code instruction appears just to the right of the drop down button (in cell D4), and one or more DeviceCode cells may be blocked out with gray shading. Some instructions say No device codes need be entered, or Enter one device code, etc. An instruction that says COMBO: Enter . . . device codes usually means this is a protocol that allows you to combine multiple Device Codes into a single Setup Code. In our example the instruction says 2DEV: Enter one or two device codes.

This means that both DeviceCode1 and DeviceCode2 will be used in each signal. It's not a COMBO code. From cells B8 and B9 of Devices4 we get the values for the two Device Codes (0 and 148) and enter them into cells B5 and B6 of our spreadsheet. That completes our manual entries on the Setup page, but the upgrade code calculations can't be done until we complete the Functions and Buttons pages.

The Functions page is where we must show all the functions and their EFC's that we plan to use in our upgrade. Think of it as a page where you specify all the things the remote "can" do without regard to "which" buttons do them. Looking at the Functions page you'll see it provides a starting point by listing about 40 generic functions, most of which are likely to be available on a lot of remotes, but not necessarily all of them. For convenience, both the Devices4 spreadsheet and the Buttons page list buttons, functions, and EFC's in this exact same order. So if you're working from a Setup Code that's known and listed in Devices4 (as we are), the fastest way to get started is to copy the entire block of EFC's from Devices4 to the Functions page and then make any changes or additions necessary.

In Devices4, copy the entire EFC column to the Clipboard. The easiest way to do this is to first click on the space above the column, the cell with a letter in it. That will highlight the selected column in blue. Then copy it using either Edit>Copy or Ctrl + c. That will cause an animated border to appear surrounding the selected data. Return to the spreadsheet, click on the lettered space above the EFC column, then hit Edit>Paste Special. That will pop up the specification box shown in Figure 11.

Figure 11. Paste Special Specification Box

Change the Paste option from All (the default) to Values, then click on OK. Presto! Our Functions page now has EFC's for all the buttons for which there is a control function relevant to the ShowStopper device (Figure 12).

Figure 12. Functions Page after Copying EFC's from Devices4

If we turn to the Buttons page we see the display shown in Figure 13. The upper part of the display shows the same generic list of functions, in most cases matched up with buttons of the same name, and with EFC values carried over from the Functions page. The OBC and HEX values have been automatically calculated by the spreadsheet.

Figure 13. Buttons Page of Spreadsheet

Depending on the remote you are programming and the type of device this spreadsheet is for, some buttons may be shaded dark, meaning either that they can't be used in that control mode or that they don't physically exist on the remote. In our example you'll notice the SLEEP button is shaded, which tells you that button is useless on a Cinema 7 remote when controlling a VCR type device. (If we wanted to program the SLEEP button we could change the Device Type on the Setup page to Cable, because the SLEEP button is available in that mode. Earlier we explained that the Device type of an upgrade doesn't have to match the actual device.)

If we were using a 15-1994 the SLEEP button wouldn't be shaded, but the SURROUND button would, and it would be useless on that remote in VCR mode. Although you can't use shaded buttons in the spreadsheet, you can sometimes use Advanced Codes in IR to assign some other function to those buttons. (The SLEEP and the FAV/SCAN buttons are exceptions. They can't be programmed using Advanced Codes.) The groups of buttons below the generic list are shaded because they are unique to the specific remotes indicated, such as the ReplayTV remote, the Millenium 4 remote, etc.

If the button assignments shown in Figure 13 are satisfactory to you, fine. But suppose, for example, we wanted to change the DISPLAY button to function as an ENTER button. The general procedure for mapping a function to a button is to click on the Function cell (column D) for the button, drop down a menu of all the possible functions that can be mapped to that button, and select one. The Function Table shows this same menu, as well as providing a visual indication (by light and dark cells) which functions have been used and which are unassigned. If a function you want to use isn't in the menu, that's because it hasn't yet been defined on the Functions page. For our example we would click on the Function for the DISPLAY button, drop down the menu, scan through the list and select the enter function. Notice that the EFC, HEX, and OBC values immediately change to the correct values for the new function. Also notice that the display function in the Function Table changes color to indicate that it is now unassigned.

The Function column is the only place on the Buttons page you can make manual changes. All other data is controlled by the spreadsheet and protected. If you try make any change other than to select from a function menu you'll see a message that says The cell or chart you are trying to change is protected and therefore read-only. Disregard the comment about un-protecting the page. That's strictly for qualified hackers. Any changes that you need on the Buttons page (other than mapping) can be obtained by changing the Functions page.

Let's assume we are familiar with the ShowStopper OEM remote and we see that some of its most useful functions are missing in Figure 13. We decide we want to add channel guide, replay guide, quick skip, and instant replay functions, none of which is in the generic list. And our Cinema 7 doesn't have buttons with any of those labels either, so we'll have to pick some existing buttons to assign them to. For starters we'll need the EFC's for these functions, and we can get them from a list we download from (Figure 14).

Figure 14. List of EFC's for VCR 0616

First we must go to the Functions page, add these four functions to the list, and enter their EFC's. Now when we go back to the Buttons page we see they have been added to the end of the Function Table, which means they have also been added to the Function drop down menu. Let's say we decide to use the PROGRAM GUIDE button for the channel guide function. Click on the function for the PROGRAM GUIDE button to drop down the Function menu, then change the function from program guide to channel guide. The OBC, EFC, and HEX values appear immediately, and the shading in the Function Table changes to show the channel guide function is now selected and the program guide function is not. Now assign the remaining three functions to three more buttons.

Figure 15. Portion of Buttons Page Showing Additional Mapping

Let's also assume we want to activate the four ARROW buttons so we can navigate on-screen guides and menus. Again, we must start by enabling these functions on the Functions page, only this time they are already on the generic list. All we have to do is assign EFC's to them. We don't have to do anything on the Buttons page (Figure 15) because those functions were already matched to buttons with the same name.

Figure 16. Spreadsheet for ShowStopper (Panasonic protocol)

Our Setup page now looks like Figure 16. The data in the box titled Cinema 6/7 Code is the upgrade code all this effort has been for. Amazingly, that little bit of code is all we have to tell our remote for it to understand how to control ShowStopper the way we want it to. In this example there is no Protocol Code because the Panasonic protocol, a fairly common one, is already resident in our remote's ROM. In section 7 we'll go through an example where the spreadsheet generates both Upgrade Code and Protocol Code.


From the Setup page of the spreadsheet, copy everything inside the box labeled Cinema 6/7 Code to the Clipboard by using Edit>Copy or Ctrl + c. Without closing the spreadsheet, open IR to the Devices page and click on Add to open the Upgrade Device window. Paste the clipboard contents into the Upgrade Device window using Ctrl + v.

Figure 17. Upgrade Code Copied from Spreadsheet to IR

When done correctly the Setup Code number (0616) will appear automatically in the Code window. The Device Type window always defaults to CD, so you'll have to drop down the menu and change this to VCR. The Upgrade Device window display should now look like Figure 17.

If both the Device Type and Code windows are blank it's probably because you didn't include the first line (starting with Upgrade code 0 = ) in the data you copied from the spreadsheet. Hit the Cancel button to wipe everything out, and try again. The box labelled Protocol > FF will be checked automatically whenever required, so you never have to worry about that. When you think the Upgrade Device window looks correct hit the OK button to enter everything into the Devices page. Figure 18 shows what the Devices page looks like after you have made the entry.

Figure 18. Devices Page with Setup Code 0616 Added

The Key Map allows you to scan through and see what codes have been assigned to various buttons and which ones are not mapped. This can sometimes be helpful in troubleshooting a problem where a device doesn't seem to respond to a certain button. If you hit the Edit button you will be returned to the Upgrade Device window shown in Figure 17. But unless you are a pro, don't try editing in that window. Instead, delete the device and transfer corrected data over from the spreadsheet.


Suppose we've been reading over some of the messages posted on JP1 and we've learned there are three options available as far as protocols go when creating a new Setup Code for ReplayTV (either the Replay brand or the Panasonic brand).

1) Panasonic protocol, which takes up little memory, and allows the learning buttons to function. It's not compatible with multiple ReplayTV units, and it lacks a number of commands.

2) ReplayTV Official protocol, which uses a lot of memory and doesn't support Advanced Codes, but allows multiple Replay devices.

3) ReplayTV Hacked protocol, which also allows multiple devices, uses less memory, allows you to use Advanced Codes, and has some special features such as a 3-minute commercial skip.

If we had selected the third protocol option instead of the first, the Setup page of our spreadsheet would look more like Figure 19, with a considerable amount of code in the Protocol Code box. In this case we have to transfer this code to the Protocols page of IR using a procedure similar to that we used for the Upgrade Code.

Figure 19. Spreadsheet for ShowStopper (ReplayTV Hacked protocol)

Copy everything inside the box labeled Protocol Code to the Clipboard by using Edit>Copy or Ctrl + c. Then open IR to the Protocols page, click on Add to open the Upgrade Protocol window, and paste the clipboard contents into this window using Ctrl + v (Figure 20).

Figure 20. Upgrade Protocol Copied from Spreadsheet to IR

When done correctly the Protocol ID number (0040) will appear automatically. If the Protocol ID is blank it is probably because you either didn't include the first line (starting with Upgrade protocol 0 = ) or the last line (End) in the data you copied from the spreadsheet. Hit the Cancel button to wipe everything out, and try again.

When the Upgrade Protocol window looks correct hit the OK button to enter everything into the Protocols page, which should then look like Figure 21.

Figure 21. Protocols Page with Upgrade Protocol Added

Looking at the bottom of Figures 18 and 21, the Upgrade bar graph indicates we used about 7% or 24% respectively of available upgrade memory. If we had more upgrade devices we would fill out more spreadsheets and paste their code(s) onto this page the same as we did these, and they would be listed in the box at left. To make a change to an upgrade protocol, select it in the left box, hit Delete, then Add it again after making your changes in the spreadsheet.

One very important thing we must remember to do before uploading for a tryout is to make sure we have specified 0616 as the Code for Device 2 [VCR].


Advanced Codes can be added using IR alone, and the result is the same as if we had added them manually using <Setup> + code 994. As with other types of programming, any manual additions or deletions will be displayed on the Advanced Codes page after a download.

In our home theater example the program received by satellite is distributed throughout the home, so we want the satellite receiver to remain ON continually, not just when the theater is on. To prevent accidentally turning it OFF we will program the POWER button so that if it is pressed while in CBL/SAT mode the TV is turned OFF instead of the satellite receiver. A consequence of this change will be that the only way to actually turn the satellite receiver ON or OFF is from its front panel, but that's acceptable. We will need an EFC for the TV, and we can get it from the Devices4 spreadsheet. Just enter TV for Type and 0145 for Code and Devices4 displays all the button codes (well, most of them, anyway). As with many TV's, this one doesn't have a discrete OFF command, only a POWER toggle command, and the EFC for that is 122.

Select the Advanced Codes page in IR and click on the Add button to get the Advanced Code work pad. First we must specify the Bound Key, which is the combination of device mode and button we're assigning the Advanced Code to. Drop down the Device menu and select CBL/SAT, then drop down the Key menu and select the POWER button. Leave the Shifted box unchecked because we want the function to apply to the POWER button alone. Next we must specify an output Function. Drop down the Device menu and select TV, then enter Setup Code 0145 in the Code box. Finally, check Advanced Code, since that's the format of data (EFC) we're providing, and enter the EFC code (122). (Don't try to use Hex Command format. That's for pro's.)

Figure 22. Advanced Code Work Pad

The Advanced Code work pad should look like Figure 22, and clicking on OK enters it into the Advanced Codes page of IR as shown in Figure 23.

Figure 23. Advanced Codes Page After Clicking on OK Button

It is important to note that we are not constrained in the output Function to one of the seven devices assigned to our Device buttons. Rather, we are allowed to specify any device (Device Type) and Setup Code (Device Code) supported by our remote. Here's an example that shows how that comes in handy. Suppose we want to use an X10 infrared transceiver for Lights ON and OFF commands. Cinema 7 supports X10 as a CD device with Setup Code 0167, so we could assign that code to Device 3 [CD] and pick a couple of buttons for ON and OFF in that mode. But let's imagine that we're planning to add a real CD player to the theater in the near future, and we want to reserve our CD button for that. Furthermore, we would like to control the lights while in TV mode rather than having to go into CD mode, do the lights, then return to TV mode. Of course that will require a couple of unused buttons in TV mode, so let's use the FFW button for ON and the REW button for OFF. Here's the way we might set this up.



Bound Key






Advanced Code

Lights ON






Lights OFF






You can get the EFC's for CD/0167 from Devices4, but you had to know beforehand that POWER (EFC = 558) is the All Lights ON function, and MUTE (EFC = 238) is the All Lights OFF function.) That information can be found at

The point of all this is that we can add those two X10 commands as Advanced Codes for CD/0167 even though that CD is not one of our selected Devices. So even though a 7-in-one remote has only seven Device buttons, by using IR you can get it to perform some limited control on any of the hundreds of devices supported by the remote.

We're now ready to save the IR file, then upload and test the new features. If an Advanced Code needs tweaking go back to the Advanced Codes page, select it, and hit the Edit button to return to the display shown in Figure 22.


Programming a macro with IR is faster, easier, and more fun than doing it manually. All your work is visible, you can make changes without re-entering the whole macro, and you don't have to watch for those LED blinks or hurry to beat the 10-second clock. For an example we'll build a macro that uses <Shift> POWER to turn on the TV and the A/V receiver, switch the TV input source to Ant A (the input our cable is hooked up to), and select TV as the A/V source.

In the previous section we learned that our Hitachi has only a toggle POWER function. Like many TV's, it also doesn't have discrete source selection. But also like many TV's when you send any kind of channel command (such as LAST, CH+, or CH-) it switches to Ant A, so we'll take advantage of that. Looking at the Yamaha 0176 Audio device in Devices4 shows only a toggle POWER command with an EFC of 250, and no functions for source selection. But a little research at turns up the fact that discrete power ON command is EFC 248, and TV input select is EFC 360. We could put those EFC's in our macro (Setup + EFC) but that's generally not a good idea because it takes so long to transmit a command that way. Instead, we'll assume for this example that we have already programmed Advanced Codes (using the procedure described in the previous section) so that, when in receiver mode, the ENTER button turns power ON and the MENU button selects TV input. If we didn't have a physical button available, or if we wanted to avoid the consequences of someone accidentally hitting one of those buttons, we could have assigned the functions to two of the four Phantom buttons you'll find listed at the end of the Key menu in Figure 22.

Select the Macros page in IR and click on the Add button, then pull down the Key menu as shown in Figure 24. For the Bound Key, select POWER in the drop down menu and click on Shifted. Now build the macro in the order you want it to be transmitted by highlighting buttons in the Available Keys window and clicking on Add. As you do this the

Figure 24. Macro Work Pad with Key Menu Dropped Down

string will grow in the Macro Keys window. The editing buttons at the bottom of the windows are self-explanatory for inserting or deleting items to make changes without starting over. For our macro we'll turn on the receiver and select its input first, then do the TV stuff and leave the remote in TV mode.

Figure 25. Completed Macro on the Work Pad

Figure 25 shows our work pad after completing the 6-step macro, and Figure 26 shows the Macros page after clicking on OK to enter it.

Figure 26. Macros Page After Clicking on OK Button

At this point we can upload and try out the macro. If it doesn't work the way we want it to we can highlight it on the Macros page, click on Edit to get back to the work pad, make our changes, select OK and upload again. To remove a macro use the Delete button on the Macros page.


You'll find that IR removes many of the restrictions placed on manually programming a remote. A few examples of things you can do with IR that aren't possible manually are assigning macros to shifted device buttons, adding Advanced Codes using supported devices other than those assigned to your Device buttons, and using Phantom buttons. You may also discover that IR will allow you to setup some control functions that are not really possible on the remote. Although this might seem like sandbagging, it was designed that way deliberately so that users can experiment to find out what works and what doesn't. For example, using IR you can "apparently" program Advanced Codes to the actual Device buttons. But when you upload this data to the remote you'll find it just doesn't work.

You are encouraged to experiment with IR and the spreadsheet. That's the best way to learn. Try some goofy macros and advanced codes just for the fun of it. You may upload something that doesn't work, but you can't hurt your remote. Just make sure you have a good IR text file to fall back on in case things really get messed up.


a. Device

A consumer product operated by a remote control, such as a TV, VCR, or DVD.

b. Setup Code (Previously referred to as Device Code)

A four-digit number, usually within the range 0000 to 2047, that identifies a specific device (or group of devices) and the keyboard commands they respond to. Universal remotes are manufactured with hundreds of Setup Codes built-in so they may be setup to control many different brands and models of devices.

c. Upgrading

The process of adding a new Setup Code to a remote for either or both of the following reasons:

1) To add control for a device not included in the factory supplied Setup Codes;

2) To change the way a remote controls a device, i.e., to modify a standard Setup Code.

d. Command Code and Device Code

Most infrared signals comprise two parts, a fixed portion which is the target Device Code, and a variable portion which is the Command Code.

e. OBC (Original Button Code)

Another term used for Command Code.

f. Advanced Code

A 3-digit code used to program a button within a specified Setup Code.

g. EFC (Extended Function Code)

Another term used for Advanced Code.

h. JP1

The designation of a 6-pin connector in remote controls that have the capability of being programmed with a PC and interface.

i. Interface

A device that links the JP1 connector of a remote control to the parallel port of a PC.

j. OEM Remote

Original Equipment Manufacturer's remote, the one supplied with a consumer product.

k. IR (also referred to as Ir, or IR.exe)

A WIN9x program used to upload/download a remote's memory, with a GUI that enables displaying the data and making changes.

l. Keymap-Master Spreadsheet

An Excel file that generates upgrade code after inputting device data, remote data, and button configuration.

m. Devices4 Spreadsheet

An Excel file that contains device data for all the Setup Codes found in a 15-1994 remote, and some others.

n. Devices Spreadsheet

An Excel file containing protocol and device specifications for a very large number of devices.

o. RDF (Remote Definition File)

A file that provides IR with all the information it needs about a particular model remote control, such as what keys it has, how they are coded, etc.

p. Protocol

A segment of code that tells a remote how to format an infrared signal, including carrier frequency, signal timing, etc.

q. Signal Style

The order in which bits are transmitted, and whether or not they are complimented from the raw data supplied to the protocol. There are four Signal Styles, as follows:

1) MSB

The Most Significant Bit of a data word is transmitted first.

2) MSB-Comp

The Most Significant Bit of a data word is transmitted first and the bits are complimented.

3) LSB

The Least Significant Bit of a data word is transmitted first.

4) LSB-Comp

The Least Significant Bit of a data word is transmitted first and the bits are complimented.

r. UEIC (Universal Electronics Incorporated)

The company that manufactures all of the remotes used in the JP1 group.

s. OFA (One For All)

The main brand name under which UEIC markets its universal remote controls.

t. RS (Radio Shack)

Most Radio Shack remotes, including the 15-1994, are made by UEIC.

Home | Intro | Yahoo Group | Hardware | Tools | Manuals | Guestbook | FAQ Links