Category Archives: Lanier Model 103

Eighty-Eighty

I decided that I had wanted to give myself a little bit of mental exercise so I started work on the Lanier again.

Lanier on table

This began by dumping the thing on the table, pulling the CPU card out and trying to begin modeling its schematics in KiCAD. This is slow, problem-riddled (the board traces go back-front-back-front and are difficult to follow).

Made a decision to power it up after far too long sat up doing nothing. Pulled the PSU out and brought it up slowly on the Variac.

slowly, slowly

Same old nonsense, the thing didn’t do a whole lot of anything to begin with, a bit of a beep, floppy drive lights on. Hooked it up to my new logic analyzer on what looks to most likely be the bus on the backplane.

logic analyzer

There’s a bit of life, and the behavior begins to change. The floppy drives begin to clatter and rattle. I solder a bypass onto the video card to make the screen always show what’s on-screen (blanking bypass) and it’s got some nonsense changing here and there, occasionally filling the screen with alternating patterns.

logic traces

The logic traces look “dirty”, there’s a lot of glitches and the machine in general seems rather unhappy.

omooikkiakka

Some of the random content on the screen can be moderately amusing though.

Right around this point I was contacted by a guy in Ireland who used to service these things, still has one, schematics, discs and spares- everything I thought I’d never got for it. He says it’s a real early model with the screws holding the case on at the sides (probably circa 1975).
His suggestion was check the power supply, because random freaking-out type behavior is normally bad power.

power

I pulled the PSU and checked the voltages present. Everything was where it was supposed to be. Plugged the boards back in and same problem. Started to probe voltages on-load and found that the -12V rail had dropped down to +0.4V which is rather odd. Put a light bulb across the rail- it flashed then went out. Pulled the video card out and the rail stayed stable.

Zener

The RAM in the machine was all 4116, which requires +12, +5 and -5V supplies to work. I had replaced the CPU board with 4164, which needs only +5 so that cuts down on heat and current requirements significantly. The video board still uses 4116 so would definitely not be working without -5, which is derived from the -12 rail. The circuit is rather simple, a diode to the -12V rail, through a 330 Ohm resistor and the other side of that held to a stable voltage by a 5.1V Zener diode. I pulled one leg of the Zener off, removed all the RAM chips and put the video card back in and powered the machine up. The screen filled with [] symbols, which was expected as the RAM is not present and all lines would remain at zero. The -12V rail stayed stable also so the Zener was suspect. I’ve had them fail in the past and turn into almost a dead short. Found a temporary replacement in my box of stuff (half the Wattage rating but OK for a temp try).
Back into the chassis and still the -12V rail collapses. Start tweaking the crowbar adjustment and manage to get it to an unhappy -11.5V before it would just trip out over and over. Turn the PSU over.. and the -15 rail, which the -12 comes from.. is the only line I’d not replaced the main filter capacitor on.

capacitor

It’s all leaky up top, the vent is showing signs of having vented out. Not good. That’s most likely going short, drawing too much current and when the boards are added to that draw, the over-current crowbar is kicking in and shutting the rail down.
I had a dig and find a 15000uF, 50V capacitor with clip lugs. Soldered that in on short flying leads and powered the PSU up. -12 rail is at 12.04V, -15 at 13.3 unloaded so I adjusted them and then hooked up the computer boards. Made a slight tweak to all the voltages and got them within 0.01V stable.

There’s still something that’s not happy because switched on cold it beeps (with a somewhat crackling warble modulating the beep) and the drives click. Once it’s been on for a while it begins to not beep any more and it still goes a bit haywire but at least now I know that the main supply is good. I need to order the correct screw-in capacitor and a higher Wattage Zener for the -5 rail supply on the video card, but this is positive progress.

Retr0bright pt. 2

Took a fair bit longer than anticipated because a) not much sunshine b) I got the mixture wrong c) very yellow

not so yellow

Not completely done but considerably better. I think the rest shall get a dunking and a sunbath. I do have a UV lamp but I don’t think it’s energetic enough to work.
Some people don’t like the whole Retr0bright thing because it detracts from the device. I don’t think so in this case. The keys are double-shot (the black is molded separately to the white, the black shows through, can’t wear off etc.) so there is a caution to be had in bleaching the black of the keys down to something more pale.
With the keys all white, it’ll look considerably better to my eyes. That’ll count for now.

