After a lot of work, I am very proud to announce the availability of updated versions of my emulators for the new HP-49G+/50G calculators. At first, I thought it would be impossible to modify them to work with HP-49G+/50G, based on the fact that many things have been changed in the hardware and software of the new calculator, but I managed to solve many incompatibilities which prevents them from working.

*********************************************************************************

Among the other HP-49G+/50G quirks, these are the most annoying ones (I will refer the true Saturn CPU as “Saturn” and the emulated Saturn as “Saturn/ARM”):

(1) Saturn instructions CONFIG & UNCNFG have been changed in Saturn/ARM and are working in a different way so I had to change all memory configuration code in all emulators.

(2) Port1 has been cut down to only 128K on HP-49G+/50G (very, very bad Kinpo/HP decision) so memory configuration code has to be changed some more. The 128K size of Port1 also prevents HP-42X EXTENDED version from running on HP-49G+/50G and decrease the maximum amounts of possible emulated memory in HP-71X emulator by 128K.

(3) Very often, HP-49G+ is experiencing missed keys problem in all emulators as well as outside them. This never happened on HP-48GX (and I must admit that I never experienced missed keys on HP-49G, too) no matter how fast I type. Perhaps this is because my unit is the old one, I don’t know, but the keyboard is a real disaster. Some users reported that keyboards on newer units are much better. Beside this, the keyboard is very noisy and keys are very hard to press. After coming from HP-49G (not to speak about HP-48GX) and working with HP-49G+ for a hour or so, my fingers got very tired.

Note: Lately I managed to reduce missed keys problem in my emulators by emulating SHUTDN instruction with a loop for keyboard scanning. Battery drain is bigger, of course, but missed keys are greatly reduced.

(4) Interrupt handling is functioning in a different way on HP-49G+/50G so keyboard routines have to be modified. This is especially noticeable with the new ROM 2.00 because Kinpo/HP programmers screwed keyboard interrupts much more (compared to the ROM revision 1.23) in order to reduce missed keys (with doubtful success, of course, as everything else on HP-49G+/50G). From my experience, it seems that only ON, LeftShift, RightShift and Alpha keys are generating interrupts with ROM 2.00, all other keys don't !!! I had a lot of problems trying to make HP-42X work with ROM 2.00 and I finally succeed - mainly, because individual self tests and memory scanner cannot be activated, R/S doesn't stop the program (ON key do, fortunatelly) and there are more missed keys compared to the ROM 1.23 but I really don't want to bother with all this anymore. Other emulators (HP-41X, HP-71X and HP-1XE) are, more or less, working OK with the new ROM (perhaps there are some things which don't work but, as I already said, I don't want to bother). My advice is: if you really must run my emulators on HP-49G+/50G then, please, use ROM 1.23 ...

(5) Handling hexadecimal values in decimal mode of the CPU (after SETDEC) has been totally screwed up on Saturn/ARM causing some parts of the HP-71B ROM code to malfunction. Here are two examples:

(Example 5.1)

LC(3) #0D0
SETDEC
C=C-1 B

On the real Saturn it gives #0C9 in C(X) but on the Saturn/ARM it gives #169 in C(X). Not only the result has been different but also the XS field of the C register has been modified even if C=C-1 B instruction should only deal with B field !!! This is a very disasterous behavior of the Saturn/ARM.

(Example 5.2)

P= #D
C=P 15
P= 0
SETDEC
C=C-1 S

On the real Saturn it gives #C in C(S) while on the Saturn/ARM it gives #6 in C(S). Not correct, again. Unfortunatelly, all arithmetical instructions aren’t working properly with hexadecimal numbers in decimal mode. This is hidden feature of the Saturn CPU and Kinpo/HP programmers obviously don’t know nothing about it.

Many thanks to Jean-Francois Garnier for pointing me in the right direction while I was investigating these hex/dec bugs. Based on these observations, I was able to “fix” the HP-71X emulator. I say “fix” because HP-71X doesn’t have to be fixed - HP-49G+/50G and Saturn/ARM should.

(6) OUT=C instruction don’t work the same as on HP-48GX/49G because bit 11 doesn’t control the beeper anymore, preventing my emulators from producing any sound. But, thanks to Mario Lohajner a.k.a. "manjo" who provided the ARM code for controlling the beeper, I was able to incorporate the sound into HP-41X, HP-42X and HP-71X. Sound quality is not as good as on HP-48GX/49G but, at least, these emulators are not mute anymore.

*********************************************************************************

Beside the above general problems, which either prevents my emulators from running or are causing all sorts of troubles, there are also a few things missing due to the different hardware and software on HP-49G+/50G:

(*) RS-232 and IR registers don’t work anymore, preventing my emulators from comunicating with the printer or computer via serial/infrared port and also made HP-IL emulation for HP-41X and HP-71X impossible on HP-49G+. Perhaps this has changed with HP-50G because it has RS-232 interface but I don't have time to investigate this at the moment.

(*) Hibernation mode doesn't work.

*********************************************************************************

Regarding the speed ...

I have executed all Turtle/Hare benchmarks (published by Valentin Albillo on MoHPC forum) on HP-71X and here are the results:

