HP Forums

Full Version: ACT available
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
(04-07-2015 06:32 AM)Oulan Wrote: [ -> ]Just for curiosity did you plan to read the HP19C rom ?
(I just put some woodstock emulators on google play)

P.S. on go32c emulator I use the ENTER key as 0x73 keycode (in hexa)

I got a HP-19C in very bad condition, corrosion all inside, like rescued from a sunken sailing boat. I didn't want to buy an expensive one just for doing experiments. Im not sure whether any of the ROM chips will be readable. I will try it when I find the time.

Congratulations for your woodstock emulators! If you developed the go29, I want to ask whether you tried to run programs? The published nonpareil 0.79 version does not work correctly if running HP-29C programs with labels.

Bernhard
(04-07-2015 01:35 PM)PANAMATIK Wrote: [ -> ]
(04-07-2015 06:32 AM)Oulan Wrote: [ -> ]Just for curiosity did you plan to read the HP19C rom ?
(I just put some woodstock emulators on google play)

P.S. on go32c emulator I use the ENTER key as 0x73 keycode (in hexa)

I got a HP-19C in very bad condition, corrosion all inside, like rescued from a sunken sailing boat. I didn't want to buy an expensive one just for doing experiments. Im not sure whether any of the ROM chip will be readable. I will try it when I find the time.

Congratulations for your woodstock emulators! If you developed the go29, I want to ask whether you tried to run programs? The published nonpareil 0.79 version does not work correctly if running HP-29C programs with labels.

Bernhard

Bernhard, it is interesting to hear of the label search problem with the HP-29C emulator. I also ran into the same problem with an emulator for the HP-34C, that I understand is based on the code from nonpareil. If I ran a program with only two labels, it would work OK, but if more than 2 labels, I'd get an error. That particular emulator is no longer available. It was offered for only a year about 3 years ago.

Regards,
Bob
(04-07-2015 09:34 PM)bshoring Wrote: [ -> ]Bernhard, it is interesting to hear of the label search problem with the HP-29C emulator. I also ran into the same problem with an emulator for the HP-34C, that I understand is based on the code from nonpareil. If I ran a program with only two labels, it would work OK, but if more than 2 labels, I'd get an error. That particular emulator is no longer available. It was offered for only a year about 3 years ago.

Regards,
Bob

The new ACT for HP-29C has no label search problem, because I modified the emulator. I found that it had nothing to do with one or two labels, it failed if the labels were more than 7 program steps apart. I just wanted to know whether you could solve the problem also in your Go29.

Bernhard
I want to say "thank you" for the HP-29CE I got in the meanwhile. I still have to find some time for investigating it in depth.

d:-)
(04-08-2015 07:00 AM)walter b Wrote: [ -> ]I want to say "thank you" for the HP-29CE I got in the meanwhile. I still have to find some time for investigating it in depth.

d:-)

At the moment you are the first and only HP-29CE owner. I will appreciate to get some feedback when you have found some time. Unfortunately I share your situation having to find some time. So don't get into a hurry Smile

Bernhard
My woodstock cpu emulation does not have this bug ...
Perhaps as i started it with an HP67/97 emulation, it is more robust and without this bug Wink

Other woodstock use a smaller subset of full woodstock opcodes.

P.S. when I say 'portions from non-pareil' it means that I only look at non-pareil code for some atc-display led behavior a long long long time ago as the cpu behavior is well explained in the various patents.

Olivier

(04-07-2015 09:34 PM)bshoring Wrote: [ -> ]
(04-07-2015 01:35 PM)PANAMATIK Wrote: [ -> ]I got a HP-19C in very bad condition, corrosion all inside, like rescued from a sunken sailing boat. I didn't want to buy an expensive one just for doing experiments. Im not sure whether any of the ROM chip will be readable. I will try it when I find the time.

Congratulations for your woodstock emulators! If you developed the go29, I want to ask whether you tried to run programs? The published nonpareil 0.79 version does not work correctly if running HP-29C programs with labels.

