Monthly Archives: April 2015

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:


// 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(13,HIGH); // Start out with #CS disabled (HIGH).

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.


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…

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 🙂

Lanier Diaries, Part X

Things have been going in fits and starts. I’ve had some very helpful direction from a chap on the Vintage Computer Forum, which has led to a bit more troubleshooting.

Replaced some more capacitors that were bad.


That got pretty much everything stable on the power supply. I cleaned up the main power connector pins and plug, that got the voltages to the boards stable also. Got the voltages set up to within 2% so that’s working properly.

Started troubleshooting to see if things were alive. Pulled the keyboard off and vacuumed out underneath it.

keyboard off

Took a look at the keys, put a meter to a few of them and got funny results.

underside of kbd

It’s a Micro Switch keyboard, manufactured by Honeywell. The reason for the odd readings is that the switches are operated by the Hall effect, magnetic sensors within the switches, with no moving parts or contacts other than the switch plunger itself.


Had a poke about on the board, and the big controller chip appears to be alive- the keyboard seems to be a discrete device, and thoughts are it’s an RS232 style ASCII-encoded device. Makes sense to be.

Scope on the keyboard

Pressing keys makes various codes on the pins of the controller chip appear:

keyboard traces

Had a better look at the RAM and found the correct pinout for the chips. Looked at the Q (output) line. There’s definitely something happening (the camera on my phone appears to be dying):

Qout on CPU RAM

After this, attention turned to the monitor and video card, as it’s not really doing a whole lot.
The suggestion was to try and drive one of the video RAM lines high or low to see if it caused the generation of junk on the screen- this would cause the request for a lot of empty “space” characters to be drawn normally.. driving the line high or low would force different character codes and hopefully fill the screen with trash.
Drove the output high from Vcc (+5v).

Qout high

Result? Nada:


Okay, so we can try driving the line low instead:

Qout low

Result? The same neat(ish) raster.

more raster

So, with raster, at least the V-sync and H-sync are operational. Poked about, got a nice happy V-sync:


The input to the monitor, looking at the board from the back, left to right has the following inputs:

Ground | V-sync , Intensity , n/c , H-sync , n/c , Brightness COM , Brightness , Brightness inverted

Took a wire and put it from 5V to the brightness input that makes the dot on the screen bright. Up until now I did not know if the monitor was actually working- that is, if it was fed a signal, would it display said signal on the screen?

brightness force

Yes, it does.. and because it’s connected to the circuit board still, there’s a ghostly image on the screen also.

ghostly image

Traced back from the pins to the chip (7406, buffer inverter) and poked with the scope to see if there was anything on the input. Nothing much, just a high signal (expected), so grounded the input pin.

Got this on the screen:


Lots of squares! Very poor contrast (to be expected, due to the grounding of the pin), but I need to see if it’s actually coming from further back or if the chip, loaded down is making the image poor.

Junk on the screen is better than a blank screen.. it’s signs of life, and just means there’s troubleshooting ahead. It’s something to start from, at least!