HP Forums

Full Version: MLDL 2000 and HEPAX
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

I've run in to a snag trying to get HEPAX 1D working with my MLDL 2000. I've read and reread the threads from last year, especially this one, containing discussions between Meindert, Luiz and Diego regarding how to get HEPAX working. I have gotten almost all the way there, but I still get bogus HEPDIR entries, C2, C3, C4 and C5 in my handmade 16K HEPAX file system, as reported by Luiz in message #27 of the referenced thread. My configuration is as follows.

Flash Addr: Content       -  Comment
$3D000: Hepax1-1D - Checksum fails
$3E000: Hepax2-1D - good checksum
$3F000: Hepax3-1D - good checksum
$40000: Hepax4-1D - good checksum

SRAM Addr: Content
$14000: Hepax RAM page 1
$15000: Hepax RAM page 2
$16000: Hepax RAM page 3
$17000: Hepax RAM page 4


Page 7
B0: $03D = Enabled Flash page @ $3D000
B1: $03F = Enabled Flash page @ $3F000
B2: $03E = Enabled Flash page @ $3E000
B3: $040 = Enabled Flash page @ $40000
Page 8
B0: $114 = Enabled SRAM page @ $14000, write protect OFF
B1: $114 = Enabled SRAM page @ $14000, write protect OFF
B2: $114 = Enabled SRAM page @ $14000, write protect OFF
B3: $114 = Enabled SRAM page @ $14000, write protect OFF
Page 9
B0: $115 = Enabled SRAM page @ $15000, write protect OFF
B1: $115 = Enabled SRAM page @ $15000, write protect OFF
B2: $115 = Enabled SRAM page @ $15000, write protect OFF
B3: $115 = Enabled SRAM page @ $15000, write protect OFF
Page A
B0: $116 = Enabled SRAM page @ $16000, write protect OFF
B1: $116 = Enabled SRAM page @ $16000, write protect OFF
B2: $116 = Enabled SRAM page @ $16000, write protect OFF
B3: $116 = Enabled SRAM page @ $16000, write protect OFF
Page B
B0: $117 = Enabled SRAM page @ $17000, write protect OFF
B1: $117 = Enabled SRAM page @ $17000, write protect OFF
B2: $117 = Enabled SRAM page @ $17000, write protect OFF
B3: $117 = Enabled SRAM page @ $17000, write protect OFF
Page C
B0: $140 = Enabled SRAM page @ $00000, write protect ON ( CCD/OSX)
Page D
Page E
B0: $142 = Enabled SRAM page @ $02000, write protect ON (Sandbox Low)
Page F
B0: $143 = Enabled SRAM page @ $03000, write protect ON (Sandbox High)

I loaded all zeros into the RAM pages from the HEPAX ROM images found at TOS. I then manually edited the images to create the HEPAX file system chain. When the 41 (a halfnut 41CX with a 2X extended memory module) powers up, the contents of the RAM pages are fine. I can run HEXEDIT to verify this on the 41 itself. But if I execute HEPROOM or HEPDIR, the HEPAX operating system adds the bogus entries. These show up in all four pages. Page 8 differs from the other three. It has this:

$8902: 048 0B0 000 01C 000 000 000 000 047 00F

Whereas the others all have:

$X902: 04E 00F 000 000 ...

I can reset these words to zeros, but they come back on the next access to the file system by the HEPAX.

Based on the report by Luiz, I believe that I may be able to go ahead and use the HEPAX like this, ignoring the bogus entries. But I wondered if others had progressed beyond this point.


Hi, Howard;

First, I see that you exchanged HEPAX #2 with #3. About the checksum error message: does it happen when you open the file with the MLDL2K mannager? If so, I´d strongly recommend you to download another copy of this file. I do not remember having such problem with the ones I tried, and I tried (and still use) HEPAX 1D version. Let us know if you want to try another HEPAX 1D page #1.

