New version of MLDL2000 Software posted


Hello all,

I have been working on the M2kM software this weekend, and released a new version. This can be downloaded from Apart from fixing one or two minor issues, the big changes are:

- The HP41 Disassembler is now integrated in M2kM ROM/SR Handler. Note that this only works with a ROM loaded in the ROM tab. The disassembler will work on complete ROMs with a FAT, and will also decode User Code. It is not complete yet, but will work most of the time. The listing is shown in a seperate window, where code can be copied form and pasted in a text editor for saving.

- The contents listing of the MLDL2000 can be downloaded in the Settings Register tab of the ROM/SR Handler by using the "List MLDL" button. In combination with the view of the HP41 Pages, it is now much easier to manage the Settings Registers. Double clicking a ROM will now automatically add it to the selected Page/Bank, and when downloding a set of SR's from the MLDL2000, the ROM names are now automatically shown.

The disassembler can also be used without having an MLDL2000, but make certain that none of the functions are used that communicate with the unit. In the next version I will improve the error handling for this.

Have fun!



Hi Meindert, all;

I tried (for good!) the new MLDL2K.EXE and found it amazing! The previous 1.01 beta version was actually a necessary improvement, because it allowed FLAHS SR contents to be updated without disturbing all FLASH memory contents in the botton-boot type memory. Now, with the new version, I can see where are the ROM images I stored in the MLDL2000 memory prior to set the SR contents. And while I´m setting the SR, I can see each ROM header... Wow! That´s GOOOD! I had to keep a record of all ROM images prior to handle them. Now I can do this on line!

And it has a disassembler... <8^))))

Three things I noticed:

1 - I tried to run the two new versions in a computer wihtout the borlndmm.dll file and in both versions it was required; they both ran OK after copying borlndmm.dll in the windows/system directory. Both versions ran OK in the computer I had the original MLDL2K.EXE version 1.00, and in this case, borlndmm.dll was already installed.

2 - I missed the ROM/SR handler window size control in the new 1.10 version; it only accepts either regular (default), minimized or full-screen options. I could not stretch it vertically as I used to do in order to see previous windows. Not a problem, though, just a comment.

3 - While reading MLDL2000 contents, an 'integer error' is generated, but the memory seems to be read O.K.

Meindert, thanks again. The new version is a 'must have', nothing else to add.

Best regards.

Luiz (Brazil)

Edited: 16 Apr 2007, 4:32 p.m.


Luiz, all,

Thanks for your feedback. I already have a long list of improvements for the disassembler and will work on that when I have MLDL2000V2 finished. The disassembler is something that I have created many years ago and I thought it would be useful. I have already prepared it to be a multi-pass disassembler, so it would show local labels. Of course there should be labels for the system calls.

1 - M2kM should run without the borlndmm.dll file, but maybe I did leave some reference in it. This DLL was required when calling external DLL's (in this case the DLL for the USB interface), but with the new Turbo Delphi I though it was not needed anymore. I will check this again.

2 - I deliberately removed the size control. With two list-views in the SR tab, resizing is really weird, unless I add an extra panel and a divider. I am not a GUI specialist, and this stuff is really complicated for me, but I will look into this.

3 - I have not seen the 'integer error'. Can you give me some more information about this?

I have also seen that when loading the SR's from a file the TreeView looks a bit strange, this is a seperate piece of code that I have not changed yet ...

Please let me know if there are any other issues that you want to improve,



The disassembler in Nonpareil, udis, is also a two-pass disassembler, but it only disassembles microcode (for Classic, Woodstock, and Nut architectures), and doesn't handle 41C module FATs. The version in the "current" (now very old) release of Nonpareil isn't very good; the one in the Subversion repository is much better. I'm still struggling to finish some big changes so I can release a new version.

udis generates labels based on the address and whether the address is ever called as a subroutine (prefix "S"), or only by jumps (prefix "L"). I've considered adding an additional class of local labels for addresses that are only the target of a small number of nearby branches.

I've found this to be very useful it tracing the evolution of the math routines in the various series and models. For instance, the 19C, 27, 29C, 67, and 97 all use basically the same math routines, which are different than those of the earlier Woodstock models (21/22/25). These are the changes described in the HP Journal sidebar "The New Accuracy". I expect that the same routines are used in the 91, 92, and 95C, but have not yet got ROM dumps of those models.