(Test 1) Matrix operations:

  -------------------------------------------------------------------
  Dimensions   MAT A=INV(A)        MAT A=A*A       MAT A=A+A
  -------------------------------------------------------------------
    10x10              1.46 (2.48)      1.26 (2.37)     0.07 (0.15)
    20x20             10.34 (18.02)     9.61 (18.38)    0.25 (0.58)
    30x30             33.16 (58.93)    31.98 (61.69)    0.55 (1.27)
    40x40             76.68 (136.81)   74.93 (145.53)   0.98 (2.25)

(Test 2) Polynomial solver:

  334.47 (597.76) seconds

(Test 3) Integrate & solve combined:

  7.4 (12.81) seconds (with precision 1E-5)

(Test 4) Double integrals:

  (I1) 2.68 (5.37) seconds (with precision 1E-3)
  (I2) 5.51 (10.59) seconds (with precision 1E-3)

(Test 5) Triple integral:

  193.75 (382.11) seconds (with precision 1E-3)

(Test 6) Complex-valued matrix operations:

  MAT W = INV(Z) 33.25 (58.85) seconds
  MAT W = Z*Z    18.36 (34.60) seconds
  MAT W = Z+Z     0.26 (0.60) seconds

(Test 7) Solving a definite integral of an implicit function:

  71.44 (128.05) seconds (precision 1E-3)
  127.19 (228.18) seconds (precision 1E-6)

(Test 8) Integrating a recursively defined function:

  15.66 (28.55) seconds (precision 1E-3)
  31.62 (57.67) seconds (precision 1E-6)

(Test 9) Polynomial solver for roots of high multiplicity:

  4.33 (7.98) seconds

(Test 10) A probabilistic theoretical application:

  3434.05 seconds / 57 min 14.05 s (6590.23 seconds / 1 h 49 min 50.23 s)

The numbers in parenthesis are times for HP-71X running on HP-48GX/49G. The numerical results of all calculations are the same as on the real HP-71B and HP-71X running on 48/49. This was a good test of Saturn/ARM emulation and a good way to prove that arithmetical instructions with decimal numbers in decimal mode are correctly emulated.

I expected a more linear increase in speed over HP-48GX/49G but, obviously, some Saturn instructions have been more efficiently emulated on Saturn/ARM than the others because the HP-49G+/50G speed increase over HP-48GX/49G goes from about 1.8x to 2.2x with an average of 2x so the emulated Saturn/ARM is approx. twice as fast compared to the real Saturn. I am talking about pure Saturn emulation, not about RPL/SysRPL execution where many Saturn code have been patched and rewritten in pure ARM machine language. I haven’t yet made any extensive benchmarking of HP-41X and HP-42X but I suspect the results would be very close to the HP-71X.

*********************************************************************************

So, what versions are available for running on the HP-49G+/50G?

HP-41X: FULL version with HP41Z library and all external modules.

HP-42X: EASY and LITE versions. EXTENDED version is not possible.

HP-71X: FULL version with 33.5K RAM and Forth/41 modules support. Additional 128K RAM support for up to 161.5K of RAM is not possible.

All above emulators use LCD header (top 16 pixel rows) on HP-49G+/50G as additional two virtual printer lines.

HP-1XE: All four emulators (HP-11E, HP-12E, HP-15E/X and HP-16E).

HP-41E and TI-57E: HP-49G+/50G versions of these emulators exist, too.

*********************************************************************************

The conditions of use are the same as for HP-48GX and HP-49G with few additional items:

(*) Due to the lack of information and unknown Hewlett-Packard policy of providing information about HP-49G+/50G, I really cannot make myself liable to add missing features like serial communication to my emulators. You can only buy the emulators as they are now and you cannot ask me to implement anything more. I will decide what to implement and what not to implement. When (if ever) more information would be available, I will do my best at providing an upgrade containing the implementation of missing features but I cannot and don’t want to guarantee anything. Please, ask for a demo to see if you are satisfied with the current state of the emulator prior to the order.

(*) Don’t ask me to slow down some functions or to modify time loops constants in any of the emulators running on HP-49G+/50G because my intention is for them to behave and work as if they were installed on a calculator containing a speed-up module.

(*) I cannot do anything to improve keyboard behavior and handling (either on the old or new HP-49G+/50G) and to reduce “missed keys” problem because this is obviously a hardware or Saturn emulation problem and cannot be fixed in the code of any of my emulators.

(*) Don’t ask me to rewrite (parts of) the emulator code in ARM machine language because I am only interested in 100% Saturn machine code.

*********************************************************************************

Personally, I don’t like HP-49G+/50G at all. Bad keyboard, Port1 with only 128K, fast battery drain, lack of true IR and RS-232 transfer (causing some features like IR and serial communication with printer and HP-IL emulation on HP-41X and HP-71X to be missed), low build quality and a lot of other problems and quirks make it a very unsuitable platform for my emulators. And the speed increase isn’t that significant when working with application written completly in machine language (like are all those emulators). I still prefer HP-48GX with RAM cards as the best platform (for my emulators and for everything) followed by the HP-49G. The more I use HP-49G+/50G, the more I like HP-48GX and even HP-49G. But, there were big demands for my emulators to be ported on HP-49G+/50G during last few months so I decided to work on the upgrade. Otherwise, I would probably never port them because I couldn’t find a reason to do so.

*********************************************************************************