The Default
When you first turned your R47 on, you saw a screen much like the one here, but what concerns us now is the menu at the bottom. It is called MyMenu, and it is special.
There are several ways to bring it up. In order of increasing desperation and destructiveness:
- hold the
🟦key for about a second1 - press
EXITrepeatedly2 🟧CATMENUSM🟧MyMenu🟦CLR🟦RESET- remove the simulator’s
backupR47.cfgfile
While this stock menu initially appears useful, if you use the R47 long enough, it should strike you as disappointingly familiar. It’s just a copy of the first row of 🟧-shifted functions! Surely the purpose of MyMenu cannot be merely to save us a single shift prefix?
On observing that all roads lead to MyMenu, there is an implied promise of more interesting things to be built atop that prime real estate. Does the R47 deliver?
Yup!
Ribbons: Overriding the Bland Default
The R47 ships with several MyMenu presets for you to choose from, called “ribbons.”3 Access this selector via:
🟦 KEYS RIBBONS
You can return to the default depicted above with the M.R47 item, but why settle for that when you can instead have…
- M.CPX: complex numbers {
DRG,CC,4eⁱˣ,eˣ,𝓲⦿,𝓲} - M.ENG: engineering {
𝓲,CPX,π,MATX,TRG,eˣ} - M.FIN: finance {
%,Δ%,yˣ,x²,10ˣ,FIN5} - M.FIN+: alternative to above, not a complement {
%+MG,%T,%,Δ%,TVM,FIN} - M.SAV: gathers primary file I/O features from
🟧PREFand🟦I/O: {DMCP,ActUSB,SAVE,LOAD,SAVEST,LOADST} - M.SAV+: same as previous, but with
WRITEPandREADPin the middle two positions
The purpose behind the other stock MyMenu presets are not as clearly defined:
M.C47: Four of these six items — {
yˣ,x²,10ˣ,eˣ} — correspond to the first row of🟧-shifted functions in the current C47 simulator. The two others (in the F1 and F6 spots) exist to paper over a limitation in the C47 keyboard owing to the desire to use the primary keys of the DM42 unchanged. They needed spots for theDRGand𝓲⦿functions, and they landed here.(The keyboard and faceplate rearrangement in the R47 allowed the developers to give these functions better spots on the R47.)
M.C47+: This appears to be someone’s personal choice of features they wanted faster access to than the C47 layout allowed. Three of the items did later earn spots on the R47 layout — {
DRG,R↑,x!} — and two are settings the collector must have wanted surfaced:DSPanddℤ.0. The sixth is the flip-flag function (FF) which brings up a submenu that gives quick access to the calculator settings.M.R47+: This appears to be a rethinking of the above to avoid wasting the three spots that landed on the R47’s final layout. What you get instead in those spots are {
STOPW,LOOP,TEST} which suggests it was picked by an RPN programmer who occasionally uses their R47 as the world’s nerdiest stopwatch.
Ribbons replace only the bottom row of MyMenu. Any items you ASN on the two rows above persist, which brings us to…
The True Purpose of MyMenu
You may be aware already that the R47 allows completely overriding the contents of any menu while in USER mode via its ASN feature. We are now going to combine these ideas by merging a suite of R47 programs with one of its predefined ribbons to produce a useful whole.
To begin, download my OpAmp.p47 suite and 🟦 I/O READP it into your R47. It provides:
_INIT/OpAmp: an initialization routine that you can call by either name6 to set up default variable names, a desirable numeric display mode, etc.
RJnoise: calculate the Johnson noise of a resistor Ri over a given bandwidth B1-B0, at a given temperature TK in Kelvin:
`R_j = sqrt(4 * k_B * T_K * (B_1-B_0) * R_i`
If you set the bandwidth to 1 — as by giving B1=2 and B0=1 — the result is in the V/√Hz unit commonly used with op-amp noise specs.
A useful fact we can learn from this is that a 1 kΩ resistor is approximately equal to 4 nV/√Hz, a common jellybean7 “low-noise” op-amp spec. Hence, using much larger resistors around such an op-amp wastes its capability.
VOS: Compute the output voltage offset of an op-amp given these datasheet specs…
- IIB: input bias current
- IIO: input offset current
- VIO: input offset voltage
…plus the resistances around the op-amp…
- Ri: input to ground resistor, lowering the stock input impedance
- Rf: feedback loop resistor
- Rg: inverting-to-ground resistor
This reports the expected output offset voltage as:
`V_(OS)=(R_f/R_g+1)*(V_(IO)+abs([I_(IB)(R_(pf)-R_i)]-[I_(IO)/2(R_(pf)+R_i)]])`
The first term is simply the op-amp’s gain, which magnifies both VIO plus the current-based effects8 calculated by the big absolute-valued term. Rpf is the parallel resistance of the feedback resistors, calculated separately because it’s used twice.
GNI: Front end for the included “
Gain” program to set the operating mode flag (01) that causes it to calculate the gain of an op-amp in the non-inverting configuration given the feedback resistor value Rf and the resistor from there to ground, Rg.GINV: Same idea, but for the inverting configuration.
||R: Compute parallel resistance for the simple 2-resistor DC case. The R47 includes the similarly-named
||function under itsELECmenu, but it takes complex numbers to include phase, and it produces a complex impedance result. This version is technically a subset of that functionality which ends up more useful when you do not care about reactance, phase, etc. (This function is used internally by the suite — in the VOS routine above — making it “free” to end users.)Rdiv: Calculate the output voltage from a resistor divider given the input voltage Vi, the “input” resistor value Ri and the “ground” resistor Rg.
With that suite loaded, try this key sequence:
🟦 KEYS RIBBONS 🟧 M.SAV+
long-press 🟦 to bring that new menu up
🟦 ASN 🟧 CAT PROGS RJnoise EXIT 🟧 F1
🟦 ASN 🟧 CAT PROGS Vos EXIT 🟧 F2
🟦 ASN 🟧 CAT PROGS Gni EXIT 🟧 F3
🟦 ASN 🟧 CAT PROGS Ginv EXIT 🟧 F4
🟦 ASN 🟧 CAT PROGS ||R EXIT 🟧 F5
🟦 ASN 🟧 CAT PROGS Rdiv EXIT 🟧 F6
🟦 ASN 🟧 CAT PROGS _INIT EXIT 🟦 F6
That overlays these seven functions above the M.SAV+ ribbon to produce a useful whole.
If you are starting from a blank slate (or close enough) this is all you have to do. If you have previously been experimenting, it may be useful to know that the sequence 🟦 ASN ENTER is a prelude to clearing one of these spots by assigning the NULL function to it. To clear the entire thing including the ribbon row, say instead 🟦 KEYS RESETS MyM.R.
You can now run these programs from MyMenu by selecting them by the assigned softmenu keys. Start by running the _INIT function once, after which it does not need to be repeated. (Thus why I put it way up in the corner of MyMenu, out of the way.)
The R47’s ASN feature has broader uses, such as overriding stock menus while in USER mode, but MyMenu works regardless. If you leave space for the “ribbon” on the bottom row as in our example above, you have 12 spots to assign to functions you want available at the root of the R47’s menu system. If you are willing to override that lower row as well, you get 18 spots.
(Sorry, custom user menus cannot scroll. If you want multiple pages, you have to define another menu and call out to it, as is done in the P.FN thru P.FN3 sequence.)
Loose your creativity! 👨🎨
(You may now wish to return to my R47 article index.)
License
This work is © 2026 by Warren Young and is licensed under CC BY-NC-SA 4.0
- ^ This key has “MyM” printed above it on the simulator, but “CUST” on the R47 hardware, indicating a schism where one faction favored calling this the “custom” menu instead.
- ^
It will take no more than 8 presses, being the size limit of the menu stack. MyMenu is always at this stack’s base as long as the
MyMbflag remains set. I deliberately disabled that flag in my HP-15C emulation example, but notice that it doesn’t disable all menus, merely MyMenu. - ^ One presumes it is a reference to the UI feature that debuted in Microsoft Office 2007 wherein a strip of screen real estate that previously had a single well-defined function now changes completely, on command. That’s not a terrible analog for what this R47 feature does, though switching is more intentional on the R47 than in Office.
- ^
This is a WP43-ism. Its Ccomplex Compose function is not identical to the more simply named
COMPLEXoperation on the R47, but the essence is the same. - ^
…where we find
%andΔ%again, indicating that this menu wasn’t all that well thought-out - ^
It has two names because I want to call this subroutine from our example MyMenu as
_INITbut save the program suite from the simulator asOpAmp.p47, where the basename comes from the label you select onWRITEP. If I cater only to the second wish, the🟦F6menu item gets calledOpAmp, which doesn’t describe what it does. - ^ Slang for a component bought in bulk bags and consumed by the handful without a lot of up-front discretion over which “flavor” each one has.
- ^ That part of the equation comes from Design with Operational Amplifiers and Analog Integrated Circuits 3rd edition by Sergio Franco. It is the modified form of equation 5.11 on page 219, reworked using this program’s symbols.