Elektronika MK61/52
Version Française 
WikipédiA 
Specifications  MKCompiler  Calculators 3000  Enhanced MK52  ROM Module BRP3  Speed testings 
RPN Calculator with

Forensic On scientific functions, calculate in degrees: arcsin(arccos(arctan(tan(cos(sin(9))))))Result: 9.0881454. The exact value is 9 ! 
Hebdogiciel20 =0 =1 2 FOR 0 SQR NEXT FOR 1 X^2 NEXT STOPResult: 1.6889469 The exact value is 2 ! 
I wrote a little compiler for Windows that :
NEW : recreate a source file from a C3 program file. NEW : recreate a source file from a serie of hex codes. 
; NEWTON method for equations ; solves f(x)=0 ; function is programmed at label f(x), it receives x on the stack ; it can use the whole stack and registers 49 and bd ; set precision into register "e" (0.01 for example) ; in the X register, put a first guess of the solution and RUN. ; it returns the solution. ; you can start again with new parameters (precision or starting x) ; usage: store error in register e (example 0.01 STO e) ; go to first step ( B/0) ; key in the first x value and RUN. #c3 1 ; auto save to C3 file #reg e error #reg a x #reg 0 delta #reg 1 h #reg 2 fxh #reg 3 fx DO =x $1e4 =delta REPEAT @x @delta * IF(x=0)THEN @delta ENDIF =h ; h=0.0001x or 0.0001 if x=0 @x + GOSUB f(x) =fxh ; calculates f(x+h) @x GOSUB f(x) =fx ; calculates f(x) @h * @fx @ fxh  / ; calculates dx = hf(x)/(f(x)f(x+h)) = f(x)/f'(x) ENTER sum x ; new x = x + dx x<>y abs @error  ; abs(dx)  error UNTIL(x<0) ; stop if <0 (if abs(dx) < error) @x ; display x STOP LOOP f(x): RTN 
Step  Code  Keys  000  4A  STO a 001  01  1 002  0C  EE 003  04  4 004  0B  // 005  40  STO 0 006  6A  RCL a 007  60  RCL 0 008  12  * 009  5E  F X=0 010  12  1 2 011  60  RCL 0 012  41  STO 1 013  6A  RCL a 014  10  + 015  53  GOSUB 016  42  4 2 017  42  STO 2 018  6A  RCL a 019  53  GOSUB 020  42  4 2 021  43  STO 3 022  61  RCL 1 023  12  * 024  63  RCL 3 025  62  RCL 2 026  11   027  13  / 028  0E  ENTER 029  6A  RCL a 030  10  + 031  4A  STO a 032  14  X<>Y 033  31  K ABS 034  6E  RCL e 035  11   036  5C  F X<0 037  06  0 6 038  6A  RCL a 039  50  STOP 040  51  GOTO 041  00  0 0 042  52  RTN  Addr  Name  042  F(X)  Reg  Name  0  DELTA 1  H 2  FXH 3  FX a  X e  ERROR  
Eugene Troitskiy is the author of the great Calculators 3000.
This emulator gives you access to a large field of russian calculators (20 of them!). Among them, the MK61 and the enhanced MK52.
When compiling a program, you can use the #C3 directive to get a C3 file loadable by Calculators 3000. You just have to load it with the option "Open with current calculator". MKCompiler generates a C3 file that looks like this: group Document end MachineFileName = "MK61.cfg" group Machine group ProgramMemory Size = 105 Data = 4A010C040B406A60125E1260416A105342426A5342436112636211130E 6A104A14316E115C066A505100520000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000 end end 
It is an enhanced model, similar to the MK61, but with the following:

The factorial example:  Compiled file:  Clearing memory:  Saving:  Loading: 

#reg 0 n DO =n 1 FOR n @n * NEXT STOP LOOP 
Step  Code  Keys  000  40  STO 0 001  01  1 002  60  RCL 0 003  12  * 004  5D  F L0 005  02  0 2 006  50  STOP 007  51  GOTO 008  00  0 0  Reg  Name  0  N  
The program uses 9 steps, so you have to prepare 9 free bytes in the EEPROM, let's say from address zero. To do that,
put the switch on CLEAR.1000009 A↑ ↑↓ The address is defined this way: 1ssssbb with

Then, you key in the program! Don't do it before as the CLEAR function erases both EEPROM and RAM ! Once it is entered, to save it, put the switches on SAVE and on PROGRAM and: 1000009 A↑ ↑↓ Once again, your program has desappeared, the SAVE function clears the RAM... 
To get your program back into RAM, even after a power off, put the switch on LOAD(*),
the other being on PROGRAM, and:
1000009 A↑ ↑↓ This time, it came back to RAM ! 
1001820 A↑ ↑↓Explanations: 9 bytes occupied are 18 nibbles (halfbytes!), and then, from that 18th nibble, you want to use 20 bytes.
This is a module containing 60 maths programs that you plug into the MK52. Among them, you'll find:

Simultaneous equations  Entering data  Results 

The program 5 of bank 1 solves this system:
a.x + b.y = c a'.x + b'.y = c'Switch the module ON, set bank to 1, switches in position LOAD and PROGRAM, then type: 1047635 A↑ ↑↓This address comes from the user's manual, the program is now ready in RAM. 
Enter the data into the registers:

Put the program pointer to zero with в/О and run it with
С/П. Upon return, the display gives you the y value, with ↔ you get the x value (also in registers 1 and 2), the determinant is in register 3. If the display tells you ЕГГОГ, then the determinant is nul and no unique solution can be found. 
The program  Results  Conclusion 

STEP KEY n + n+1 GOTO n+2 nThe stack contains 1110, so the program counts one by one starting from zero. The program is run during 60 seconds, then stopped and I just have to read the current counter value. The test has been performed at steps 0, 8, 16 etc... 
The MK61 is 15% faster than the MK52. The step number has a significant influence on the excution speed. When at step 100, the speed is only 73% compared to the one at step zero. Step from 0 to 31 give the maximal speed. 
The program  Results  Conclusion 

Prog i Prog reference STEP KEY STEP KEY 00 RCL i 00 NOP 01 STO i 01 NOP 02 L3 02 L3 03 00 03 00 04 STOP 04 STOPRegister i contains PI, register 3 contains 50 for a loop 150. I wrote a reference program replacing RCL/STO with two NOP (nooperation). The execution times are the differences between the two versions. The test has been performed using registers i=0, 4, 8, 12. 
Even if differences are not spectacular, the lower, the faster! 