Make your own free website on
An explanation of how the key presses of MK's are written on this site
Of course, all the writings on keys of MK's are in Russian ; and some of them aren't even letters. To properly refer to them, I had to think up some system of "translation". Here it is. I tried to use HP labels whenever I could.
   A general function key that works only with other buttons. It's simply F-something (F sin, for example)

    By itself - goes to the next step of the program (STEP-RIGHT). With F - a programming instruction that causes calculator to go to the adress given after the command if, and only if the value in RPN register X is less than zero (F x<0). With K - causes calculator to go to the adress given in a specified register in the same case as in F x<0 (K x<0 a). If this register is 0, 1, 2 or 3, then the information in it is dectemented 1.

   The same as previous. STEP-LEFT or F x=0 or K x=0 a

   By itself : in "calculation" mode sets the current address to 00, inside a program returns from a subroutine or goes to address 00 (if subroutine stack is empty) - I translated that as RET/0. With F or K works like the previous two buttons (F x>=0 or K x>=0 a)

   By itself : in "calculation" mode tells calculator to run a program from the current address, while running a program - stops the execution without modifying anything on the stack (almost any key can stop a program, but only this one doesn't change anything), if written inside a program it makes the calculator stop. I call this function STOP/RUN (it is often used after the previous button - you usually want to run a program from start, not from where it stopped the last time). With F or K it becomes another of those comparison commands that checks if RPN register X is NOT 0 (F x!=0 or K x!=0 a)

   Another prefix key, K

    By itself, recalls the data from specified register into RPN register X. The rest of the stack moves up, value in T disappears, and the previous value from X is also copied into X1 (previous-result register): "RCL a". With F, this command is used in a program : if the value in register 0 (r0) is greater or equal to 2, it is dectemented and a program jumps to a given address; if not, then the execution continues normally. It's strange that unlike similar commands in computer languages, value in r0 is not decremented if the check fails. Basically, F L0 implements a loop that is executed as much times as the number in r0. With K, this key calls up the value of a register with a number that is given in a specified register. As with all K- indirect commands, values in r0, r1, r2 and r3 are automatically decremented after such a command (K RCL 0); values in other registers (K RCL a) are unchanged.

   By itself, stores the data from RPN register X into a data register : "STO a". With F or K, it basically does the same as the previous key : F L1 or K STO a.

   By itself, it is used both in a program or in "calculation" mode to jump to a given address (JMP). With F, it performs the same old loop, but with r2 (F L2). With K, it jumps to an address from a register with a given number (K JMP a). The usual comment about K- commands applies here, too.

   By itself, it is used in a program to call a subroutine at a given address (SUB). A subroutine runs until a "return from a subroutine" (RET/0) command is encountered. In a "calculation" mode, it performs one program step (useful for tracing and debugging). With F, it performs a loop with r3 (F L3), and with K, it calls a subroutine from a register with a given number. If used in a "calculation" mode, K SUB command can lead to a variety of unexplored situations :)
   By itself, it is a good old digit 7. With F, it computes a sinus of register X (F sin). With K, it leaves only an "integer part" of rX (it is not a mathematical function [x] : [-2.5]=-3, and 2 . 5 /-/ K[x] will give you -3. K[x] is supported only on MK-61 and 52; on MK-54 it behaves like K -.

   Apart from being a 8, this key can calculate cosinus (F cos) or "fractal part" of rX (F cos or K {x}). K{x} is supported only on MK-61 and 52; on MK-54 it behaves like K -.

   9, tangent (F tg) or a (binary) operation, calculating a maximum of rX and rY (K max). The realisation of max is buggy : if one of the operands is 0, the result is always 0. K max is supported only on MK-61 and 52; on MK-54 it behaves like K -.

   By itself, it's a minus (that is, binary operation that pops rY and rX from the stack and pushes rY-rX). With F, it calculates a square root of rX (F sqrt), and if used with K, it thinks for a couple of seconds and then tells you that you've made an "ErrOr" (K -). This error is one of the less useful ones; it can be used though if you want to have something unprintable in rX. The command "K -"can be entered as a part of program, it's code is "27"

   Both function are obvious : division (/) or function 1/rX (F 1/x). K / behaves like K -.

   4, arcsinus (F arcsin) or (on MK-61/52) module (sqrt(x*x) - K|x|)

   5, arccosinus (F arccos) or (on MK-61/52) sign of rX (0 if 0, -1 if <0, 1 if >0 - K sign)

   6, arctangent (F arctg) or (on MK-61/52) translation of angular values ("hours"-"hours and minutes") (K HtoHM)

   Binary +, invocation of "pi" (3.1415926) into rX (F pi) or (on MK-61/52) translation of angular values ("hours and minutes" - "hours") (K HMtoH)

   Multiplication (*) or the calculation of a square of rX (rX=rX*rX) - F x2. K * behaves like K -.

   1 or exponent of rX (F e^x). K 1 behaves like K -.

   2 or a lg of rX (ln rX/ln 10) (F lg). K 2 behaves like K -.

   3 or ln of rX (F ln). K 3 on MK-61/52 translates angular values ("hours" - "hours, minutes and seconds") (K HtoHMS)
   Exchange of values in RPN registers rX and rY (EXCH), calculation of rX^rY (F x^y) or (on MK-61/52) conversion of angular values ("hours, minutes and seconds" - "hours) (K HMStoH).

   The button itself pushes the RPN stack upward (rZ into rT, rY into rZ, rX into rY) - ENTER. With F, it recalls the value of rX before the last operation (F Bx). With K on MK-61/52, it generates a (quite un-)random valuefrom 0 to 1 - K RND. On MK-61/52, this button is also used to specify register E (there's a story about its use on MK-54/B3-34).

   0, digital exponent - F 10^x, or a "do-nothing-operation" (K NOP). K NOP is used in programming (code 54), and sometimes it can be handy in hacking.

   digital point (.) (EXP . is a very useful hacking combination - you never can tell what it will do in various situations!). With F, it performs a round-about circulation of RPN stack (rX into rY into rZ into rT), and with K on MK-61/52, it's a binary AND operation (K AND). This button is also used to specify register A.

   a command to change a sign of a number in rX (in a normal mode) or of it's exponential part (if you are entering it) : /-/. With F, it commands the calculator to go into a "calculation" mode (F AUTO). With K on MK-61/52, it's a binary "OR" operation (K OR).  This button is also used to specify register B.

   a command to start entering the exponential part of a number (EXP). Very useful in hacking. With F, it command calculator to go into a "programming" mode (F PROG). With K on MK-61/52, it's a binary XOR operation (K XOR). This button is also used to specify register C.

   a command to write 0 into rX (Cx). With F, this key is supposed to simply provide a way to "forget" that F was ever pressed (F Cf), and with K on MK-61/52, it calculates a binary negation of the number in rX. This button is also used to specify register D.
A note about binary calculation : the first digit of those binary numbers is always ignored (the "good style" is to always put 8 and a decimal point there : 8,567 is a binary 0101 0110 0111). The result of K OR, K AND, K XOR and K INV always has such a form.

A note about keys : in my "articles", the bold and monospaced text means the calculator output ("1     -12" would mean 1/(10^12)), and bold, monospaced and underlined text means the keys you are supposed to (or not supposed to, depending on what I say nearby) to press ( 1 EXP 70 F x2 F x2 F x2 - don't do this!). When I write program codes, I write the step number and operation code around each command : so, 05. K RCL b (AB) means that you're supposed to enter "K RCL B" on program location 05, and those keys will generate a code AB.

A note about hexadecimal codes : A is displayed as "-", B is "L", C is "C", D is "r", E is "E" and F is an empty space.

The pictures of the keys were stolen from a big MK-61 picture taken from Andrew Davie's site. So I'm too lazy to scan my own MK-61.