Your configurations for pages #8 to #B seem fine to me. I just do not have the data related to the control bytes you must enter mannualy, just for checking purposes. I had to do this all again a few days ago because the HP41 batteries had a bad contact (for some days, probably) and the entire SRAM of the MLDL was erased. I had to write them back about three times, because I wrongly filled one of the addresses with the wrong data. Would you like to check them all? If so, let me (us) know. I´m not home now, but I can do that later. Maybe others post a complete RAM list of valid bytes in the meantime, though.

Surely you will succeed! 8^)

Best regards.

Luiz (Brazil)

Edited: 7 Nov 2006, 5:27 a.m.

Hi, Luiz,

I recall reading somewhere in the threads from last year of someone getting a failed checksum on the first HEPAX 1D image from TOS. If you have a version that doesn't fail the checksum test, could you please email it to me? I've checked and double checked that the version from TOS was downloaded correctly, yet it still fails the checksum test.

The mapping of the HEPAX images in the RAM banks is due to a difference in the way the HP 41 OS interprets the order and the way its done by the MLDL2000. That mapping is:

HP41     MLDL2000
1 1
2 3
3 2
4 4

I believe I have that correct in my configuration for page 7, or else the CAT 2 listing wouldn't show up.

I created the HEPAX file system from zero-filled pages, with alterations as specified by Diego Diaz in this thread. Using the HP41 page addresses for RAM situated in ports 1 and 2, therefore HP41 pages 8-B inclusive, the non-zero words are:

8000: 00B
8FE7: 000
8FE8: 009
9000: 00C
9FE7: 008
9FE8: 00A
A000: 00D
AFE7: 009
AFE8: 00B
B000: 00E
BFE7: 00A
BFE8: 000

X = 8,9,A,B

XFED: 090
XFEF: 091
XFF1: 0E5
XFF2: 00F
XFF3: 200



the mapping of the HEPAX images in the RAM banks is due to a difference in the way the HP 41 OS interprets the order and the way its done by the MLDL2000. That mapping is:

HP41     MLDL2000
1 1
2 3
3 2
4 4