Bernhard

Bernhard, it is interesting to hear of the label search problem with the HP-29C emulator. I also ran into the same problem with an emulator for the HP-34C, that I understand is based on the code from nonpareil. If I ran a program with only two labels, it would work OK, but if more than 2 labels, I'd get an error. That particular emulator is no longer available. It was offered for only a year about 3 years ago.

Regards,
Bob
(04-08-2015 10:53 AM)Oulan Wrote: [ -> ]My woodstock cpu emulation does not have this bug ...
Perhaps as i started it with an HP67/97 emulation, it is more robust and without this bug Wink

Olivier

I didn't know, that you wrote your own woodstock ACT emulator independently from Eric Smith's pioneer work "nonpareil". AFAIK the available patents do not reveal all secrets of the ACT instruction set and some research has to be done to get any firmware emulated without errors. I share my fully respect to anybody who has achieved that.

Bernhard
(04-08-2015 11:51 AM)PANAMATIK Wrote: [ -> ]
(04-08-2015 10:53 AM)Oulan Wrote: [ -> ]My woodstock cpu emulation does not have this bug ...
Perhaps as i started it with an HP67/97 emulation, it is more robust and without this bug Wink

Olivier

I didn't know, that you wrote your own woodstock ACT emulator independently from Eric Smith's pioneer work "nonpareil". AFAIK the available patents do not reveal all secrets of the ACT instruction set and some research has to be done to get any firmware emulated without errors. I share my fully respect to anybody who has achieved that.

Bernhard

I have no idea whether Olivier developed it independently. All of the Woodstock microinstruction-level simulators I've actually disassembled (as well as some Classic- and Nut-series simulators) showed obvious signs of having been derived from Nonpareil, or from Jacques Laporte's code (which itself was partially derived from Nonpariel), but I haven't disassembled any code by Olivier.

In general I am dismayed at the number of people that have used Nonpareil-derived code commercially or otherwise in closed-source programs, without either honoring the GPL license terms, or contacting me. On the other hand, there have been several that were done with my permission.

The issue with label search on the 19C/29C/67/97 is caused by an obscure corner case of ACT behavior, regarding testing the P register for zero or non-zero immediately after an increment or decrement that wraps. I found it the hard way, and only years later saw an internal HP specification that basically said that the behavior in that situation was undefined. Obviously some very clever programmer at HP (possibly William Egbert) figured out that they could take advantage of the actual behavior of the chip, which was undocumented even within HP. Presumably after they had code that depended on it, they would have revised the specification, because they would have had to ensure that future versions of the ACT chip preserve the same behavior.

That someone might reverse-engineer the ACT instruction set and simulate it, and have the 67/97 simulation work correctly without having run into this problem and analyzing it to determine how to fix it to make the label search work correctly, seems *extremely* implausible, because the "obvious" behavior of that instruction in all other instances is contrary to what is needed for label search.

IIRC, HP did publish some tiny snippets of Woodstock microcode in a journal article, but not enough to actually determine a non-trivial portion of the instruction set, though enough to tell that the instruction encodings weren't the same as the Classic instruction set. There was an article in PPC Journal that included an analysis of what some HP-67 (or was it -97?) microinstructions did, but there were inaccuracies in the descriptions, and the author had only reverse-engineered it enough to identify specific microinstruction addresses useful for building an interface to an external device, actually in a manner similar to how the output capabilities of the HP-97S work.

Aside from the label search problem, the trickiest reverse-engineering I did on the Woodstock family was determining how the PIK (printer interface and keyboard) chip and CRC (card reader controller) chip work. HP provided a fairly complete general description of the PIK in a Journal article, albeit leaving some details for me to discover, but their CRC description was extremely cursory, and it took me quite a while to work out the details of the CRC.
(04-09-2015 07:06 AM)brouhaha Wrote: [ -> ]That someone might reverse-engineer the ACT instruction set and simulate it, and have the 67/97 simulation work correctly without having run into this problem and analyzing it to determine how to fix it to make the label search work correctly, seems *extremely* implausible, because the "obvious" behavior of that instruction in all other instances is contrary to what is needed for label search.

