Challenge: Learn something new from something really OLD - Page 1
Forum section: electronics / repair

author: mauroh
author_rank: Frequent Contributor
timestamp: November 21, 2014, 12:01:52 pm
content: Hi, I own an Olivetti M10 (99% the same electronics of the Tandy (TRS-80) Model 100) that suddenly stopped working and I would like to take this opportunity to know something new from something really OLD.I was hoping that one of you can suggest me some measurement to perform to track the fail or some other expert around the world to ask to.The unit is in quite good conditions and was working perfectly until i touched the backup battery switch while the unit was powered.Actually the backup battery was removed long time ago because was dead but everything was fine without it.From the schematic i can't really understand why moving that switch can cause any issue and may be was just a coincidence.Now if i power the unit (with 4 AA battery or with the power adapter) i can hear a tic on the beeper, the LCD turns on but no characters appear (i can adjust the contrast but i can get only dark pixels).I found online the ROM dump and with a programmer i compared the content that was OK.I also built a small circuit to test the LCD and it works.Any suggestions?Mauro

author: mauroh
author_rank: Frequent Contributor
timestamp: December 20, 2018, 12:48:48 pm
content: Long story short:SUCCESS!!!!!! After so many YEARS my Olivetti M10 is working fine again.Little explanation of the repair process:Removed M3, M4 (decoders), M7, M8, M9 (all my RAM Modules).Tested M3 and M4 with a TL866 -> goodInstalled IC machined sockets.Installed M3 and M4 back in placeInstalled only one RAM module in M9 positionPC tested -> FAILReplaced RAM ModulePC tested -> FAILReplaced RAM Module with the last one availableSUCCESS!!!!!!As you can see from the pictures, I've used the world worst/cheapest desoldering tool (paid 6 euros) to remove the ICs and I have to say that it worked great.Most probably it will fail within the next usage but did the job better then expected.Regarding the Olivetti M10 I'm so happy to play with it again and I'm trying restore the broken RAM module with modern/available alternative components.Mauro

author: Bashstreet
author_rank: Frequent Contributor
timestamp: December 21, 2018, 01:12:47 pm
content: Olivetti is a Italian company ? was any of the components manufactured in Italy ?

author: mauroh
author_rank: Frequent Contributor
timestamp: December 27, 2018, 08:31:32 am
content: Yes, Olivetti is a well known Italian company that manufactured several PC printers and typewriters. They are still active but not in the PC marketThe electronic design of the Olivetti M10 ia actually a customization of a Kyocera PC that was adapted also by NEC with the PC-8201A and Tandy with the famous TRS-80 Model 100.Surely the design of the case with the nice tilted display was a touch by Olivetti but not other specific component were built by Olivetti.In this days I'm trying to recover at least one of the 2 broken memory modules (made with 4 IC on a ceramic substrate) testing and combining the single IC hoping I have at least 4 good ones.I tried to use my TL866 programmer to test the single IC and made e small adapter but so far no luckMauro

author: Kleinstein
author_rank: Super Contributor
timestamp: December 27, 2018, 09:01:04 am
content: The RAM module seems to be 8 Kbytes in an 28 pin case, just like the old 6264 Static rams. If you are very lucky even the pin-out could match or at least a simple converter socked like shown (only the other way around) could work.

author: mauroh
author_rank: Frequent Contributor
timestamp: December 27, 2018, 10:37:36 am
content: The ceramic module is made with 4 TC5518BF,almost pin to pin compatible with the 6116 SRAM.All pins of the 4 IC are in parallel, only the 4 CS are separated.My adapter should accomodate the difference and with the jumper I shoul be able to select a single IC in the module. So far the TL866 is failing addr test, data, unit...Since the 2 modules I removed from the M10 are failing in the PC I think at least one IC on each module is bad so I removed all IC but one from the ceramic module and I'm trying to test one IC at a time.Mauro