This is a design error in MLDL2000. With the next firmware update it will be fixed so the order is a bit more logical, so be aware that this must be changed after a next update! I will try HEPAX out tonight to verify this all, I am still at work now :(

Also note that there is another thread as kind of followup here


Hi all,

Thanks Meindert (you've been faster than me.. :-)

I read this thread while I was at work, and remember the missing entry pointed out in the later tread you've addressed, but had no time to seek the archives in search of the thread and post an appropriate reply.

It'll be great to have an HEPAX compltible MLDL2000 code. ;-))

Regarding the "Checksum fail" issue, I still have to verify with a Service module to make sure if this is a *real* failiue or it's simply that HEPAX page #1 does not comply with HP-41's checksum algorithm.

Nice to see HP-41 "world" is alive and kicking!!



I have a beta version of a new M2kM release available on the MLDL2000 website. Wanted to do this first, unfortunately have no time to test HEPAX on the MLDL2000 anymore, will do that tomorrow.


You have "Hepax1-1D.ROM" without the error?

Thanks, Meindert!

I had seen that thread earlier in my investigations, but then lost track of it while finishing up my configuration. Adding the values that Luiz discovered, and published in that thread, allowed me to get the same result he did in response to HEPDIR: I now get H:DIR EMPTY in the display and 2,610 in the X register, which is the correct for my 16K RAM configuration.

So now I'm in business with the HEPAX and the MLDL2000. I'm looking forward to your updated firmware. Do you plan to support HEPAX's normal configuration mode? It would be nice not to use page 7, so I could have HP-IL free at the same time as this configuration.


The normal config mode of HEPAX is very difficult to support in the current architecture of MLDL2000, both the Write Protect and Page Relocate instructions. We now know that HEPAX does not try to relocate itself when it is in an odd page. There are still several combinations to be tried out, for example with HP-IL. I suspect that whenever HEPAX is in the lowest possible page (even if this is an even page) it will not relocate itself and should work. Pleas etry this out, I will also do this, and share your experiences!


Hi, Howard;

I forgot to conclude my thought: as you actually reversed the order of the HEPAX #2 and #3, then that was fine! It is actually necessary. So, I should have written:

First, I see that you exchanged HEPAX #2 with #3. That´s the first step, though.


About the image I have that is working: I'll check it and confirm if it is the same.


Luiz (Brazil)

OK, Meindert. Sounds like a lot of fun, in fact.

One thing that could be useful if we are going to remain with HEPAX not formatting its own file system would be a utility to do so, either within M2kM, or in mcode on the 41. I might look at doing the latter as a first attempt in mcode.


Hi, Luiz,

I suspect that the 1st HEPAX module fails the checksum, but works. Following your advice in the thread Meindert linked to, I now have a functional HEPAX using that image.


Hi again,

Meindert, please note, HEPAX will always try to relocate itself if it's placed into an even page.

Remember that HEPAX was conceived as a *real* module that you have to plug into a physical port thus it always "think" it's placed on an even port at power up.

Forcing it to an odd page simply fools its initialization routine and therefore he is unable to find "itself". That's why you must write the whole FILE SYSTEM data into RAM, because HEPAX doesn't initialize at all.

However, as it's really present into HP-41's memory, you can use their commands as if it has relocated itsef into any odd page.

Things are a bit easier if a CV (or C) is used instead a CX, as you can use page #5 keeping HP-IL availability.

With this scenario a couple of SR's containing both HEPAX at #5 and #7 and the corresponding RAM pages with thir initialization values pre-programmed are (to my mind) a convenient work-around.

My 2 cents :-)


Hi, Howard;

I actually found that the HEPAX 1C #1ROM is the one that has no checksum error. Indeed, I loaded the HEPAX 1D in the M2kM and it a gives a checksum error.

I'm glad your HEPAX emulation is running O.K.. Welcome to the MLDL2000 HUT (Happy User´s Team). Hope this is does not sound weird in English, though...


Luiz (Brazil)

My suggestion is that a 'virgin' HEPAX RAM image could best be loaded into MLDL2000 through USB. When I do more testing and write down the procedure I will also make available a number of these RAM images for download.

About M2K ROM: that is too much honour that you want that in your MLDL2000. It is a nice collection of mcode routines, but there are much better tools for that. I keep it available because I am used to it ....


So we have to experiment a bit more to find the best HEPAX config in a CX with IL. Any suggestions?



Well, I've checked the checksum with Service module and (as supposed) it gives me an error.

Then I modified HEPAX-1D file (Bank 1) image to match the calculated H'100 checksum. Obviously the Service ROM reported a good checksum too.

So far, if the only concern regardin HEPAX is that annoying error when uploading .ROM image into MLDL2000, I simply suggest you manually modify the H'106 in the .ROM image last word with H'100.

I've been unable to find any trouble regarding HEPAX functionality, however its functions are too many to run an exhaustive test.



These HEPAX-RAM pages can be very easily created using JFG's CLBIN41 utility from his EMU41. All you need is a text file, lets call it hepram8.lst:

8000 00B Fake XROM
8001 000 NOP
8002 000 NOP
8FE7 000 Previus Page pointer
8FE8 009 Next Page pointer
8FE9 091 EOF (?)
8FEA 000 NOP
8FEB 000 NOP
8FEC 000 NOP
8FED 090 (?)
8FEE 000 NOP
8FEF 091 (?)
8FF0 000 NOP
8FF1 0E5 (?)
8FF2 00F (?)
8FF3 200 (?)
8FF4 000 NOP
8FFF 000 NOP

Then run:

clbin41 hepram8.lst hepram8.bin
clbin /b hepram8.bin hepram8.rom

Repeat for pages 9,A,B for 16k FS and B2,C,D,E,F for 32k FS. Note that B and B2 have different pointers at FE7 and FE8 offsets. This can be put into .BAT file for simple execution. I have created all kind of HEPRAM pages for every combination I need.