Hello fellow hardware enthusiasts,
Last weekend I've managed to repair my broken 4MB memory mapper cartridge. It failed due some kind of RAM problem so the MSX couldn't boot when it was inserted. This story is about the repair process and I hope some people find this information usefull some time in the future
First of all it's usefull if you have a device to switch off a slot/cartridge because otherwise it's required to insert the cartridge in a powered system to do diagnosis. My best guess at this time was that one or more of the DRAMs had failed, so I would need to narrow down exactly which ones.
To that purpose I firstly used the tool "testmap 4.2". This revealed that the bank switching logic was working correctly, but it found an error immediately after starting the bit/address test. However the output of testmap, while showing expected value and actual value, was not specific enough: I didn't know which RAM pages were affected because the tool stops after the first error found.
So I wrote a small basic program to assist me with that. It's quick and dirty and not properly written at all, please bear with me
10 'POKE&HC000,0:POKE&HF676,1:POKE&HF677,&HC0 20 DEFINT A-Z:SLOT2=&B11100000 30 OUT&HA8,SLOT2:PAGE=0 40 PRINT "page: "PAGE" "; 50 OUT&HFE,CINT(PAGE) 60 TE=&H0: GOSUB 200 62 'TE=&HFF: GOSUB 200 64 'TE=&H55: GOSUB 200 70 PAGE=PAGE+1:PRINT:IF PAGE<255THENGOTO40 80 END 200 ADDR=&H8010:POKE ADDR,TE: RESULT=PEEK(ADDR):IF RESULT <> TE THEN BEEP: PRINT "error "HEX$(TE)" <> "HEX$(RE)" ";:ELSE PRINT "ok. "; 201 RETURN
How it works: first execute the commented line 10 pokes to relocate BASIC start address then load the .bas again. Then run and it'll switch page &H8000-&HBFFF to SLOT2 (insert mapper in SLOT2!) and cycle through all mapper pages in SLOT2 while writing and comparing a test value to each page. Lines 62-64 test with other bit patterns optionally.
This revealed that mapper pages &H0-3F were showing errors in bits 4,3,2 while all pages &H40 to &HFF were perfectly working fine. So hopefully this provided me with enough information to narrow it down to one specific DRAM.
But now.. I couldn't find schematics online for this type of mapper. So the next step was reverse engineering (part of) the schematic by continuity tracing. Here goes the results...:
There you go! After investigating the connections I was puzzled at first because unlike other RAM systems that I've worked on, this one did NOT select the various RAM banks using the /RAS signal. After comparing all DRAM pin signals to eachother it occured to me that this design selects the banks using the /OE and /WE pins because all address lines and /RAS and /CAS were interconeccted between all 8 DRAMs.
Thinking of it it seems like a quite genious design because this eliminates additional refresh logic to perform refresh correctly. Now the mapper can refresh all DRAMs at once using CAS before RAS or RAS only refresh. For details on DRAM refresh operation refer to here.
So I've replaced the 1Mx4 DRAM on position D0-D3 on bank 0 and voila! One fully functional 4MB mapper B-)
The actual replacement process is basic SMD soldering. The old part I've carefully cutted the legs off using a sharp blade. Trying to desolder a SOJ ic without chip-quick or hot air gun is going to damage the pcb traces, so don't even consider it. Then cleaned off the leg remains and wicked old solder and cleaned with isoprop alcohol. Then added a tiny amount of fresh solder to the pads and a generous amount of flux. Put on replacement part and drag solder the pins to the pads. Unfortunately the part moved for 0,5mm during drag soldering but all pins were making proper contact and I didnt want to risk damaging the pcb so I've left it on there a little tilted. Always check all connections with multimeter and visually for shorts or debris and clean with isoprop afterwards the excessive flux away.
Saga concluded! I hope you enjoyed it ;)
Cheers!