Jazz 50G v1.251 (build 2012.05.12)
by Mika Heiskanen, Jan Brittenson, and Han Duong
Jazz started out as a Saturn CPU compiler for the HP48 calculators, and was written by Mika Heiskanen. In addition to being able to compile assembly-language programs, Jazz is also capable of assembling System RPL programs and library objects. As development continued, Jazz eventually integrated ML Debug by Jan Brittenson and this enabled Jazz to also debug ML programs. As far as HP48 support is concerned, development halted around version 6.8, with a final version 6.8a released (as source only) to address some minor bugs.
Jazz beta for the HP49G
With the introduction of the HP49, a lot of effort was put into porting Jazz to this new calculator. Unfortunately, the documentation available at that time was insufficient, incomplete, or both. The HP49 version never made it beyond a beta release, with still many bugs in both the editor program, the System and ML debuggers, and even the compiler. Newer objects introduced with the release of the HP49 were also not available, nor could they be compiled even from the assembly level as various routines that checked the validity of an object were missing from Jazz. This version is also known as Jazz 6.8f and had been maintained by Daniel Lindstrom.
Jazz development essentially came to a halt once Hewlett Packard released the ARM-based calculators: the HP49G+ and HP50G calculators. One might argue that part of the reason was due to the availability of the MASD compiler that originated from Metakernel and eventually became part of the ROM in the HP49G, HP49G+, and HP50G calculators. There was still some interest in getting Jazz properly ported, as many programmers still preferred the HP syntax over the newer MASD syntax. However, programmers were slowly adjusting to the newer MASD syntax, and the need for a Jazz port became less essential. Moreover, programs like Emacs picked up where Jazz left off so that there was really no longer need for a port of Jazz.
Jazz for ARM-based calculators
In 2010, I purchased my first HP50G and got back into Saturn assembly programming. However, I found this newer MASD syntax to be unappealing (and I still do) and decided that the features, while interesting, did not really add much to the feature set found in the original HP syntax. It was then that I decided to work on porting the HP48 source code over to the HP50G. After almost ten years of no development on Jazz, resurrecting the porting efforts seemed likely to be met with indifference. Nevertheless, I started with the original 6.8 source code rather than working with Daniel Lindstrom's source tree. I found it too difficult to determine which line of code was working code and which line was an edit from Daniel that was used to test out differences between the HP48 and HP49 series. Having a complete disassembly of one of the ROMs for the HP48S/SX and one of the ROMs for the HP48G/GX, I was able to figure out where various unsupported entries had moved and worked on the necessary changes. Once the differences in various addresses for unsupported entries were determined, I managed to compile a partially working version of Jazz. From there, I used this partially working version of Jazz to further improve the port.
At any rate, the first release was in June of 2010 and development continues even now. The current version of Jazz not only behaves like its predecessor from the HP48 days, but also supports new objects, opcodes, and integrates features such as stack diagram support (from the SDIAG package that comes with Emacs).