Hello Olivier

I would agree to the above statement. I could track down and fix the label search problem only by comparing the original program flow with the emulated program flow with a dedicated ACT recorder/scanner. You could probably have used a sophisticated logic analyzer as well.

The more I utter my great respect to you, if you found a working emulation completely by yourself. Could you talk some more about how you developed your programs?

Bernhard
(04-09-2015 03:58 PM)PANAMATIK Wrote: [ -> ]
(04-09-2015 07:06 AM)brouhaha Wrote: [ -> ]...

Hello Olivier ...

Hmmh, IIRC he's called Eric Confused

d:-?
Hi,

I did not need a logic analyzer, just a de-assembler, a nice emulator (mine for windows at first in 2012), then some time (!!) to look at trace of execution for 'A' key press and understanding why it doesn't work (see windows HP97 emulator).
see my own re assembled HP97 rom code for GTO command :
Code:

                    #
                    # Command GSB S8 is set
                    # 
Comnd_GSB_n:                1 -> S8
                            1 -> p
                            a + 1 -> a[p]
                            a + 1 -> a[p]
                    #
                    # Command GTO S8 is not set
                    # 
Comnd_GTO_n:                1 -> p
                            a + 1 -> a[p]
                            a + 1 -> a[p]
                            0 -> p
                            b -> c[w]
                            m1 <-> c
                            a + 1 -> a[p]
                            if n/c go to .normal
                            1 -> S10                    is GTO (i)
                            go to Get_(i)                
                            
.normal:                    a - 1 -> a[p]
                            a <-> c[w]
gto_in_c:                    1 -> p                        from Get_(i)
                            c -> a[w]
                            shift left a[w]
                            shift left a[w]
                            a <-> c[xs]
.loop:                        shift left a[w]
                            shift left a[w]
                            c -> a[x]
                            p - 1 -> p
                            if p # 5
                              then go to .loop
                            jsb R3D_to_c                get prgm address
                            if c[x] # 0
                              then go to .skip            
                            jsb Inc_Prg_Step            inc if 0
.skip:                        1 -> p
.loop1:                        p - 1 -> p                    correct step
                            p - 1 -> p                  wrap at first
                            c - 1 -> c[xs]
                            if n/c go to .loop1
                            
gto_0C51:                    c -> addr                    
                            b <-> c[w]                    save start search pos
                            data -> c                    get prgm reg
                            b <-> c[w]
                            a <-> b[w]
ifg_0C56:                    if a >= b[p]
                              then go to ifg_0C85
gto_0C58:                    p + 1 -> p
                            p + 1 -> p
                            if p # 0
                              then go to ifg_0C56
                            go to gto_0C79
ifg_0C5D:                    
gto_0C5D:                    c -> addr
                            a <-> c[w]
                            data -> c                    get prgm reg
                            a <-> c[w]
                            if a[w] # 0
                              then go to ifg_0C64
                            go to gto_0C79
ifg_0C64:                    1 -> p
                            if a >= b[p]
                              then go to ifg_0C85
                            3 -> p
                            if a >= b[p]
                              then go to ifg_0C85
                            5 -> p
                            if a >= b[p]
                              then go to ifg_0C85
                            7 -> p
                            if a >= b[p]
                              then go to ifg_0C85
                            9 -> p
                            if a >= b[p]
                              then go to ifg_0C85
                            11 -> p
                            if a >= b[p]
                              then go to ifg_0C85
                            13 -> p
                            if a >= b[p]
                              then go to ifg_0C85
gto_0C79:                    1 -> p
                            c - 1 -> c[wp]
                            if c[p] # 0
                              then go to ifg_0C5D
                            if S6 = 1                    full research done ?
                              then go to (i)_Error_0
