|Combining HP41 ROMs.|
Message #6 Posted by Tony Duell (UK) on 17 July 2002, 6:03 p.m.,
in response to message #3 by Raymond Hellstern
Actually, although the Math/Stat Pac contains the same code as the separate math pac and stat pac, you can't just solder the 2 PCBs together to make the combined pack. To understand why not, you have to know something about the HP41 memory layout. The Nut CPU can address 64K words of ROM. By convention, this is divided up into 16 4K pages. The first 8 pages (0-7) are used for 'system' functions -- the HP41 firmware itself, printer ROM, HPIL ROM, Time module ROM and service module.
The top 8 pages are allocated to the I/O ports, 2 pages to a port. Note that strictly this is only a convention (which is why you can put the HPIL ROM into a port, even though it needs to fit into one of the system pages). Devices plugged into the port are responsible for decoding the full 16 bit address and deciding if they should respond or not.
To help them do this, there are 2 pins on each port that are wired differently (either to the +ve supply line or not connected) on each port. So a module can tell which port it is plugged into.
Most plug-in ROMs (apart from special ones, like printer or HPIL) do use these lines, and then the ROM appears in one of the 2 pages allocated to that port. That way you can plug any module into any port.
Now, 2 pages for each port is 8K of memory. Most of the early modules were only 4K long _and appeared in the lower page of the 2 allocated to the port they were plugged into_. The math pac and stat pac both do. Therefoe if you do manage to wire them both into the same port, you'll just get 2 ROMs conflicting in the lower page, so nothing will work. The genuine Math/Stat pac contains an 8K ROM which puts the Math part and the Stat part in different pages, as you might expect. There is no way to fiddle this -- there is no way to move a ROM between the low and high pages of a given port.
You can make a ROM (or other module) appear to be in a port other than the one it's physically plugged into (by miswiring the 2 select lines), which is how you can double up the Extended Memory modules. They use _one_ of the 2 select lines to decide where to appear in the (separate) RAM memory map, so by soldering 2 of those toghter and fiddling the select lines, you can end up with a double-capacity module that fits into one port (and, indeed, which can share a port with a ROM module).
Oh, yes, a couple of exceptions. A few 4K modules occupy the upper page only, and these can be combined with a 'normal' 4K module in the same port. ZenROM is one such. And the card reader ROM is hardwired to appear in page E (lower page allocated to port 4). OK, the card reader will only physically fit in port 4, so it doesn't really matter, but if you did manage to wire it into another port you'd discover that the ROM (which, in this device is a normal 8 pin DIL chip) ignores the select lines.