It looks like a PIC 18C252 running at 40MHz (100ns instruction cycle) should do the trick. It's available in a 28-pin SOIC package, which fits comfortably inside a single memory module. However, it needs an external clock to run at 40MHz, so an additional chip will be needed. Any suggestions?
The 18C252 has 32K of prom (OTP in the SOIC package), and it can do table reads from it.
That's enough memory for five, maybe six 4K modules (remember, HP41 ROM is 10 bits wide). This may be configured to be two 8K modules as if they were occupying adjacent ports, four 4K modules occupying all ports, or some combination; some ROMs can live below the 32K space, so one of them may fit in some of the free space there. And don't forget about bank-switching.
The idea is to bit-bang everything. Here is a rough outline of the code:
Power-up:
set the pin connected to the PWO line to be a wakeup pin.
probe the B3/B4 lines and remember where were are.
Wake-up:
(the first cycle after wake up is always at address 0,
so let's use that to synchronize).
while SYNC is LO, loop.
while SYNC is HI, loop.
(we are at Phi2 clock pulse 0)
Master-loop:
repeat 2 times
while Phi2 is HI, loop.
while Phi2 is LO, loop.
if PWO is LO, SLEEP.
repeat 14 times
while Phi2 is HI, loop.
while Phi2 is LO, loop.
(we are at Phi2 clock pulse 16)
repeat 16 times
while Phi1 is LO, loop.
read ISA line
shift into a RAM location
while Phi1 is LO, loop.
while Phi1 is HI, loop.
while Phi2 is LO, loop
(we are at Phi2 clock pulse 33)
while Phi2 is HI, loop
if address is in not in our range
while Phi2 is LO, loop
repeat 22 times
while Phi2 is HI, loop.
while Phi2 is LO, loop.
goto Master-loop.
(else)
prepare table base register for lower 8 bits
skip to next Phi2 pulse
read from table
skip to next Phi2 pulse
prepare table base register for upper 2 bits
skip to next Phi2 pulse
read from table
skip next 10 Phi2 pulses
(we are at rising edge of Phi2 pulse 46)
if SYNC is HI
repeat 8 times
output LSB of lower 8 bits
wait for Phi2 to go LO
shift one position right
wait for Phi2 to go HI
repeat 2 times
output LSB of upper 8 bits
wait for Phi2 to go LO
shift one position right
wait for Phi2 to go HI
else
skip next 10 Phi2 pulses
goto Master-Loop
I'm away at a conference all of next week; I hope to work on this during July. Any suggestions are, of course, welcome.
I'll start by using the EPROM version of the 18C252.