The Museum of HP Calculators

HP Forum Archive 21

[ Return to Index | Top of Index ]

HP-15C Synthetics
Message #1 Posted by Mike (Stgt) on 15 May 2013, 7:01 a.m.

It is not new what I found here, it was only new for me. I tried to test it with Nonpareil (V0.77 Win32, also not new), but failed. Is there an "emulator" out there who offers this feature?

TIA.....Mike

Edited: 15 May 2013, 7:02 a.m.

      
Re: HP-15C Synthetics
Message #2 Posted by Olivier De Smet on 15 May 2013, 7:45 a.m.,
in response to message #1 by Mike (Stgt)

I dont't think any emulator will offer this feature, this is a behavior due to the CPU hardware and not due to any opcode of the CPU. It could be added, but is it useful ? ;)

            
Re: HP-15C Synthetics
Message #3 Posted by Mike (Stgt) on 15 May 2013, 8:04 a.m.,
in response to message #2 by Olivier De Smet

Is it useful?!? For what purpose do I need an "emulator"? :) Why do I collect HP's caluclators? Do I need to answer all qeustions? Did Eric Smith read my eMail? What would happen if we stop asking?

nosy.....Mike

"Never stop asking." - A. Einstein

(Is this a secret order?)

      
Re: HP-15C Synthetics
Message #4 Posted by Thomas Klemm on 15 May 2013, 10:04 a.m.,
in response to message #1 by Mike (Stgt)

Nonpareil allows to read and write its state to XML files. The written file is gnu-zipped but that's not needed to read it. Thus you can write the state to a file, gunzip it, modify it and read it back.

As a proof of concept I modified the Y-register according to the description and got the same effect as mentioned in the article:

Quote:
Since a 3 rotates to a xC the small o is the display code for xC.

For this I modified the following address in the memory section of the state-file which represents the Y-register:

<memory as="ram">
<loc addr="000" data="0000000c000000"/>

So after the transfer execute [RDN] and then [f] [PREFIX].

Sorry that I can't explore any more right now but I hope I could lead you into the right direction. Let us know your findings.

Kind regards
Thomas

Edited: 15 May 2013, 10:24 a.m.

            
Re: HP-15C Synthetics
Message #5 Posted by Mike (Stgt) on 15 May 2013, 11:37 a.m.,
in response to message #4 by Thomas Klemm

Yes, brute force, modify the state file and start the "emulator" again. That is result oriented the best way.

What I'd like is to simulate as close as possible the keyboard to get a virtual clone of the real thing. I was able to do so with Nonpareil 0.77 for the Voyagers' keys in the rightmost column + ON key to get keybord test, self test, reset, and continious self test. Alas I failed to get the ON + x^y that way.

Ciao.....Mike

                  
Re: HP-15C Synthetics
Message #6 Posted by Thomas Klemm on 15 May 2013, 12:38 p.m.,
in response to message #5 by Mike (Stgt)

Could you elaborate on how to run the tests?

Thanks
Thomas

                        
Self Tests
Message #7 Posted by Mike (Stgt) on 16 May 2013, 5:29 a.m.,
in response to message #6 by Thomas Klemm

Hello Thomas,

have a look here.

Ciao.....Mike

                              
Re: Self Tests
Message #8 Posted by Thomas Klemm on 16 May 2013, 2:25 p.m.,
in response to message #7 by Mike (Stgt)

Sorry if wasn't clear but I'm familiar with running the tests on real calculators. But I had no luck with the same procedure using an emulator. What's the exact procedure here?

Many thanks in advance
Thomas

                                    
Re: Self Tests
Message #9 Posted by Mike (Stgt) on 17 May 2013, 5:19 a.m.,
in response to message #8 by Thomas Klemm

Sorry, but that depends on the emulator you use, it must offer the possability to press at least two keys at the "same" time.

Nonpareil-Win v0.77 uses KML files to define this and that, inter alia mapping of PC keys to calculator keys. If you append

