The Museum of HP Calculators

HP Articles Forum

[Return to the Index ]
[ Previous | Next ]

Eramco Systems RSU-2 Soft Select (128K) for HP-41

Posted by Diego Diaz on 1 Apr 2008, 12:41 a.m.


This document is intended to provide a useful guide to configure ERAMCO RSU-2 unit in order to gain access to its 128K (32 pages).

There is a well documented ERMACO OS that fits this unit conveniently but such a document seems almost impossible to find. To overcome the lack of the original handling software documentation as well as for those that preferred to use his/her RSU-2 without the original OS, I've designed a few steps procedure in order to allow RSU-2 users managing the "huge" amount of memory in their RAM-Boxes. Anyhow if someone is the fortunate proprietary of an original RSU-2 OS it would be of great help to all of us if he or she decided to share the original documentation of this software with the HP-41 enthusiasts community.

What follows has been deduced by reverse-engineering my own RSU-2 and has also been tested in the RSU-2 borrowed to Emmanuel Compès. Thanks to him and to the superb job of schematics reverse engineering and compilation done by Tony Duell.

Technical details

First let's have a look at what those guys at ERAMCO did back in the eighties to handle 128K with an HP-41. They were really ingenious indeed.

As you all know pages #0 to #7 of an HP-41 are reserved for internal usage. Thus there shouldn't be any RAM in these addresses. With this in mind writing (using the H'040 instruction) into any address lower than H'8000 would be harmless.