author: Mechatrommer
author_rank: Super Contributor
timestamp: December 27, 2018, 11:14:22 am
content: Quote from: mauroh on December 20, 2018, 12:48:48 pmi dont want to congratulate you on your repair success, which is a norm with enough perseverance and patient. but i want to congratulate you for coming back after 4 years and conclude this thread. its a heartbreaking when we search in the net for repair report or success someone with the same device and we have the same fault, but finding the page is a no answer dead end.

author: mauroh
author_rank: Frequent Contributor
timestamp: December 27, 2018, 12:02:54 pm
content: Ha haThank you!!!This is exactly the reason why I posted this.I have to thank all the guys of the M100 Clubwww.club100.orgthat gave me support several times and specially to an Italian one (don't know if he want to be mentioned here...) that explained me a possible cause of the death that turns out to be correct!!!He has also a youtube channel related to retrocomputing repairhttps://www.youtube.com/user/iz8dwf/videosThe story is actually much longer and started two weeks after I received this Olivetti M10 from a university colleague in the 1995!!!!!Yes I killed it in 2 weeks and I took 23 years to bring it back to life.Since then I tried to acquire the tools and knowledge to repair it and taking it from the basement every once in a while to try some new tests.Mauro

author: mauroh
author_rank: Frequent Contributor
timestamp: December 28, 2018, 12:52:18 am
content: This morning I built a new adapter to test the single SRAM ICs of the ceramic modules, with an Arduino Mega, will see how it goesMauro

author: mauroh
author_rank: Frequent Contributor
timestamp: January 03, 2019, 01:35:26 pm
content: This is my SRAM Tester made with an ArduinoMega 2560Attached you will find the instruction to build it yourself and the Arduino Code.I succesfully identified the IC that were failing on my modules, removed it from the ceramic substrate and restored one module out of 2!!!!Now my Olivetti M10 is working fine with 2 SRAM modules.Please let me know if you will find this usefull or if you have a better simpler method to identify the bad IC in a module (I tried using a TL866 programmer with no luck).This tester is so flexible and it can be adapted to test several kind of ICHoping it will help someone, I made a separete thread:https://www.eevblog.com/forum/repair/sram-tester-with-arduino-mega-for-retrocomputers/MauroArduino Mega SRAM Tester for TRS-80 Model 100 , Olivetti M10 , Kyotronic KC-85 , NEC PC-8201A ...Code:Code://*******************************************************************************// ArduinoMega SRAM Tester for// TRS-80 Model 100 / Olivetti M10 / ...// Author: Mauro Pintus// Date : 2018 12 21// Ver : 1.7//*******************************************************************************// ___________SRAM PINs___________// | |// | _MEGA GPIO_ | TOP View Bottom View// | | | | _____U______ _____U______// A07  (D22) (+5V)  VCC | __u___ | .| ______ |.// A06  (D24) (D25)  A08 | | | | .| | | |.// A05  (D26) (D27)  A09 | | | | .| | | |.// A04  (D28) (D29)  _WE | | IC1 | | .| | IC4 | |.// A03  (D30) (D31)  CE4 | | | | .| | | |.// A02  (D32) (D33)  A10 | |______| | .| |__n___| |.// A01  (D34) (D35)  CEX | | .| |.// A00  (D36) (D37)  IO7 | __u___ | .| ______ |.// IO0  (D38) (D39)  IO6 | | | | .| | | |.// IO1  (D40) (D41)  IO5 | | | | .| | | |.// IO2  (D42) (D43)  IO4 | | IC2 | | .| | IC3 | |.// GND  (---) (D45)  IO3 | | | | .| | | |.// CE1  (D46) (---)  GND | |______| | .| |__n___| |.// CE2  (D48) (D49)  CE3 |____________| .|____________|.////If the test will FAIL some pin could be shorted to GND or to VCC//so all pins will be set as input to prevent damage to the Arduino//A small resistor (150 Ohm) between each Arduino GPIO and memory pin//should prevent any damage to the Arduino.#define pinCE1 46#define pinCE2 48#define pinCE3 49#define pinCE4 31#define pinCEX 35#define pin_WE 29#define pinA00 36#define pinA01 34#define pinA02 32#define pinA03 30#define pinA04 28#define pinA05 26#define pinA06 24#define pinA07 22#define pinA08 25#define pinA09 27#define pinA10 33#define pinIO0 38#define pinIO1 40#define pinIO2 42#define pinIO3 45#define pinIO4 43#define pinIO5 41#define pinIO6 39#define pinIO7 37#define max_addr 0x7ff// Configuration variables// Fill = 0 the tester will read the memory without writing on it// Fill = 1 the tester will test each cell of the memoryint Fill = 1;// Verb = 0 the tester will print only the test results// Verb = 1 the tester will print on the serial port all the memory contentint Verb = 1;uint8_t ctrl_pins[] = { pinCE1, pinCE2, pinCE3, pinCE4, pinCEX, pin_WE };uint8_t addr_pins[] = { pinA00, pinA01, pinA02, pinA03, pinA04, pinA05,pinA06, pinA07, pinA08, pinA09, pinA10 };uint8_t inout_pins[] = { pinIO0, pinIO1, pinIO2, pinIO3,pinIO4, pinIO5, pinIO6, pinIO7 };int failed = 0;int PassFail[]= {0,0,0,0};void setup(){Serial.begin(115200);Serial.println(F("\n*****************************************"));Serial.println(F("ArduinoMega SRAM Tester for"));Serial.println(F("TRS-80 Model 100 / Olivetti M10 / ..."));Serial.println(F("Author: Mauro Pintus"));Serial.println(F("Date : 2018 12 21"));Serial.println(F("Ver : 1.7"));Serial.println(F("*****************************************\n"));Serial.println(F(" ___________SRAM PINs___________ "));Serial.println(F(" | |"));Serial.println(F(" | _MEGA GPIO_ | TOP View Bottom View "));Serial.println(F(" | | | | _____U______ _____U______ "));Serial.println(F("A07  (D22) (+5V)  VCC | __u___ | .| ______ |."));Serial.println(F("A06  (D24) (D25)  A08 | | | | .| | | |."));Serial.println(F("A05  (D26) (D27)  A09 | | | | .| | | |."));Serial.println(F("A04  (D28) (D29)  _WE | | IC1 | | .| | IC3 | |."));Serial.println(F("A03  (D30) (D31)  CE4 | | | | .| | | |."));Serial.println(F("A02  (D32) (D33)  A10 | |______| | .| |__n___| |."));Serial.println(F("A01  (D34) (D35)  CEX | | .| |."));Serial.println(F("A00  (D36) (D37)  IO7 | __u___ | .| ______ |."));Serial.println(F("IO0  (D38) (D39)  IO6 | | | | .| | | |."));Serial.println(F("IO1  (D40) (D41)  IO5 | | | | .| | | |."));Serial.println(F("IO2  (D42) (D43)  IO4 | | IC2 | | .| | IC4 | |."));Serial.println(F("GND  (---) (D45)  IO3 | | | | .| | | |."));Serial.println(F("CE1  (D46) (---)  GND | |______| | .| |__n___| |."));Serial.println(F("CE2  (D48) (D49)  CE3 |____________| .|____________|."));Serial.println();}void checkPins(){int readback,index,i;String text;for (index = 0; index <= 1; index++){if (index == 0) text="HIGH "; else text="LOW ";for (i = 0; i < sizeof(ctrl_pins); i++){if (index == 0) pinMode(ctrl_pins, INPUT_PULLUP);else { pinMode(ctrl_pins, OUTPUT);digitalWrite(ctrl_pins, LOW);}readback = digitalRead(ctrl_pins);if (readback != index) {if (Verb==1) Serial.println("Check: Ctrl pin " + String(i, DEC) + " " + text +"PASS");pinMode(ctrl_pins, OUTPUT);digitalWrite(ctrl_pins, HIGH);} else {if (Verb==1) Serial.println("Check: Ctrl pin " + String(i, DEC) + " " + text +"FAIL");pinMode(ctrl_pins, INPUT);failed++;}}if (Verb==1) Serial.println();//set address pins as outputfor (i = 0; i < sizeof(addr_pins); i++){if (index == 0) pinMode(addr_pins, INPUT_PULLUP);else { pinMode(addr_pins, OUTPUT);digitalWrite(addr_pins, LOW);}if (readback != index) {if (Verb==1){if (i<10)Serial.println("Check: Addr pin " + String(i, DEC) + " " + text +"PASS");else Serial.println("Check: Addr pin " + String(i, DEC) + " " + text +"PASS");}} else {if (Verb==1){if (i<10)Serial.println("Check: Addr pin " + String(i, DEC) + " " + text +"FAIL");else Serial.println("Check: Addr pin " + String(i, DEC) + " " + text +"FAIL");}pinMode(addr_pins, INPUT);failed++;}}if (Verb==1) Serial.println();//set I/O pins as inputfor (i = 0; i < sizeof(inout_pins); i++){if (index == 0) pinMode(inout_pins, INPUT_PULLUP);else { pinMode(inout_pins, OUTPUT);digitalWrite(inout_pins, LOW);}if (readback != index) {if (Verb==1)Serial.println("Check: I/O pin " + String(i, DEC) + " " + text +"PASS");pinMode(inout_pins, INPUT_PULLUP);} else {if (Verb==1)Serial.println("Check: I/O pin " + String(i, DEC) + " " + text +"FAIL");pinMode(inout_pins, INPUT);failed++;}}if (Verb==1) Serial.println();}if (Verb==0){if (failed == 0) Serial.println(F("Check pins PASS\n"));else Serial.println(F("Check pins FAIL\n"));}}void setAddress(int address){for (int i = 0; i < sizeof(addr_pins); i++){digitalWrite(addr_pins, ((address >> i) & 1));}}void writeData(uint8_t data, int IC){int pinCEn;switch (IC) {case 1:pinCEn=pinCE1;break;case 2:pinCEn=pinCE2;break;case 3:pinCEn=pinCE3;break;case 4:pinCEn=pinCE4;break;}digitalWrite(pin_WE, LOW);digitalWrite(pinCEn, LOW);digitalWrite(pinCEX, LOW);for (int i = 0; i < sizeof(inout_pins); i++){pinMode(inout_pins, OUTPUT);digitalWrite(inout_pins, ((data >> i) & 1));}digitalWrite(pin_WE, HIGH);digitalWrite(pinCEn, HIGH);digitalWrite(pinCEX, HIGH);}int readData(int IC){int pinCEn;switch (IC) {case 1:pinCEn=pinCE1;break;case 2:pinCEn=pinCE2;break;case 3:pinCEn=pinCE3;break;case 4:pinCEn=pinCE4;break;}digitalWrite(pin_WE, HIGH);digitalWrite(pinCEn, LOW);digitalWrite(pinCEX, LOW);delayMicroseconds(1);uint8_t readback=0;for (int i = 0; i < sizeof(inout_pins); i++){pinMode(inout_pins, INPUT_PULLUP);readback = readback | ((digitalRead(inout_pins) << i));}digitalWrite(pinCEn, HIGH);digitalWrite(pinCEX, HIGH);return readback;}void test(int Fill, int Verb){if (Fill==0) Serial.println(F("Dump Entire Memory without writing on it"));else Serial.println(F("Test Entire Memory"));int Addr,index;uint8_t Data[]={0x55,0xAA}; //Data Fill 01010101,10101010uint8_t readback;int tab=0;int IC;PassFail = 1;PassFail = 1;PassFail = 1;PassFail = 1;for (IC=1; IC <= 4; IC++){for (index=0; index <= 1; index++){if ((Fill==0)&&(index==1)) break;Serial.print("IC"+String(IC)+" Content");if (Fill==1) Serial.println(" after filling it with 0x" + String(Data,HEX));else Serial.println();for (Addr=0; Addr <= max_addr; Addr++){if((tab==0)&&(Verb==1)){if(Addr<=0xF) Serial.print("00");else if(Addr<=0xFF) Serial.print("0");Serial.print(Addr,HEX);Serial.print(" ");}setAddress(Addr);if (Fill==1) writeData(Data,IC);readback = readData(IC);if ((Fill==1)&&(Verb==1)){if (readback == Data) Serial.print(" ");else{Serial.print("x");failed++;PassFail[IC-1]=0;}}else if ((Fill==1)&&(Verb==0)){if (readback != Data){failed++;PassFail[IC-1]=0;}}else if ((Fill==0)&&(Verb==1)) Serial.print(" ");if (Verb==1){if(readback<=0xF) Serial.print("0");Serial.print(readback,HEX);tab++;if(tab==32){tab=0;Serial.println();}}}if (Verb==1) Serial.println();}}if (Verb==0) Serial.println();}void loop(){checkPins();if (failed == 0){digitalWrite(LED_BUILTIN, HIGH);unsigned long duration = millis();test(Fill,Verb);duration = millis() - duration;Serial.println("Duration: " + String(duration/1000, DEC)+"S");}for (int IC=1; IC <= 4; IC++){if (PassFail[IC-1]) Serial.println("IC"+String(IC)+" PASS");else Serial.println("IC"+String(IC)+" FAIL");}if (failed > 0){Serial.println("Result: FAIL (" + String(failed, DEC) + ")");digitalWrite(LED_BUILTIN, LOW);}else{Serial.println("Result: PASS");}while(1);}

author: Patricklaf
author_rank: Newbie
timestamp: March 07, 2019, 02:24:14 pm
content: Hi Mauro,I just get a M10 with the same symptoms as yours.I will follow your instruction in order to repair it but I wanted to know if you have found a way to replace the missing RAM modules?Regards,Patrick

author: Tomorokoshi
author_rank: Super Contributor
timestamp: March 07, 2019, 05:42:50 pm
content: Here is an interesting option for RAM modules:https://www.ebay.com/itm/TANDY-Radio-Shack-MODEL100-100-Computer-RAM-expansion-PCB/113662802362Just order and solder in the extra parts.

author: Patricklaf
author_rank: Newbie
timestamp: March 07, 2019, 07:11:04 pm
content: @Tomorokoshi thanks for your answer.That's funny, this afternoon I started to design a replacement and I use also a 6264 and a 74HC148. I think I am on the right way

author: mauroh
author_rank: Frequent Contributor
timestamp: March 08, 2019, 02:38:16 pm
content: Hi Patricklaf,have you managed to test the SRAM module to ensure this is the cause of you issue?In my case 2 out of 3 modules were damaged, but the M10 works just fine with only one module.With the ArduinoMega tester listed in the previous post I was able to identify the single broken IC in each module and swapping it with a working IC I was able to recover one module out of two.At the moment I'm happy with it, but to have my machine running with 32k I had 3 options:1) Build one of this smd modules (M100 RAM Module (Surface Mount Version))https://oshpark.com/profiles/Stardust2) Have one of my friends build the attached module for 20$ each3) Wait for a good deal on ebay (sometime an M10/M100 will come for less than a SRAM module...)Good luck and dont forget to post news on the repairMauro

author: Patricklaf
author_rank: Newbie
timestamp: March 12, 2019, 09:01:29 am
content: Hello Mauro,Thanks for your answer.I didn't test the modules yet. I will surely do.I will let you know.