scancode 115   map 115     44 end  # s - STO
scancode 114   map 114     45 end  # r - RCL
to a Voyager KML file you may use s and r for STO and RCL. By chance I found the undocumented feature to map two calculator keys:
# experimental:
scancode 59 map 59 41 map 59 48 end  # ; - change digit sep.
scancode 33 map 33 41 map 33 40 end  # ! - ON +
scancode 34 map 34 41 map 34 30 end  # " - ON -
scancode 167 map 167 41 map 167 20 end  #  - ON *
scancode 36 map 36 41 map 36 10 end  # $ - ON /
It is ment for a german PC keybord, so ';' is the shifted comma to toggle the decimal separator, and the others are the shifted 1-2-3-4 for the self tests. Use all from deep sleep.

But this is only for the a. m. version 0.77 of Nonpareil for windows. Alas Eric Smith did un-publish it years ago.

Ciao.....Mike

                                          
Re: Self Tests
Message #10 Posted by Thomas Klemm on 17 May 2013, 10:35 a.m.,
in response to message #9 by Mike (Stgt)

Thanks for the explanation. I was assuming there must be some kind of trick to do it.

Cheers
Thomas

            
Re: HP-15C Synthetics
Message #11 Posted by Paul Dale on 15 May 2013, 6:22 p.m.,
in response to message #4 by Thomas Klemm

The state file would be a good way to investigate some of the internal behaviours on the 15C.

E.g. the matrix inversion and solutions to systems of equations use a Doolittle LR decomposition with partial pivoting. My suspicion is that the pivoting information is stored in the matrix descriptor so the conversion can be undone to restore the original matrix.

- Pauli

      
HEllo PPC
Message #12 Posted by Thomas Klemm on 15 May 2013, 11:30 a.m.,
in response to message #1 by Mike (Stgt)

Open the following XML file in Nonpareil 15C and run [GSB A].

Cheers
Thomas