#ifdef HP97+                              
                            load constant 8
#else
                            load constant 2                start again
#endif
                            1 -> S6
                            go to gto_0C5D
                            9 -> p
                            a <-> b[w]
                            go to gto_0C51
ifg_0C85:                    a <-> b[p]
                            if a >= b[p]
                              then go to ifg_0C8A
                            a <-> b[p]
                            go to gto_0C58
ifg_0C8A:                    a <-> b[p]
                            p - 1 -> p
                            if a >= b[p]
                              then go to ifg_0C90
gto_0C8E:                    p + 1 -> p
                            go to gto_0C58
ifg_0C90:                    a <-> b[p]
                            if a >= b[p]
                              then go to ifg_0C95
                            a <-> b[p]
                            go to gto_0C8E
ifg_0C95:                    c + 1 -> c[xs]
                            p - 1 -> p
                            p - 1 -> p                  be careful when wrap
                            if p # 12
                              then go to ifg_0C95
                            c + 1 -> c[xs]
                            c + 1 -> c[xs]
                            c + 1 -> c[xs]
                            decimal
                            0 - c - 1 -> c[xs]
                            c -> a[w]
gto_do_it:                    m1 -> c
                            b <-> c[w]
                            jsb R3D_to_c                get R3D
                            if S8 = 0
                              then go to .gto_end            it's a GTO
                            a <-> c[w]                    is a GSB
                            11 -> p
                            shift left a[wp]            push a step/reg
                            shift left a[wp]
                            shift left a[wp]
                            a <-> c[w]
                            if S2 = 1
                              then go to .gto_end
                            1 -> S2
                            if S1 = 1
                              then go to .gto_end
                            0 -> c[w]                    
.gto_end:                    a <-> c[x]                    found ...
                            c -> data rD                save R3D
                            go to gto_0033                continue
the rest of the rom code is at mentioned website ... see for yourself.

As behavior of p - 1 -> p opcode I just avoid to do it if previous opcode was also p - 1 -> p opcode with a wrap

(04-09-2015 03:58 PM)PANAMATIK Wrote: [ -> ]
(04-09-2015 07:06 AM)brouhaha Wrote: [ -> ]That someone might reverse-engineer the ACT instruction set and simulate it, and have the 67/97 simulation work correctly without having run into this problem and analyzing it to determine how to fix it to make the label search work correctly, seems *extremely* implausible, because the "obvious" behavior of that instruction in all other instances is contrary to what is needed for label search.

Hello Olivier

I would agree to the above statement. I could track down and fix the label search problem only by comparing the original program flow with the emulated program flow with a dedicated ACT recorder/scanner. You could probably have used a sophisticated logic analyzer as well.

The more I utter my great respect to you, if you found a working emulation completely by yourself. Could you talk some more about how you developed your programs?

Bernhard
(04-09-2015 05:16 PM)Oulan Wrote: [ -> ]Hi,

I did not need a logic analyzer, just a de-assembler, a nice emulator (mine for windows at first in 2012), then some time (!!) to look at trace of execution for 'A' key press and understanding why it doesn't work (see windows HP97 emulator).
see my own re assembled HP97 rom code for GTO command :
As behavior of p - 1 -> p opcode I just avoid to do it if previous opcode was also p - 1 -> p opcode with a wrap

Obviously you found the correct behaviour for the emulator by analyzing and understanding the intention of the code. That is indeed the right way to get ahead. And you need time(!!).

Congratulations again!

Bernhard
I saw an auction for a nice looking HP-21 that has only one digit lighting up. I am wondering if this might be a candidate for your ACT or could this more likely be a display problem ?

Bob
(04-09-2015 08:58 PM)bshoring Wrote: [ -> ]I saw an auction for a nice looking HP-21 that has only one digit lighting up. I am wondering if this might be a candidate for your ACT or could this more likely be a display problem ?