Retr0bright

Mixed up a batch of Retr0bright and stuck a keycap in it outside in the sun, held down by a pair of tweezers (it’s plastic so floats in the solution)

retr0bright

Shall leave it outside for probably 30 minutes or so, it’s a on-and-off sunny day with a number of clouds.

If it works nicely I’ll do the rest on a slightly larger scale.

More Lanier

After the Qume printer took out the 5V rail on the Lanier’s PSU (The thing is powered from the computer rather than with its own power supply) I desoldered the failed transistor, replaced it with the last remaining one and powered back up:

five volts

Thankfully that worked.

Replaced everything into the chassis, as it was too heavy with everything in to carry. Even with the PSU, cards and floppy drives removed it was a strain to get it in and out of the car.

beep

Back up and where we were at before. Current plan is to replace the onboard 512 byte PROM that it boots from with a modified rig with a larger EEPROM, the extra address legs that the system doesn’t natively use to create pages of code available (16 thereof with the $4 EEPROM) which would be addressable via software. Shadow ROM.

Need to get some flip flops and a couple ZIF sockets and some breadboard and get this built. I’m excited to be able to see if it’ll begin to do sensible things.

Pop, crackle, fizz.

Continuation of the Lanier Diaries here, decided to bring the Lanier up gently on the Variac to see if the lack of printer was the cause of it not booting.

Did so, net result was the printer smoking up and taking the +5V power rail with it. Possibly the root cause of the initial failure.

burned qume

Took the Qume apart and cleaned it out. There were a few nuts and bolts rattling about inside on the circuit board. That might have been part of the reason also.

I shall henceforth be fitting fast-blow fuses to the 5V rail.

Lanier Diaries, Part XV

I’d placed an order for some replacement 4116 DRAM. Apparently these days it’s really hard to source so I took a looksee and found a couple guides that show how to use 4164 (more common) DRAM in the same sockets.

Some 4164 was ordered from Jameco Electronics in California.

DRAM

This guide, called “4116 to 4164” was the one I used to convert the 4164 to be able to be used in a 4116 socket. The 4116 has one less address line so the RAS/CAS allows for 4x the amount of memory in the 4164- we just don’t use one address line (tie it high) and connect up only the ground and +5V, compared to the +12, +5 and -5 supplies the 4116 needs.

Fit them in place:

4164 in 4116 sockets

Powered up and BEEEEEEEEEEEEEEEEE, same result.

Continuation of troubleshooting to follow.

Lanier Diaries, Part XIV

Big update. Little picture.

Arduino set up to dump PROM

Set up my Arduino to dump the boot PROM of the Lanier.

Wrote a cheap-n-cheerful program to extract it:

#include

// Ugly 512-byte PROM dump for TBP1842 512 x 8 Prom.

void setup() {
pinMode(2,OUTPUT); // A0 - chip 1
pinMode(3,OUTPUT); // A1 - chip 2
pinMode(4,OUTPUT); // A2 - chip 3
pinMode(5,OUTPUT); // A3 - chip 4
pinMode(6,OUTPUT); // A4 - chip 5
pinMode(7,OUTPUT); // A5 - chip 16
pinMode(8,OUTPUT); // A6 - chip 17
pinMode(9,OUTPUT); // A7 - chip 18
pinMode(10,OUTPUT); // A8 - chip 19
pinMode(11,INPUT); // D0 - chip 6
pinMode(12,INPUT); // D1 - chip 7
pinMode(13,OUTPUT); // #CS - chip 15 (Drives an LED n the Arduino also)
pinMode(A0,INPUT); // D2 - chip 8
pinMode(A1,INPUT); // D3 - chip 9
pinMode(A2,INPUT); // D4 - chip 11
pinMode(A3,INPUT); // D5 - chip 12
pinMode(A4,INPUT); // D6 - chip 13
pinMode(A5,INPUT); // D7 - chip 14
digitalWrite(2,LOW); // Set the Arduino without pull-up (LOW)
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,HIGH); // Start out with #CS disabled (HIGH).
digitalWrite(A0,LOW);
digitalWrite(A1,LOW);
digitalWrite(A2,LOW);
digitalWrite(A3,LOW);
digitalWrite(A4,LOW);
digitalWrite(A5,LOW);