<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE state SYSTEM "nonpareil.dtd">
<state version="1.00" model="15C" platform="voyager" arch="nut">
<ui/>
<chip name="Nut">
<registers>
<reg name="a" data="b1fffff1f36000"/>
<reg name="b" data="b1fffff1f36000"/>
<reg name="c" data="00000000000eae"/>
<reg name="m" data="00000000a00000"/>
<reg name="n" data="11000000000000"/>
<reg name="g" data="09"/>
<reg name="p" data="c"/>
<reg name="q" data="4"/>
<reg name="q_sel" data="0"/>
<reg name="fo" data="00"/>
<reg name="s" data="0800"/>
<reg name="pc" data="0000"/>
<reg name="stack" index="0" data="0096"/>
<reg name="stack" index="1" data="0000"/>
<reg name="stack" index="2" data="0000"/>
<reg name="stack" index="3" data="0000"/>
<reg name="decimal" data="0"/>
<reg name="carry" data="0"/>
<reg name="awake" data="0"/>
<reg name="pf_addr" data="00"/>
<reg name="ram_addr" data="007"/>
<reg name="active_bank" index="0" data="0"/>
<reg name="active_bank" index="1" data="0"/>
<reg name="active_bank" index="2" data="0"/>
<reg name="active_bank" index="3" data="0"/>
<reg name="active_bank" index="4" data="0"/>
<reg name="active_bank" index="5" data="0"/>
<reg name="active_bank" index="6" data="0"/>
<reg name="active_bank" index="7" data="0"/>
<reg name="active_bank" index="8" data="0"/>
<reg name="active_bank" index="9" data="0"/>
<reg name="active_bank" index="a" data="0"/>
<reg name="active_bank" index="b" data="0"/>
<reg name="active_bank" index="c" data="0"/>
<reg name="active_bank" index="d" data="0"/>
<reg name="active_bank" index="e" data="0"/>
<reg name="active_bank" index="f" data="0"/>
</registers>
</chip>
<chip name="Voyager LCD">
<registers>
<reg name="enable" data="1"/>
<reg name="blink" data="0"/>
</registers>
</chip>
<memory as="ram">
<loc addr="000" data="00000000000000"/>
<loc addr="001" data="00000000000000"/>
<loc addr="002" data="00000000000000"/>
<loc addr="003" data="00000000000000"/>
<loc addr="004" data="b1fffff1f36000"/>
<loc addr="005" data="00000000000008"/>
<loc addr="006" data="0000000000000c"/>
<loc addr="007" data="00000000000eae"/>
<loc addr="008" data="00000000000000"/>
<loc addr="009" data="00800000620000"/>
<loc addr="00a" data="7fa20200880000"/>
<loc addr="010" data="01000000000000"/>
<loc addr="011" data="02100000000001"/>
<loc addr="012" data="11000000000000"/>
<loc addr="013" data="00000000000000"/>
<loc addr="014" data="f0000000000439"/>
<loc addr="015" data="c0d2f6f6f6f6f6"/>
<loc addr="016" data="000000000001fa"/>
<loc addr="017" data="000000000005fb"/>
<loc addr="018" data="00000000000000"/>
<loc addr="019" data="01240000000000"/>
<loc addr="01a" data="00000000a00000"/>
<loc addr="0c0" data="00000000000000"/>
<loc addr="0c1" data="00000000000000"/>
<loc addr="0c2" data="00000000000000"/>
<loc addr="0c3" data="00000000000000"/>
<loc addr="0c4" data="00000000000000"/>
<loc addr="0c5" data="00000000000000"/>
<loc addr="0c6" data="00000000000000"/>
<loc addr="0c7" data="00000000000000"/>
<loc addr="0c8" data="00000000000000"/>
<loc addr="0c9" data="00000000000000"/>
<loc addr="0ca" data="00000000000000"/>
<loc addr="0cb" data="00000000000000"/>
<loc addr="0cc" data="00000000000000"/>
<loc addr="0cd" data="00000000000000"/>
<loc addr="0ce" data="00000000000000"/>
<loc addr="0cf" data="00000000000000"/>
<loc addr="0d0" data="00000000000000"/>
<loc addr="0d1" data="00000000000000"/>
<loc addr="0d2" data="00000000000000"/>
<loc addr="0d3" data="00000000000000"/>
<loc addr="0d4" data="00000000000000"/>
<loc addr="0d5" data="00000000000000"/>
<loc addr="0d6" data="00000000000000"/>
<loc addr="0d7" data="00000000000000"/>
<loc addr="0d8" data="00000000000000"/>
<loc addr="0d9" data="00000000000000"/>
<loc addr="0da" data="00000000000000"/>
<loc addr="0db" data="00000000000000"/>
<loc addr="0dc" data="00000000000000"/>
<loc addr="0dd" data="00000000000000"/>
<loc addr="0de" data="00000000000000"/>
<loc addr="0df" data="00000000000000"/>
<loc addr="0e0" data="00000000000000"/>
<loc addr="0e1" data="00000000000000"/>
<loc addr="0e2" data="00000000000000"/>
<loc addr="0e3" data="00000000000000"/>
<loc addr="0e4" data="00000000000000"/>
<loc addr="0e5" data="00000000000000"/>
<loc addr="0e6" data="00000000000000"/>
<loc addr="0e7" data="00000000000000"/>
<loc addr="0e8" data="00000000000000"/>
<loc addr="0e9" data="00000000000000"/>
<loc addr="0ea" data="00000000000000"/>
<loc addr="0eb" data="00000000000000"/>
<loc addr="0ec" data="00000000000000"/>
<loc addr="0ed" data="00000000000000"/>
<loc addr="0ee" data="00000000000000"/>
<loc addr="0ef" data="00000000000000"/>
<loc addr="0f0" data="00000000000000"/>
<loc addr="0f1" data="00000000000000"/>
<loc addr="0f2" data="00000000000000"/>
<loc addr="0f3" data="00000000000000"/>
<loc addr="0f4" data="00000000000000"/>
<loc addr="0f5" data="00000000000000"/>
<loc addr="0f6" data="00000000000000"/>
<loc addr="0f7" data="00000000000000"/>
<loc addr="0f8" data="00000000000000"/>
<loc addr="0f9" data="00000000000000"/>
<loc addr="0fa" data="00000000000010"/>
<loc addr="0fb" data="ff00ff965daff0"/>
<loc addr="0fc" data="f1c1f196bf5daf"/>
<loc addr="0fd" data="f940f141f0f20a"/>
<loc addr="0fe" data="2213089dde0080"/>
<loc addr="0ff" data="00d002f4f40000"/>
</memory>
</state>
            
Re: HEllo PPC
Message #13 Posted by Mike (Stgt) on 15 May 2013, 11:39 a.m.,
in response to message #12 by Thomas Klemm

Hello! That's a nice one! :) Thank you. M.

      
Re: HP-15C Synthetics
Message #14 Posted by Thomas Klemm on 15 May 2013, 5:56 p.m.,
in response to message #1 by Mike (Stgt)

