|Re: HP-71B FRAM Extension: an update|
Message #5 Posted by Christoph Giesselink on 26 Apr 2011, 5:23 p.m.,
in response to message #4 by Hans Brueggemann
i totally agree with you concerning the memory handling that you are explaining in your post. i know that the HP-71B itself cares for the address handling of the plugins. to be more precise: for testing, i configured the FRAM extender as 2 x 32kByte RAM. therefore, the HP-71B reordered internal ram and plugin-ram in descending size order, meaning that the two 32kB RAMs became located from $30000 to $4FFFF, while the internal RAM got located at $50000 to $57FFF.
Sorry, you're right. Larger RAM modules than the internal 4K are configured first. I missed that, so the addresses above are correct.
but that's not my headache. the problem is, that i don't have fully discovered yet how the FREE PORT command works, and whether it uses hardware commands that my extender does not properly decode yet.
I added a hybrid 64KB (2*32KB) RAM in port 1 to a standard HP71B.
The C=ID codes for the two 32KB modules are: $00009 and $80009.
So the address layout for port 1 is
The address layout of the internal RAM for port 0 is
When you now call FREE PORT(1), first the independent RAM marker $B3DDDDDE is written to address $30000 (start of the port 1 memory) and the rest of the port 1 memory is set to 0.
Then the RESET command is called.
Now all soft configurated modules are getting a CONFIG command. Every first chip of a hybrid RAM is configured at address $80000, all other chips at $40000. I think, but not checked, the HP71B OS is trying to detect the independent RAM marker $B3DDDDDE.
When all modules have been configured, the RESET command is called a 2nd time.
But now we have differences between HP71B ROM rev. 1BBBB and 2CDCC.
In the new module configuration process with the CONFIG command, all modules are placed at their final memory address.
Port 0 with the internal RAM:
Port 1 with the 64KB independent RAM @ ROM rev 2CDCC:
Port 1 with the 64KB independent RAM @ ROM rev 1BBBB:
Unconfigured Size = $10000
The 2nd RAM with ID = $80009 is unconfigured because the HP71B OS is doing an UNCFG with C[A] = $FFF00. This is a known bug of ROM rev 1BBBB mentioned in the Soft Forth Manual p.2-2.
Everything works fine on a 1BBBB ROM when you have two 32KB modules both returning the ID's $80009 or with a 96KB hybrid module (32KB + 64KB) returnig the ID's $80009, $00009, $80009.
at the moment,the commands as layed out in chapter 2.1.2 of the hardware IDS are all implemented with the exception of POLL and BUSCC, and the ominous command "B", which is described as being "reserved".
I don't think that a RAM or ROM module answer to a POLL command. I assume the timers inside the 1LF3 chips and for example the HPIL mailbox will answer for a POLL command in the case of a service request.
From the functional Saturn emulation aspect the bus commands described in chapter 2.1.2 of the hardware IDS are not emulated in Emu48 based emulators, so I can't say to much about this.