Serial.begin(115200); // Serial port output speed to PC
}

void loop() {
uint32_t addr = 0; // Initialize address at 000000000.
delay(1000); // Wait 1000 millisecond for everything to stabilize
Serial.println(""); // Print a carriage return to screen
while (addr < 512) { // Maximum address set (512 byte max) digitalWrite(10,bitRead(addr,8)); // Set A8 digitalWrite(9,bitRead(addr,7)); // Set A7 digitalWrite(8,bitRead(addr,6)); // Set A6 digitalWrite(7,bitRead(addr,5)); // Set A5 digitalWrite(6,bitRead(addr,4)); // Set A4 digitalWrite(5,bitRead(addr,3)); // Set A3 digitalWrite(4,bitRead(addr,2)); // Set A2 digitalWrite(3,bitRead(addr,1)); // Set A1 digitalWrite(2,bitRead(addr,0)); // Set A0 Serial.print(digitalRead(10)); // Print A8 to screen Serial.print(digitalRead(9)); // Print A7 to screen Serial.print(digitalRead(8)); // Print A6 to screen Serial.print(digitalRead(7)); // Print A5 to screen Serial.print(digitalRead(6)); // Print A4 to screen Serial.print(digitalRead(5)); // Print A3 to screen Serial.print(digitalRead(4)); // Print A2 to screen Serial.print(digitalRead(3)); // Print A1 to screen Serial.print(digitalRead(2)); // Print A0 to screen Serial.print(" "); // Print a space digitalWrite(13,LOW); // Enable chip select delay(100); // Wait 100 ms for the line to settle Serial.print(digitalRead(A5)); // Read state of D7 and print to screen Serial.print(digitalRead(A4)); // Read state of D6 and print to screen Serial.print(digitalRead(A3)); // Read state of D5 and print to screen Serial.print(digitalRead(A2)); // Read state of D4 and print to screen Serial.print(digitalRead(A1)); // Read state of D3 and print to screen Serial.print(digitalRead(A0)); // Read state of D2 and print to screen Serial.print(digitalRead(12)); // Read state of D1 and print to screen Serial.print(digitalRead(11)); // Read state of D0 and print to screen Serial.println(""); // Print carriage return to screen digitalWrite(13,HIGH); // Disable chip select addr++; // Move on to next address } // Loop to beginning of "while" statement digitalWrite(13,HIGH); // Once the while loop has finished, disable chip select while (1) { // Infinite loop (halt) } }

Which resulted in the following output:
Lanier PROM boot code

Which is good, as it begins with a few sane instructions. I have another set of eyeballs on it right now, someone who knows 8080 assembly better than I.

Lanier Diaries, Part XIII

Started tracing out two likely looking address decoders (last post).
From there, I traced back up from the PROM chip this morning.

prom lines

Slowly getting places. The idea being to be able to remove the PROM chip that the system boots from, stick in its place a debug board that can be hooked up to a PC, to feed instructions and diagnostics code from.

Who knows, might be able to get this to run CP/M relatively well.

Making a serial interface for it would be most excellent.

Lanier Diaries, Part XI

Had a bit of a poke about and started looking at the circuitry that drives the video output.

Diagram

Inverter is driven from U5, a 7410, 3x triple-input NAND gate. Managed to clip the scope to each pin to see what it was doing. All three inputs have to be on (+5v) for the screen to draw.

Pin 9. A snapshot taken in storage mode. We have the telltale signature of video data.
pin 9

Pin 10. Sat flatline at 0v.
Pin 10

Pin 11. Looks like vertical retrace blanking.
Pin 11

So, we have valid, sane looking signal on two of the 3 pins.. let’s drive that flatline high and enable the throughput.
Soldered a wire to the pin:
Pin 10 override

Hooked it all back up, powered it up and stuck the other end of the wire in the +5v rail. Leaned round to the front to take a look…
Trash

Screen full of trash! Whatever’s in the video RAM at the time it was turned on. Hitting reset did nothing to the pattern.
Nicely defined characters, so the character ROM’s still good. Contrast on the screen needs adjustment.
closeup of trash

We are making progress. The video card in that case, is mostly alive.. the CPU isn’t giving it a clear instruction and it’s not initializing. Might just be bad RAM or a bad feedback somewheres.

Further investigation to follow. Stoked 🙂