After quite a bit of fiddling I found another message that could be displayed. Just use these lines in the XML file above instead:

<loc addr="0fe" data="003d0dc0000000"/>
<loc addr="0ff" data="00d08278881000"/>

This is the listing of the corresponding program lines:

001 - 42,21, 0  LBL 0             
002 -    22  0  GTO 0             
003 -    22 25  GTO I             
004 - 43,30, 8  TEST 8            
005 - 42, 5, 0  DSE 0             
006 -    42  0  x!                
007 - 42,21, 0  LBL 0             
008 - 42,21, 0  LBL 0             
009 - 42,21, 0  LBL 0             
010 - 42,21, 0  LBL 0             
011 -       48  .                 
012 - 42,21,14  LBL D             
013 -    45 14  RCL D             
014 - 42,21, 0  LBL 0             

If you're interested in the Perl script I can post it here.

Cheers
Thomas

Edited: 15 May 2013, 6:37 p.m.

            
Re: HP-15C Synthetics
Message #15 Posted by Mike (Stgt) on 16 May 2013, 4:19 a.m.,
in response to message #14 by Thomas Klemm

What I tried last nite was just to fiddling with that (ON)+(Y^X) in two "emulators". But no success. IMHO there must be some code in the ROM that shifts the X register 22 bits to the right. Alas I did not find out yet, I am stuck at the branch when the Voyager tests what key is pressed when waking up from deep sleep.

In this respect I did no tests with a real HP15C yet. But my aim is to lite nothing but the G of GRAD. On an HP41 you need MCode for that, on Voyager it should be possible with synthetic only (if register 9 and A are accessible).

Ciao.....Mike

                  
Re: HP-15C Synthetics
Message #16 Posted by Olivier De Smet on 16 May 2013, 4:57 a.m.,
in response to message #15 by Mike (Stgt)

Hi,

No there is no code in the rom to do that, it is a pure hardware behavior, so a 'simple' nut emulation can not support this synthetic.

But now go15c support it. Fell free to crash your emulation (and perhaps the app too) when trying to do nice display see :

Olivier

Edited: 16 May 2013, 5:06 a.m.

                        
Re: HP-15C Synthetics
Message #17 Posted by Mike (Stgt) on 16 May 2013, 5:25 a.m.,
in response to message #16 by Olivier De Smet

In that case I do not need to look any further, thank you. Also for the free GO12C :) Alas, no Android, no luck :(

Ciao.....Mike

                  
Re: HP-15C Synthetics
Message #18 Posted by Thomas Klemm on 16 May 2013, 3:51 p.m.,
in response to message #15 by Mike (Stgt)

Quote:
But my aim is to lite nothing but the G of GRAD.

Use the following entries in the state file:

<loc addr="0fe" data="00000000000000"/>
<loc addr="0ff" data="00000000004000"/>

Which translates to this rather boring program:

001 - 42,21, 0  LBL 0             
002 -    44  0  STO 0             
003 - 42,21, 0  LBL 0             
004 - 42,21, 0  LBL 0             
005 - 42,21, 0  LBL 0             
006 - 42,21, 0  LBL 0             
007 - 42,21, 0  LBL 0             
008 - 42,21, 0  LBL 0             
009 - 42,21, 0  LBL 0             
010 - 42,21, 0  LBL 0             
011 - 42,21, 0  LBL 0             
012 - 42,21, 0  LBL 0             
013 - 42,21, 0  LBL 0             
014 - 42,21, 0  LBL 0             

Cheers
Thomas

      
Re: HP-15C Synthetics
Message #19 Posted by Thomas Klemm on 16 May 2013, 2:38 p.m.,
in response to message #1 by Mike (Stgt)

If the DM-15CC is considered an emulator I can confirm that the "rotate" function works as described in the article. However the HEllo PPC program doesn't work: the display keeps showing me RUNNING.

Cheers
Thomas

            
Re: HP-15C Synthetics
Message #20 Posted by Mike (Stgt) on 17 May 2013, 5:24 a.m.,
in response to message #19 by Thomas Klemm

...aha... interesting! So if there is no MCode for the 'rotating' the DM-15CC does more than interpret the Voyager ROM only.

Nice.....Mike


[ Return to Index | Top of Index ]

Go back to the main exhibit hall