Bob

90% Smile

I'm going to provide the HP-21E with 100 storage registers, ROM constant collection in the next new ACT firmware revision.

Bernhard
(04-10-2015 07:11 AM)PANAMATIK Wrote: [ -> ]I'm going to provide the HP-21E with 100 storage registers, ROM constant collection in the next new ACT firmware revision.

Any chance you might do the same for the HP-27(E)? I'm just enquiring on behalf of a friend, you understand . . . Wink
(04-10-2015 09:38 PM)Les Bell Wrote: [ -> ]
(04-10-2015 07:11 AM)PANAMATIK Wrote: [ -> ]I'm going to provide the HP-21E with 100 storage registers, ROM constant collection in the next new ACT firmware revision.

Any chance you might do the same for the HP-27(E)? I'm just enquiring on behalf of a friend, you understand . . . Wink

Yes, this should be possible, my friend! Smile

Next firmware revision is also about four times faster!!! I coded most of the ACT machine instructions in hand-carved assembler now.

Bernhard
(04-11-2015 12:36 AM)PANAMATIK Wrote: [ -> ]Yes, this should be possible, my friend! Smile

lol! I was only being a bit cheeky, there!

(04-11-2015 12:36 AM)PANAMATIK Wrote: [ -> ]Next firmware revision is also about four times faster!!! I coded most of the ACT machine instructions in hand-carved assembler now.

Bernhard

I'm just doing a little research on dead Woodstocks - if this one had some flickering LED's, I would probably be a bit more confident that the problem was just the ACT. I'll be in touch in a day or two. Wink
(04-11-2015 12:36 AM)PANAMATIK Wrote: [ -> ]Next firmware revision is also about four times faster!!! I coded most of the ACT machine instructions in hand-carved assembler now.
A good starting point to improve the math precision of all that HPs you emulate Smile
(04-12-2015 09:52 AM)pito Wrote: [ -> ]A good starting point to improve the math precision of all that HPs you emulate Smile

To improve math precision it would be necessary to change the original HP ROM code of the calculator, which to my knowledge nobody has tried so far. I optimized only the emulator (PIC assembler) code, which gives more speed but doesn't change the mathematical algorithms and precision.

What could be the benefit to write a firmware for the ACT processor with higher precision? I think this should be disposed to our modern calculators.

Bernhard
This weekend was dedicated to the new ACT, giving it another unprecedented feature:

Printing on the HP82240B Infrared printer

I started yesterday morning implementing the HP82240 infrared software interface. Today in the morning I made the hardware interface and started oscilloscope measurements. And only some hours ago I got the first printed line on paper. Now, after some more debugging, the HP-25E is printing perfectly the currently displayed X register or the 49 program steps on demand.

To implement the correct timing with the ACT was not critical and it meets the "Technical interface Guide" requirements. Also the hardware, a transistor and two resistors can be easily added to the ACT circuit. The infrared range depends on the value of the current limit resistor, according to the Guide 18 Ohm is recommended.

You can see in the following image the "Battleships" program from the ACT manual printed on a HP82240B printer.

This is the first time ever, that an HP-25 printed its program on paper.

[Image: uc?export=view&id=0Bwx8KUfOUL_ReklsRUVwZ3Z3V00]

Printing can be enabled/disabled by pressing the XY button at power up. If printing is enabled, the HP-25E shows "HP-25E Ir" in the display.

[Image: uc?export=view&id=0Bwx8KUfOUL_RZlEzaXVRam9EUXM]

Paper Advance is done with g ENTER
Print X register is done with f ENTER, while mantissa is shown
Print Program is started with g SST in PRGM mode

To implement the printer was possible only after I compressed the ACT firmware substantially by replacing C code with assembler routines. I will need some time to fix the new release and you will be informed, if it is ready.

For me it was a good weekend.

I hope you also enjoy this new feature.

Bernhard
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Reference URL's