This story might amuse some of you...
I have an Epson PX4 laptop in bits on the bench, and for various
reasons I needed to work out which RAM stored each data bit (there are 8
64K*1 DRAMs on the board, these are actually somewhat odd DRAMs with
internal refresh, but anyway...) The problem is that while the main
processor is a Z80 (and thus the data bit order is known at the processor
pins), the bus goes into a gate array (GAPNDL), comes out on another 8
pins and goes to the RAM.
To make life difficult, my PX4 doesn't have any programming language (I
don't have the BASIC ROM for it, yes, I know I could download an image,
but I don't have any spare carriers for the EPROMs). It doesn't have DDT,
or ASM, or even ED. It does have the standard Utilities, PIP, STAT,
FILINK, etc
So, this is how I hacked it.
Firstly, I fitted the PX4's PCB into the case, without the upper shield
plate. Fitted the battery contacts, fitted the lower case and a few of
the screws. Put the display PCB (uncased) in roughly the right position,
fed the flexiprint through the case and plugged it in. Now, with the
keyboard removed, I could get access to the solder side of the main PCB.
And since the keyboard is just switches, it should be safe to fit and
remove it with the thing powered up.
Then I got out my PX8. At least this one has BASIC (althogh nothing
else other than the utilities I mentioned above, no DDT, or ASM). And I ran
this little BASIC program on it :
10 FOR B=0 TO 7
20 OPEN "O",#1,"A:BIT"+CHR$(48+B)+".COM"
30 PRINT #1,CHR$(243);
40 PRINT #1,CHR$(62);CHR$(2^B);
50 PRINT #1,CHR$(50);CHR$(255);CHR$(1);
60 PRINT #1,CHR$(195);CHR$(0);CHR$(1);
70 CLOSE #1
80 NEXT B
90 END
This created 8 .COM files in the RAMdisk of the PX8. Each one was of the
form :
DI ; Don't want anything else messing around at the same time
LD A,#01h ; Set bit 0
LD (01FFh), A ; Do a write to the RAM of that data word
JP 0100h ; round again, remember CP/M .COM files load at 100h
The other 7 programs write 02, 04, 08, 10, 20, 40, 80 hex respectively to
RAM.
Hand-assembled that using the Z80 data sheet and an HP16C, wrote the
BASIC program above
Put the PX4 keyboard in place, linked the 2 machines via the RS232 ports,
and used FILINK to transfer the 8 files over to the PX4. Ran the first
one, of course the machine locked up (it was supposed to). Removed the
keyboard, connected Channel 1 of the LogicDart to pin 3 of one of the
DRAM chips (Write enable/), probed with Channel 2 on pin 2 (Data In --
actually linked to Data Out on the same RAM, I checked this first!) of
each of the DRAMs in turn until I found the one that had a high data line
when the write pin went low. That was the RAM that stored bit 0.
Reset the PX4 and was pleased to see that the RAMdisk was unchanged so I
didn't have to download the programs from the PX8 again. Ran the next
program, found the RAM chip that stored bit 1, and so on.
-tony