There were a few more changes made in the Spice series, but the math routines then remained almost unchanged through the 41C and Voyager series. In the 41C VASM listings, there are a few comments where peephole optimizations could be made to use new instructions of the Nut CPU; those changes were actually made in the Voyager series.



Some good ideas that I will use, especially the prefixes for Local labels and Subroutines.

The most difficult thing is to handle code that is actually data. Do you actually analyze code to check if it is ever called at all?
The HP41 FAT structure makes disassembly a bit easier. My current disassembler already does a first (half) pass to identify FAT elements, function names and user code, so this does not get disassembled by accident.

Let me know if you want to have a look at my code so you could use portions. It will work with HP41 User code, this might be useful for you. My code is written in Delphi and limited in such a way that it really only works with HP41 ROMs with a FAT structure. And of course there is a lot of room for further improvements and bug fixing ....



Most disassemblers I have written maintain a "trace queue" for static analysis of code flow, and treat any locations that can't be reached by the static analysis as data. This won't find code that is only reached by computed or indirect branches (e.g., table lookup).

The HP Classic and Woodstock architectures did not have any way to access instruction memory as data (no CXISA instruction), so udis does not bother with code flow analysis. For the Voyager ROMs, there are relatively few data areas which are small, but there is a lot of code that is only reached by indirect jumps, so it still treats everything as code.

I've considered adding a feature to use a user-supplied input file to specify entry points, data areas, and labels.

Thanks for the offer to use your disassembler code. At the moment I don't have time, but I may want to look into that later. If it's of any use to you, you're welcome to use the udis code from Nonpareil (or any of the Nonpareil code) under the terms of the GPL. If you need it for non-GPL use, let me know.


Hi, Meindert;

The correct message is 'Integer Overflow', and it appears everytime I download the MLDL contents. I captured the image with the message, and I'll post it later, O.K.? Anyway, I think that the download procedure resumed fine, I can see all ROM headers in the ROM/SR window.

More later...

Luiz (Brazil)

Edited: 17 Apr 2007, 8:50 p.m.



Can you also send me the list of ROM images you have? I cannot imagine that just reading the MLDL contents gives this error, however the contents themselves are also used (to read the ROM name), and if there is an address pointing the wrong direction an error could occur.

Also a check is done if there is something resembling a ROM image, but especially in SRAM this could possibly go wrong when the contents are random and there is not too much error checking in the routines. If the download stops on a certain ROM, let me know, I would like to have the ROM contents to ry it out myself.

It may be better to send this by email instead of posting it here ...


Possibly Related Threads...
Thread Author Replies Views Last Post
  Hook-µP software by Rush Systems Lute Kamstra 5 1,058 11-29-2013, 01:30 AM
Last Post: Lute Kamstra
  Prime: Pedagoguery Software pop up banner Matt Kernal 1 627 10-20-2013, 01:54 AM
Last Post: Mic
  latest prime software release? Geoff Quickfall 3 808 10-12-2013, 03:53 PM
Last Post: Tim Wessman
  Does the HP Prime software only work with Win 7/ 8 ? Michael de Estrada 3 874 10-12-2013, 02:52 PM
Last Post: John Ioannidis
  Prime Software Buttons kris223 2 627 09-21-2013, 08:19 PM
Last Post: Jonathan Cameron
  Latest HP Prime "emulator" software available :) Adrien Bertrand 46 4,764 08-21-2013, 10:48 PM
Last Post: Joe Horn
  New website address for Meindert Kuipers' MLDL2000? Garth Wilson 2 605 08-11-2013, 01:43 PM
Last Post: Meindert Kuipers
  New HP 35S Programs posted on my blog Eddie W. Shore 2 701 06-08-2013, 03:47 PM
Last Post: Glenn Shields
  hp 35s programs in software library Andrew Nikitin 7 1,172 05-30-2013, 11:55 AM
Last Post: Dave Hicks
  HP prime: fractal software Cristian Arezzini 5 902 05-29-2013, 07:43 AM
Last Post: Reth

Forum Jump: