Post Reply 
P register indexing
10-03-2016, 01:00 PM
Post: #1
P register indexing
Hi all,

I've been looking at some amazing old works by Jarques Laporte and microcode regarding the P register.


code: [if P = x] (xxxx100100)

or

code: [if p # x] (xxxx101100)

x is an index in (4, 8, 12, 2, 9, 1, 6, 3, 1, 13, 5, 0, 11, 10, 7, 4)

(however, 4 and 1 are duplicated in the indexing sets)


code: [p = x] (xxxx111100)

x is an index in (14, 4, 7, 8, 11, 2, 10, 12, 1, 3, 13, 6, 0, 9, 5, 14)

(however, 14 is duplicated in this indexing set)

Just wondering how the full 16 values can be recovered when there are duplicated values in the indexing.


cheers

Tony
Find all posts by this user
Quote this message in a reply
10-04-2016, 06:15 PM (This post was last modified: 10-04-2016 07:43 PM by PANAMATIK.)
Post: #2
RE: P register indexing
(10-03-2016 01:00 PM)teenix Wrote:  Just wondering how the full 16 values can be recovered when there are duplicated values in the indexing.

Hi Tony,

I think your question concerns an implementation detail in your HP assembler/emulator.

Only the woodstock HP-21, 22, 25, 27, 19/29C and spice models 31E, 32E, 33E, 33C, 34C, 37E, 38E, 38C and 67/97 use this instruction scheme. The classic models have different opcodes and can set and test all 16 values of p.

p = 14 0074 and 1774 is never used
if p = 4 is always coded as 0044, 1744 is never used
if p # 4 is always coded as 0054, 1754 is never used
if p = 1 is always coded as 0544, 0844 is never used
if p # 1 is always coded as 0554, 0854 is never used
if p = 14 is never used, no opcode available (only in classic models)
if p # 14 is never used, no opcode available (only in classic models)

From all above models there is only one, that uses the instruction p = 14 coded as 0074 at address 0-5777 (HP-33C) .
(Correction: this address is a data word, not part of the code and thus never will be executed)

As p is used for indexing 1 out of 14 bytes of the c register, its range is normally from 0-13, it could be designed as a settable synchronous 4-bit up/down counter which wraps at 14, but the real implementation in the ACT chip is unknown.

I think Eric Smith did run a ROM emulator when he developed the "nonpareil" emulator, which injected also the 1774, 1744, 1754, 0844, 0854 opcodes and he defined the behaviour of these unused opcodes in his documentation. From HPs point of view they are undefined instructions.

Bernhard

That's one small step for a man - one giant leap for mankind.
Find all posts by this user
Quote this message in a reply
10-04-2016, 07:38 PM
Post: #3
RE: P register indexing
(10-04-2016 06:15 PM)PANAMATIK Wrote:  From all above models the only one, that uses the instruction p = 14 is HP-33C at address 0-5777 coded as 0074.

Sorry, I have to correct myself. After having had a closer look to the address 0-5777 it turns out, that this address is never executed, thus p=14 code 0074 is never used in any calculator. This makes perfect sense, because the p index register should only have numbers from 0-13 as mentioned in the previous post.

Bernhard

That's one small step for a man - one giant leap for mankind.
Find all posts by this user
Quote this message in a reply
10-04-2016, 10:33 PM
Post: #4
RE: P register indexing
Hi Bernhard

That makes sense now

I was fiddling around with a code disassembler and came across this problem.

Many thanks.

cheers

Tony
Find all posts by this user
Quote this message in a reply
11-14-2016, 01:37 PM
Post: #5
RE: P register indexing
I was wondering just why did they use these schemes ? Did they do it because they published the code for the 45 and then they didn't wanted people fiddling with the next calcs, or there is any savings in terms of gates ?
The Nut processor has also a similar encoding, but only one encoding instead of the two used by the Woodstock processor. Such an encoding is not used in the Saturn. But the Saturn was a kind of open architecture after all.
Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 2 Guest(s)