A "register" were placed in this area (below H'8000) to keep the configuration word of the RSU-2. The format of said register as well as the register's access method is explained in the following paragraphs.

The 128K of the RSU-2 are organised into four "Banks" containing 32K each. Every "Bank" holds pages from #8 to #F in an all-in-a-row fashion (i.e. no Bankswitching allowed).

The “Banks” into RSU-2 have nothing to do with “Banks” as referred in the Bank-switching schemes.

How to configure

There is an eight bits "register" containing required configuration bits inside the RSU-2, I've found a way of writing into that "register", thus allowing full control over said configuration and over RSU's 128K.

You can reach the configuration register by "writing" (H'040) into *any* address in the range H'0000 to H'7FFF (lower half of the 64K addressable space)

The address you choose to write at is meaningless, the word (10 bits) you write is where attention must be paid:

bit 9 - So far I've found no use of it.
bit 8 - Set(1) or clear (0) the addressed bit in the register
bit 7 - So far I've found no use of it.
bit 6 - So far I've found no use of it.
bit 5 - So far I've found no use of it.
bit 4 - So far I've found no use of it.
bit 3 - So far I've found no use of it.
bit 2 - Address bit 2 of the register's addressed bit
bit 1 - Address bit 1 of the register's addressed bit
bit 0 - Address bit 0 of the register's addressed bit

With this pattern, if you want to set (i.e.) bit 5 of the configuration register, just write H'105 into any address below H'8000 (I used H'4100)

Now the meaning of those register bits is needed to get the whole picture, here you are:

Bits 7-6 = address of current active Bank (00=0, 01=, 10=2, 11=3) each Bank holds 32K
Bit 5 = Enable/disable page #D
Bit 4 = Enable/disable page #C
Bit 3 = Enable/disable page #B
Bit 2 = Enable/disable page #A
Bit 1 = Enable/disable page #9
Bit 0 = Enable/disable page #8

Pages #E & #F cannot be disabled thru configuration register.

Pay attention to the function of the two switches you'll find in the top (or front) of the unit.

   /    [__X][__X]      \
  /                      \
 |||_________||         |||
  \|_=======_|          |/

SW1 SW2 ON OFF ON OFF (viewing with the connector towards you)

SW1: ON=Write protect pages #E & #F, OFF=Write enabled.

SW2: ON=Read enable pages #8 to #F, OFF=Read disabled.

IMPORTANT: Please note that you *must* make sure that addresses of polling points (from H'XFF4 to H'XFFA) are cleared for every page and plane prior to set SW2 ON (Read enable position) otherwise severe-crashes are most likely to occur. Also make sure that the internal lithium battery is in good working order to prevent your data from accidental erasing when the RSU-2 is unplugged from the HP-41.

Configuration procedure and register table

According to the info detailed above you'll need a means to write into your HP-41's memory to properly configure RSU-2. I've chosen myself the HEXEDIT command from HEPAX module as it also allows a convenient CLRAM command which can easily erase the random (garbage) contents of the RSU-2 setting it into an initialized (zeroed) status. To avoid HEPAX RAM interferences with RSU-2 RAM I've used a Clonix-41 module pre-configured as ROM-olny HEPAX and fixed to page #7.

Any other software allowing WRITE s&x (H’040) instruction can be used (e.g. David Assembler) or, if you’re comfortable with M-code, you can build your own routines for that specifis tasks. Just remember thah you’ll have to allocate it into a page number out of the range #8 to #F as these are going to be used by RSU-2.

First you must set SW2 to OFF position to avoid garbage reading and consequent crash of your HP-41. Also set SW1 to OFF so you can write pages #E and #F. Then insert the Clonix into any port (1 to 3).

Now plug your RSU-2 into the HP-41, turn it on and execute HEXEDIT.


You'll see [ADR: _ _ _ _ ] on the display.

NOTE: You may want to assign HEXEDIT and CLRAM commands to a couple of keys for your convenience.

Choose any address below H'8000 (I use H'4100) and write in sequence:

H'007, H'006 (This will set "Plane 0" as the "active" plane) H'100, H'101, H'102, H'103, H'104, H'105 (This will enable pages #8 to #D)

Exit HEXEDIT by double clicking the back arrow [<-] key.

Write "OK" into ALPHA, this is required for the CLRAM command to operate)

Now we need to erase the whole 32K (8 pages) of active plane:

1) 8 ENTER (Place 8 into HP-41's X register.)

2) Execute CLRAM.

Repeat steps 1) and 2) for values 9 to 15 (pages #9 to #F)

Now execute HEXEDIT again and write H'106 (This will switch plane 1 to active)

Exit HEXEDIT and repeat erasing procedure from 8 to 15

Enter HEXEDIT once more and write H'107, H'006 to activate plane 2.

Exit HEXEDIT and repeat erasing procedure from 8 to 15

Execute HEXEDIT for the last time and write H'106 to activate plane 3

Again, clear pages #8 thru #F as you've done previously.

After finishing this (certainly annoying) procedure we've got a shinny initialized 128K RSU-2 unit ready to play with. Fortunately this should only be done once. Nevertheless you cannot read its contents until you set SW2 back to ON position. Go ahead and do it now.

Here you are two tables summarizing the words you must write to handle the whole thing.

To enable	H'100	H'101	H'102	H'103	H'104	H'105
To disable	H'000	H'001	H'002	H'003	H'004	H'005
Table 1: Codes to enable/disable “read” on individual pages. Note that you can still write into a disabled page, but the data won’t be readable untill you re-enable the corresponding page.

	        BANK 0        BANK 1	  BANK 2	BANK 3
To activate   H'007,H'006  H'007,H'106	H'107,H'006  H'107,H'106
Table 2: Codes to activate one of the four "Banks".

Handling RSU-2 with its own OS

For those that have the original RSU-2 OS but (as most of us) lack its documentation, I’ve prepared this short reference as a guide to the three new undocumented functions.

The rest of the functions are fully covered by the “Eramco ES-41 Database 85” manual.

Port numbers in these functions are refered to in the following manner:

Physical Port 1: Page # 8 => X = 1
Physical Port 1: Page # 9 => X = –1 
Physical Port 2: Page # A => X = 2
Physical Port 2: Page # B => X = –2
Physical Port 3: Page # C => X = 3
Physical Port 3: Page # D => X = –3
Note that pages #E and #F are not handled by these functions, they should contain a copy of the “ESRSU-1A” and “ES RSU-2A” respectively, in each of the four Banks, to work properly.

None of the following functions is programmable.

- PORTON (XROM 04, 62)

Input: Port number in X

Output: (none)

Fuction: Allows access to the port specified by the contents of X register.

- PORTOFF (XROM 04, 63)

Input: Port number in X

Output: (none)

Fuction: Disables access to the port specified by the contents of X register.

Note: After PORTOFF is executed, the selected page can not be read, but it can still be written with WRITE s&x (H’040) M-code instruction.

- SETBANK (XROM 06, 56)

Input: Bank number in X (Bank number must be in the range 1 to 4)

Output: (none)

Fuction: Selects the Bank specified by the contents of X register as the active Bank.

Note that the configuration of the enabled/disabled pages remains unchanged when you switch from one active Bank to another.

Also the Bank and pages configuration, as well as the RAM contents, are kept by the internal battery while the RSU-2 is disconnected from the HP-41.

Please experiment by yourselves and do not hesitate in mailing me your questions or comments.

Best wishes and enjoy your RSU-2... ;-))

Diego Díaz.


[ Return to the Message Index ]

Go back to the main exhibit hall