PDA

View Full Version : Lanier Model 103 "No Problem" word processor



PhilipA
February 13th, 2015, 06:37 AM
Uncovered this in the back of the warehouse here at work, long since written off.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150112_121944.jpg?m=1421086838

It's a 1978 Lanier (AES Montreal rebranded) Model 103 "No Problem" word processor.

Pulled the fiberglass top covers off and had a bit of a look after a brief stint with the vacuum cleaner.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150112_112957.jpg?m=1421086845

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150112_113017.jpg?m=1421086856

It's an 8080 based machine. Unfortunately there are no discs with it, and I've been informed that it's CP/M based on hard-sectored discs (16 sector apparently), so I'm on the hunt for software.

A rapid "action" shot showed that there was at least some life upon powering up with a Variac. Got HT and something resembling a raster:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150113_170325.jpg?m=1421190297

Pulled the video logic card out.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150113_171619.jpg?m=1421191985

The ceramic capacitors appear to have been dipped in something green at the factory at the very top, and something had gotten in (I'm thinking an insect) and had eaten the top off every single one:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150113_171418.jpg?m=1421191968

Replaced them with modern equivalents, and did the tantalums on the board at the same time.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150115_172607.jpg?m=1421364392

Cleaned up a few contacts and that got the raster a bit better but it was still very dim when pushed to overdrive:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150115_173931.jpg?m=1421365410

Took a looksee, and there are three parts to the VDU, the tube, the power supply and the output boards, mounted here.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150116_140431.jpg?m=1421445310

With a few photos taken and a bit of work undoing wires, the module comes out.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150116_155429.jpg?m=1421445317

Everything looked in fairly good condition, but ordered replacements nevertheless as a few of the electrolytics tested bad.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150119_205847.jpg?m=1421766869

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150119_205829.jpg?m=1421767486

All rebuilt with new electrolytic and film caps:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150122_174410.jpg?m=1421970382

Net result, superbly bright, stable raster.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150125_095015.jpg?m=1422202891


--Phil

PhilipA
February 13th, 2015, 06:37 AM
Still no life from the rest of the system so I pulled the power supply out. Again, modular:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150127_175838.jpg?m=1422403215

Took a look, and a few of the 2N2222A's have tin whiskers:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150127_204915.jpg?m=1422413468

Despite that it seemed to be working ok, with a load on the -12v rail:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150128_202042.jpg?m=1422499383

The 5V rail was acting squirrelly though, and wouldn't stabilize. I couldn't adjust it properly also, so reading up pointed at the crowbar thyristor:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150129_232905.jpg?m=1422595777

Removing it from the circuit didn't make much difference, so ordered a new main filter capacitor and a replacement crowbar thyristor. Also changed out the 2N2222A in the circuit and substituted the voltage regulator chip.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150203_120501.jpg?m=1422986797

Same problems.

Spent an evening instead figuring out the circuit:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150131_214000.jpg?m=1422762058

Started again working on it and began testing and replacing resistors.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150201_020845-01.jpg?m=1422886696

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150201_020858-01.jpg?m=1422886703

Saw that the sawtooth that's generated from the 555 circuit was being fed to the "DRIVE" pin of the main chopper transistor, but once the voltage came up it was being bucked to a flatline:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150201_114126.jpg?m=1422886710


At the same time I started troubleshooting again and was greeted by a bright flash and a puff of smoke. Concerned, I began to dig about.. then this fell out:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150203_180358.jpg?m=1423008281

Leg off a diode I replaced, shorted out on the power switch connector. That ended a late night working on things, tired.

Did a bit more work on it and substituted the main chopper transistor out for another on the board.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150203_185420.jpg?m=1423011385

Lo and behold, a stable 5.00 volts.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150203_185536.jpg?m=1423011403

Currently waiting on a couple of spares to arrive, shall build that up, get it set and then see if the thing will even try to boot.


--Phil

Chuckster_in_Jax
February 13th, 2015, 06:43 AM
Nice computer. Great documentation.
Good luck finding the software for it. I'm sure someone, somewhere, has it.

PhilipA
February 13th, 2015, 06:58 AM
I hope so. If not, just getting it to run CP/M would be kinda fun, but I do also have a Qume daisy-wheel printer for it, so as a word processor it would still be good (well, as good as can be expected).

Shame the disks have vanished, we did have a look in the storage vault and asked a few people who might have remembered it but time has washed away any trace of them.


--Phil

Marty
February 13th, 2015, 07:20 AM
Hi All;
PhilipA, Congratulations on what You have done so Far..
This is the First that I have seen on this posting..
It would be nice to see it Running CPM again..

THANK YOU Marty

JDallas
February 13th, 2015, 07:54 AM
Great progress!

The Lanier Model 103 *may* be designed to read a system disk before it would do anything. There is no classic Eprom/Rom on the board but it does use tiny pairs of Intel 4 bit proms for something; boot loader likely because it doesn't have enough storage to operate out of rom only.

"AES Data" in Canada designed and sold them in some market. Lanier sold them in other markets. Perhaps someone in Canada would know more about AES and these designs.

PhilipA
February 13th, 2015, 09:11 AM
Not quite, the power supply is still missing the -12 and +12 supply because I robbed Peter to pay Paul; I'm waiting on a chopper transistor to arrive.

Once I have all the voltages operational I can power it up and see if I get any signs of digital life.

--Phil

Chuck(G)
February 13th, 2015, 10:04 AM
I believe that these were also marketed with the AES "Superplus" brand and at least one other branding in Europe. The floppy controller is the usual AES M2FM, if memory serves, using a USRT to perform serializing, so the data bits are organized "wrong way round" from traditional FDC ordering. I've got a very rare 8" floppy from its predecessor--it took me forever to work the coding out.

You might want to ask Bill Degman (on this forum) about the one he played with a few years ago. These were not rare at all--they were quite popular.

PhilipA
February 13th, 2015, 10:43 AM
I'd have thought they'd keep to a known quantity- looks like the engineering was thought out well.. I'm guessing the software follows suit. These probably use a similar, if not the same storage layout at a guess.

I think the popularity (more than one person has said this) might be the saving grace- it might be possible to find the correct software.

--Phil


I believe that these were also marketed with the AES "Superplus" brand and at least one other branding in Europe. The floppy controller is the usual AES M2FM, if memory serves, using a USRT to perform serializing, so the data bits are organized "wrong way round" from traditional FDC ordering. I've got a very rare 8" floppy from its predecessor--it took me forever to work the coding out.

You might want to ask Bill Degman (on this forum) about the one he played with a few years ago. These were not rare at all--they were quite popular.

PhilipA
March 4th, 2015, 10:28 AM
After getting nowhere with LittleDiode in the UK, I found a listing for some PIC645 choppers on eBay, which will do the job. Bought two, headed this way from Indiana and should be here Monday.

That should get all the rails up to correct voltages and from there I'll be able to see if this thing attempts to boot.

--Phil

PhilipA
March 9th, 2015, 12:29 PM
Same day I buy some transistors elsewhere, I get a reply from LittleDiode, he got the orders sorted out with an apology and shipped out the two I'd bought a month earlier.

The second set I ordered last week arrived today. I'll see about getting one put in tonight and see if the power supply comes up with all voltages present.


--Phil

PhilipA
March 10th, 2015, 12:09 AM
Replaced, voltages on the bench (disconnected) all good.

Plugged it in, and:

http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150309_173222.jpg?m=1425941278
I have a raster. It's a bit squashed, but I did screw about with the adjustments. Pressing reset makes it expand out then come back to that.

Not much else happens, though one potential sign of life.. Pressing caps lock makes the light come on. Doesn't go off again though..

Need to recheck voltages, ran out of time earlier so unplugged and put the case back on.

More to follow :)

Phil

PhilipA
March 10th, 2015, 01:05 PM
Checked things over lunch today. Voltages were a little off.

5V was 4.7
+12 was 11.6
-12 was -11.7

Adjusted them all and they're now spot-on to a tenth of a volt.

Also found the trimpot that adjusts the height of the raster, so that's set better now.

So, I now have a good base to begin from. Next up, going to see if the clocks are running on the CPU board. Once I'm done with work today I'll break out the oscilloscope and start checking things on the chips that I have documentation for, to see if there's signs of life.

--Phil

Chuck(G)
March 10th, 2015, 03:02 PM
All within +/- 10%, so you're good even without the adjustment.

Silly question, Phil. Are you currently testing with a scrap floppy inserted, just to see if the thing attempts to boot?

PhilipA
March 10th, 2015, 06:09 PM
Within limits but could be better. I'd adjusted the supply with no load so it was a bit low all round.

Not a silly question- I don't have any hard-sector discs. I had tried putting a floppy in the lower drive and all it did was spin.

Phil

PhilipA
March 10th, 2015, 06:17 PM
I set up earlier with the intention of checking for signs of life.

http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150310_163652.jpg?m=1426024917

Probing the RAM saw a strobe:

http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150310_164316.jpg?m=1426024922

Poking at the bus on the backplane liberated some data looking traces:

http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150310_164902.jpg?m=1426024929

Which looked promising. At that point, it threw its toys out of the pram and put both drive lights on and the lightning bolt and question-mark symbol LED, the raster went to how it was before and the entire thing became unresponsive.

http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150310_165324.jpg?m=1426025206

More troubleshooting tomorrow, back to voltages.

Phil

PhilipA
March 11th, 2015, 08:52 AM
Lost the +5v rail again!

What the...

Agh. I have a spare chopper transistor, shall change it out.

--Phil

PhilipA
March 11th, 2015, 01:53 PM
Replaced the chopper transistor. Powered up, got about 0.95V and it won't adjust.

Crowbar getting warm and chopper transistor getting hot.

Powered it down, investigation to follow.

--Phil

PhilipA
March 11th, 2015, 05:32 PM
Been a long day.. just got to thinking about it. I had to adjust the voltages up- I should try it under load and see what it does.

Phil

vwestlife
March 11th, 2015, 05:38 PM
I bet that huge transformer under the CRT is as heavy as it looks! :eek:

PhilipA
March 12th, 2015, 03:56 AM
Yes, your imagination is probably pretty close to the mark.

The power supply alone weighs about twenty pounds.

With everything inside, it takes two people to lift this machine and move it about safely.

Phil

PhilipA
March 13th, 2015, 08:12 AM
Hooked it all up and the 5V rail operates at about 2.2V under load so something's causing the crowbar circuit to kick in. I'm going to start by looking at the Zener that controls it.

--Phil

vwestlife
March 13th, 2015, 09:36 AM
Hooked it all up and the 5V rail operates at about 2.2V under load so something's causing the crowbar circuit to kick in. I'm going to start by looking at the Zener that controls it.

Maybe you could just retrofit a modern switching power supply, instead of spending your time diagnosing the cranky old linear PS?

g4ugm
March 13th, 2015, 09:38 AM
Linear PSUs are not usually much of a problem. More likely something shorted...

PhilipA
March 13th, 2015, 09:42 AM
Yeah, it's a beefy supply. I could power up with +12, +5, -12 from a regular supply, but this one also puts out +15 and -15.

It's been stored up for ages, so pushing it back into service will undoubtedly show up a few faults and troubles initially, especially in older silicon and germanium.

It's slow-going because it's just being worked on in spare time. Also allows for the frustration to be spread out, which is a good thing; I can walk away from it for a week and cool off, then go back to it whilst not so annoyed it broke again.

--Phil

PhilipA
March 13th, 2015, 11:22 AM
ok, it's not the zener that controls the crowbar.

Got something else gone bad somewhere. Got a couple possible culprits, going to work on that one.

--Phil

PhilipA
March 19th, 2015, 06:46 PM
Frustratingly, the 5v line isn't regulating. It just increases in voltage until the crowbar kicks in. Replaced an electrolytic across the rail and the NPN that runs the chopper signal to the voltage regulator chip.

No joy

Going to carry on, having changed the regulator chip and pulled the main diode and filter cap.

The rest of the board doesn't come up until the voltage trips out.




Phil

PhilipA
March 20th, 2015, 07:49 AM
Having a thought on this overnight

There are 4 choppers, independently controlling either a +27 or -27V supply, three are positive rail supplies, for +5, +12 and +15V

The other is -15V with a separate regulator that bleeds off the -15 supply to create -12.

+15 and -15 are only for the printer.

The +12 and -12 rails have to come up first, the +5 rail chopper is padded with a 100 Ohm resistance, presumably to cause it to come up after the +12 and -12 rails.

However, what's happening is the +5 is wide open (as if the chopper were short) and the clock doesn't come up to provide the chopper signal until the +5 has tripped out on the crowbar. I need to check see if the chopper is being held (or pulled) open by a false signal from somewhere because I don't know why it's rising up so quickly before the other circuits become active- the others don't come on until the clock starts to operate.

The more I think about it the more it makes sense, but the less it does because I can't see why the signal should be operational until the clock becomes active.

Result- the +5 comes on, rises to about 5.8V then kicks out, the rest of the board becomes active and the +5 chopper and crowbar get really rather warm.

I'm thinking this is a problem the board's had for a while...



--Phil

PhilipA
March 30th, 2015, 07:54 AM
Replaced a few of the tin-can TO-18 2N2222A transistors as a number had tin whiskers present on the exterior of the cans. Changed a couple of the orange tantalum capacitors as two were showing cracks.

Had a poke about through the circuit and saw that the gate of the chopper transistor assembly was not being modulated by the clock signal.

Dave, you were right, something had gone short- one of the brand new (old stock) transistors.

Replaced that and bingo:

http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150329_174115.jpg?m=1427668947


Found another bad transistor that was causing the clock to load down and run too slowly, making the assemblage whine. Now it's good, though there's a bit much DC ripple on two of the rails (+12 and +15) so I'm in for a couple new main filter caps I think.

--Phil

NeXT
March 30th, 2015, 09:00 AM
I'd load the rails down and run it out of the machine for a few hours or even a day to see if anything else fails, especially if you're running into NOS parts trying to give you the slip.

PhilipA
March 30th, 2015, 10:27 AM
I think I might, I have a few light bulbs I can use for the task.

I've ordered the other filter capacitors, as the ripple is about 0.25V on the +12 and +15 rails, as mentioned. I'm going to wait until those come in (should be next week) before benching it.

--Phil

PhilipA
April 2nd, 2015, 05:30 AM
Capacitors still en route, but a little testing began last night.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150401_201430.jpg?m=1427937387

A suitable set of loads, drawing about 200mA on each rail. Makes for good mood lighting.

--Phil

PhilipA
April 3rd, 2015, 09:47 PM
http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150403_124858.jpg?m=1428083374

Slightly blurry picture but those caps have seen better days. Replacements have seen the ripple on the appropriate lines quenched; it would seem it needs a few more now after running it a few hours. Typical.

At $14 a pop, it'll have to wait a little while.

Phil

PhilipA
April 6th, 2015, 09:22 AM
Positive things occurring. Slightly.

Powering the thing up now liberates slightly less than it did before, however, the CAPS LOCK light comes on (doesn't go off again though) if the button is pressed.

Putting a regular soft-sectored floppy disk in causes most of the data/address lines etc on the 8080 to flicker in a repeating -_-_-_-_-_-_- pattern

It doesn't CLUNK and pull the heads in any more though (mind you, I did clean the floppy drives), and the lights don't come on.

Nothing on the screen either.

However, it's back up and into a place whereby I can start poking around to check see what's happening. Need to figure out what direction to go in.

--Phil

PhilipA
April 6th, 2015, 11:07 AM
I'll pull the keyboard off and check see with it all unhooked that the keys are stuck etc.

The display is just turned up to full intensity, so the raster is visible. That way at least I know it's on and it's actually giving vertical timing.

It's the wrong kind of floppy, but it does have data on (random disk that I was using with my TRS-80) so it has no timing hole in the right place, so on, so forth. But, it's making it from the IO board, across the bus to the CPU.

--Phil

PhilipA
April 6th, 2015, 11:14 AM
Removed keyboard, cleaned detritus out from chassis.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150406_140301.jpg?m=1428347313

Took a look at the board, it appears to be a fairly standard keyboard, manufactured by Honeywell.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150406_140318.jpg?m=1428347328

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150406_140407.jpg?m=1428347338

Tried probing the key-switches with my meter, I'm not sure if these are capacitive type ones or what because the meter doesn't show any difference in ohms across the pins when the keys are pressed.

However, for giggles, I decided to power it up with the keyboard disconnected. Joy! Raster comes up, vertical sync comes in, them BEEEEEEEEEEEEEEEEE from the loudspeaker. Pressing reset makes it go quiet, then come back once the raster stabilizes.

It's partly alive, it knows the keyboard isn't there :)

--Phil

PhilipA
April 6th, 2015, 11:20 AM
It would appear that they are Hall effect switches.

http://deskthority.net/wiki/Honeywell_Hall_Effect

That'll be why they have odd continuity characteristics.

--Phil

PhilipA
April 6th, 2015, 12:02 PM
There are a number of chips on the keyboard, so I'm going to hazard a guess it'll be some form of decode and pass interface.

The beep would also appear to have been there all the time- the loudspeaker plug wasn't fully pushed home, and the thing fell off the pins just earlier. I replaced the keyboard, and the constant beep is still present.

Putting a disc in either drive causes the beep to become staccato, beep beep beep beep.

CAPS LOCK LED appears to be driven by the keyboard circuitry.

--Phil

PhilipA
April 8th, 2015, 07:07 AM
I've not had much of a chance to do anything in terms of diagnostics on the keyboard- I can try have a poke about with it powered up to see if there's anything resembling data transfer with it in operation, keys being pressed.

I'm thinking possibly it's kinda mostly sort of doing things but the video output is not functioning.

I was going to have a poke about on the video lines- it seems to be a fairly standard interface to the Motorola circuitry so one of the lines should be brightness- applying a signal to that line should result in patterns or noise on the screen. That would show the video circuitry is responsive to a brightness signal and should be able to draw on the screen. Right now that's an unknown. It would appear that the screen is mostly working though.

Disconnecting the video signal from it and power it up leads to a very bright, unstabilized raster. Plugging it in provides a raster that's uniform and stable. I shall poke at it and see what the sync looks like- it would seem to be issuing a sync and refresh signal so I'd say that section of the video card is operational- refresh, count 80, refresh..

--Phil

PhilipA
April 8th, 2015, 09:41 AM
Hm, good idea. The monitor assembly does have a part number, I'll go look at that.

Good idea on the video DRAM. I've pulled up the datasheet.. should be able to hold data in high and see if I get an output. Then the same with data out if not. Then trace that forward to see what puts out to the monitor.

Thanks

--Phil

EDIT: The monitor is an M4000-601, according to the label.

PhilipA
April 8th, 2015, 07:09 PM
Holding the data high on the video dram does nothing other than stop the computer from beeping.

Didn't determine which is the brightness line to the monitor.

Ram on the CPU board has data in and data out with random data that I can capture.

Doesn't appear to be much going on at the keyboard connector but the largest chip on the board is operating because I can get a digital output that changes i/o state with different key presses.

Checked all the voltages actually on the boards after cleaning the power plug.
+4.96
+11.94
-5.01
-12.03

All well within limits and stable.

Phil

PhilipA
April 9th, 2015, 05:56 AM
I'll try removing one of the video DRAM chips and try that, see if I liberate any trash onto the screen.

If not, I'll try draw it out and trace back (forwards?) towards the screen output.

--Phil

PhilipA
April 9th, 2015, 10:08 AM
Does the solder side schematic show what the connector pads' function are?

I tried removing a DRAM chip (picked an arbitrary one).
Vcc (+5v) to Qout to bring the output stuck "high"
http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150409_125434.jpg?m=1428602477
Result:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150409_125356.jpg?m=1428602470
Solid tone from loudspeaker. Dialing brightness dial yielded nothing on screen.

Tried putting Qout to ground:
http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150409_125455.jpg?m=1428602492

Result:
http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150409_125540.jpg?m=1428602484

Same, constant tone, nothing on screen dialing brightness.

--Phil

PhilipA
April 9th, 2015, 10:11 AM
Also to note, now.. the floppy drive does not pull the head in on the lower drive. It used to, so something's working less than it used to.

--Phil

PhilipA
April 9th, 2015, 10:35 AM
Monitor plug is as follows:

Ground (notch) something something blank something blank brightness brightness brightness

I'll have to poke at the lines, but I think probably the something on its own is the output- I'll try drive it high with 5v and see what happens.


EDIT:

Ground (notch) h-sync no-response blank v-sync blank brightness brightness brightness

I'm presuming the no response pin is meant to be the output.. possibly something in the monitor is bad. Tried +5v and grounding it and nothing happens. Grounding the H and V sync causes the monitor to lose sync. (obviously).


-Phil

PhilipA
April 9th, 2015, 01:18 PM
Checked a couple lines- the H and V sync are healthy-
http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150409_154541.jpg?m=1428613911

Checked the other pins, came to the same conclusions as you did with the pins above (Thank you for looking that up, by the way, this seems to be the same monitor but with less capability, missing the StepScan input but there appears to be everything else, in the order described. It would appear to be a common connector across their range of monitors for this era).

However, I wasn't making good contact with pin 8! I ran a wire from the 5V on the back and hooked in on the board where the connector mates.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150409_160017.jpg?m=1428613920

Powered it up and BLAM, the screen's overdriven bright! (Need to adjust the contrast).

However, there's some screen burn but what looks like |'|'|'|'|'|'|'|'|'|'|'|'| on the screen.. possibly what's meant to be on the screen but the output stage just isn't managing to make it happen.. and back-feeding 5V might just be sinking into the device as it is sinking and then not just a little current. With the brightness turned all the way down:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150409_160926.jpg?m=1428613926

So, video board looks to have an issue between the RAM and the output, as you had suggested earlier.

--Phil

PhilipA
April 9th, 2015, 01:31 PM
Output for dot brightness comes from U8, a 7406, pin 10

--Phil

PhilipA
April 10th, 2015, 04:53 AM
U5 is a DM74LS10N yes.

U8 #11 -> U5 #8

U5 #9 -> U22 #8 (74LS00N)
U5 #10 -> U23 #10 (74LS08N)

I'm going to probe U8 #11 to see if there's anything coming in there.. if not, I'll ground it and see if the screen goes bright. That'll rule it out as a fault.

If I need to go any deeper on the board I'll have to figure something else out because it's buried in behind the other two cards and it can't go in a different slot. I might be able to get to some of the back of the board though (solder side).

--Phil

PhilipA
April 10th, 2015, 05:34 AM
U8 #11 sits high, doing nothing much.

Grounded the pin.

This was the result on the screen, very poor contrast (as you might imagine):

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150410_082748.jpg?m=1428672729

So I don't know if the inverter's the cause, or it's further back in the circuit. I can't easily get the oscilloscope probe back much further on the board.
I guess I can solder a flying lead to the pins in question and scope those. That would work. Slow, but it would work.

--Phil

PhilipA
April 10th, 2015, 08:34 AM
I can, in this instance, scope those three input pins.

If there's anything sane on them, it should be getting through if the logic is in agreement. If not, I can try driving two high and tapping the third to see if it generates a bright screen.

--Phil

PhilipA
April 10th, 2015, 11:43 AM
Got a little way through the schematic, worked from the output pin backwards. Got a couple chips deep from there.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150410_143816.jpg?m=1428694789

Bigger- (link)- http://www.oldbrokenjunk.com/gallery/var/albums/Lanier_103/20150410_143816.jpg?m=1428694788

--Phil

PhilipA
April 10th, 2015, 01:13 PM
Welp, we have progress, looking at U5 (triple NAND).

Scoped pin 9 on storage mode. Definitely looks like video data, changes every time I capture a screenful.
http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150410_154754.jpg?m=1428699449

Scoped pin 10. Flatline at zero. (Excuse the blur, it was in long-persistence storage mode).
http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150410_154948.jpg?m=1428699455

Scoped pin 11. Looks like vertical retrace blank. The curves on the traces are the probe I'm using.. it's seen better days and won't adjust any more.
http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150410_155112.jpg?m=1428699463

So, out of curiosity, I went ahead and soldered a wire to pin 10.
http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150410_160315.jpg?m=1428699817

Powered up, poked the wire into the +5v source on the back of the chassis... and leaned round to the front to take a look at the screen...
http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150410_160149.jpg?m=1428699823

Trash! We like trash! (Even if the same trash comes up upon hitting reset). Character ROM is working, vertical retrace blanking is in time.. overall a nice image, if the contrast isn't a little low.
http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150410_160217.jpg?m=1428699829

So.. it's alive, but the thing's not getting past initializing the board and turning the screen on.

Progress!


--Phil

PhilipA
April 10th, 2015, 01:34 PM
Yup, I'm quite happy that I've got a logic-stuck output on the screen. It's at least partly alive :)

Getting somewhere, and having trash on the screen is a nice improvement! (Well, depending on your point of view..)

--Phil

Edit: Looking at it, the implosion shield is cataract but not to the extent of impeding visibility of the screen, and the burn-in isn't so severe as to really generate problems. Good to know though. It would seem the two units are interchangeable however.
The bottom image, close-up of the characters is through the hazy part of the shield, on the area of the screen with the worst burn-in. It's far from noticeable once the screen is displaying an image.

PhilipA
April 11th, 2015, 03:53 PM
I'm inclined to agree; being as it did previously CLICK and engage the r/w head on the lower floppy drive, and now it doesn't- I'm thinking it was getting a little further than it did before.

Could be something as simple as bad RAM.

I'll check the backplane again, I've cleaned the contacts and put some DeOxIt on the lot- that made it considerably easier to seat and remove the cards.

The signals on the CPU board freak out when I put a random (admittedly soft-sector) disk in either drive. The beep from the speaker is interrupted on a regular basis, seems to coincide with the triggering of the sync hole. The signals I poked at randomly on the CPU board seem to be interrupted at the same time.

I'll have to try see where to start from and work back. Least with the video board I had a place to begin from!

--Phil

PhilipA
April 11th, 2015, 05:01 PM
I could certainly try that. I just don't have an EEPROM burner any more. I had one that connected to an Acorn microcomputer back in the UK- somewhat moot.

I can definitely rig something up though, I'll take a look more closely at that board Monday.

--Phil

Chuck(G)
April 11th, 2015, 05:32 PM
Is this the Lanier that uses hard-sector 8" floppies, 256-byte sectors backward MMFM? I deciphered a couple of those years back. Sorry, don't have any program disks, just data.

PhilipA
April 12th, 2015, 04:33 AM
I have a PC with both serial and parallel ports available. I rigged up a piece of hardware a while back that could program PIC chips, also. Used the serial port's RTS/CTS lines to program the thing.

Chuck: I think it probably takes the same format, just this one has 5.25" drives.

Phil

PhilipA
April 12th, 2015, 11:47 AM
It's Intel 8080, but same difference for now :)

I need to see, it might pay just to shuffle the RAM chips about for now and see if that liberates any more activity.

I'll see what I can put together. I have a nice big breadboard, can get some chip sockets that can be used to plug in.


--Phil

PhilipA
April 12th, 2015, 01:26 PM
Fair enough. I'll leave them where they are then.

I'd seen that the video RAM is the same series, but marked differently and in a CERDIP package. Higher speed stuff for video?

I should hopefully be able to start on it again tomorrow. If I clear some of the kitchen table, I think with the power supply and floppy drives removed it would be light enough to lift by myself safely. That'd give me an easier place to work on it.

Phil

PhilipA
April 12th, 2015, 02:19 PM
Looking at it, potentially the video RAM chip I had put the voltage to the input and output is on either the right or the left- I'm thinking the right possibly because it's all showing the same character in a tidy rectangle.

Phil

PhilipA
April 12th, 2015, 03:49 PM
As soon as I typed it, I thought about it. Been doing other things today.

That makes sense. Can certainly try to analyze what's what that way.

Also had a thought on the boot proms- I do have an Arduino board which could be used as memory and boot code provider.

Phil

PhilipA
April 14th, 2015, 10:03 AM
I've found a couple test clips here. Should work, though I don't know the widest they'll go. I'll have a look.

The video display was stable when I drove the display to enable.

Reading the site where the other guy had his Lanier- he states that it beeps until you feed it a disc, and does nothing until then. I think potentially this one is halfway there; still unsure why it no longer pulls the disc drive head in though.

Agree that a Z80/8080 test set would be a useful device. Also if it had the capability to individually test 4116 style RAM.

--Phil

PhilipA
April 14th, 2015, 10:58 AM
Agreed. I see there's some pull-up resistors on the video board, looks like the half-intensity background is triggered by that.

It's been a long time since I've dug into logic this deeply- when I did it last, it mostly focused on a bit of assembly and some basic troubleshooting. Really enjoyed it, but I'm having to change mental gear and try get back into the swing of it, beside everything else that's been happening here, family-wise.

EDIT: The chip clip is a 16-pin one and will fit neatly onto a RAM chip or otherwise single-width chip.

--Phil

PhilipA
April 14th, 2015, 01:14 PM
U23 (7442)
1 => U56 #15
2 => U7 # 5
3 => U13 #4
4 => U13 #5
5-7 & 9-11 are n/c
12 => Tied low to ground
13 => U13 #2 & U22 # 5
14 => 8080 #38 & U52 #16 & U24 #15 ***
15 => U6 #3

U24 (7442)
1 => U5 #5
2 => U5 #3
3-7 & 9-11 are n/c
12 => U63 #3 & U11 #4 & Edge connector 24
13 => U38 #10 & U15 #3 & U3 #9
14 => U13 #1
15 => U23 #14 ***

PhilipA
April 14th, 2015, 01:25 PM
So, the A B C on U23 are tied in to a few things, D held low. Outputs 0 thru 3 are used.

U24 had A B C and D tied in but only outputs 0 and 1 are actually connected.

Little confused as to why so few of the decode lines actually hook into anything.

I guess I need to dig the next layer down and see what the chips the outputs are hooked to and work forwards from there.

http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150414_161529.jpg?m=1429056591
http://oldbrokenjunk.com/gallery/var/albums/Lanier_103/20150414_161529.jpg?m=1429056590

Today's trace-out.


--Phil

PhilipA
April 15th, 2015, 07:37 AM
Probed out the board using the PROM as a starting point.

(Untidy, slightly inaccurate drawing removed).
http://www.oldbrokenjunk.com/gallery/var/albums/Lanier_103/20150415_103104.jpg?m=1429111920

Links back to yesterday's diagram of U23 #1, the enable. Does lead out nicely to 4 of the DRAM chips, as you had surmised.

ERROR on the diagram there.. marked U39 is actually U43 and the DRAMs are labeled wrong.

I'm going to re-draw it.

**Edit- New diagram further down the page.

--Phil

PhilipA
April 15th, 2015, 09:32 AM
Yeah, I was on the back of the board, made a note of that in the text edit. I went back and looked.. sure enough, I'd transposed the sides.

Tidied up that drawing, it's easier to see now:

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150415_113240.jpg?m=1429115628
http://www.oldbrokenjunk.com/gallery/var/albums/Lanier_103/20150415_113240.jpg?m=1429115626

--Phil

Al Kossow
April 15th, 2015, 10:49 AM
have you dumped all of the proms?

curious if anyone following the thread picked this up
http://www.ebay.com/itm/151611655338

PhilipA
April 15th, 2015, 11:03 AM
Al,

No, not yet. I don't have anything to dump it with.

I hadn't seen that one on eBay- bit out of my price range, shame as it's not a horrendously far distance away (8 hours each way from here). Looks to be a slightly different variant based upon the case- probably the only difference. I need to Retr0bright the keys on this, it looks nice without the keys being yellow!

Would be nice if someone on here has picked it up.. I need a copy of those disks!


--Phil

PhilipA
April 17th, 2015, 05:17 AM
Okay. I have a fair bit of work to do on it, but this weekend is filled with baking cakes with the kids and doing cake competition. Today is busy after work also, and my new boss is coming in to say hello today so probably not best to have my nose buried in a 9kV-exposed box not-technically-doing-my-job for today...

--Phil

PhilipA
April 17th, 2015, 06:40 AM
I've discovered the Lanier boards do have a lot of chip-hidden traces. That and traces that jump sides, branch, jump back again.. all the usual culprits.

I can possibly work on the pinouts, working from key points (8080, RAM enable and data-in/out lines) to try and build a full schematic up. I'll see how things go. Shame I don't have a bed of nails but multimeter and paper will have to do. At least my meter beeps.

--Phil

PhilipA
April 19th, 2015, 04:25 PM
Just in case, I've bought the CPU card's worth of 4116 RAM (18 chips). It's 150ns, the CPU card takes 300, the video card 350. As such, it'll be compatible with both.

--Phil

PhilipA
April 20th, 2015, 09:45 AM
If the photos aren't clear enough I can try take some more, I have a slightly better camera now. That or I could put them on the flatbed scanner and see how well that works.

--Phil

PhilipA
April 22nd, 2015, 06:11 AM
That works. Let me know if you need me to ohm out any traces.

--Phil

PhilipA
April 22nd, 2015, 03:14 PM
Slight change of repair today.

http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150422_172432.jpg?m=1429742339

Took the heat gun to the fiberglass on the front and bent it (mostly) back into shape.

Needs cleaning more and the keys do look horrible in yellow.

Another thing for another day.

Phil

PhilipA
April 22nd, 2015, 06:18 PM
Solder side on all three is facing the screen.

It would appear there is an "aux" slot and one for a modem (which from the Super No Problem, would appear to be a twin RS-232 interface).

I'll check which one's which tomorrow and the order they are in. The backplane is marked.

Edit: Solder side of the backplane we have the following:



| | | |
2 1 | 2 1 | 2 1 | 2 1 | 2 1
| | | |
s c | s c | s c | s c | s c (solder/component)
| | | |
100 99 | 100 99 | 100 99 | 100 99 | 100 99
-----------+-----------+-----------+-----------+-----------
Option | Video | I/O | CPU | Comm.


Phil

JDallas
April 23rd, 2015, 07:27 AM
Adding to your diagram... the backplane connector names from the solder-side photo.



+-----------+-----------+-----------+-----------+-----------+
| Option | Video | I/O | CPU | Comm. |
| J1 | J2 | J3 | J4 | J5 |
|Notch: @30+|Notch: @36+|Notch: None|Notch: @40+|Notch: @30+|
+-----------+-----------+-----------+-----------+-----------+
| | | | | |
| 2 1 | 2 1 | 2 1 | 2 1 | 2 1 |
| | | | | |
| s c | s c | s c | s c | s c | (solder/component)
| | | | | |
| 100 99 | 100 99 | 100 99 | 100 99 | 100 99 |
+-----------+-----------+-----------+-----------+-----------+



Tonight I'll add the connector pinout to the pin-list and maybe add a quick set for the discrete components. I might add the resistor pack pinouts too.

I'll email you attachments Friday or Saturday with:
1) Image: CPU Card Component-side Reference Designators with Corner Pin Numbers.
2) Image: CPU Card Solder-side Reference Designators with Corner Pin Numbers.
3) Text File: CPU Card Pin-List (for reference or quick lookup).
4) PDF File: CPU Card Pin-List color print of item 3.

Recommendation: Because ohming out the net connections of a printed circuit board is an exhaustive task, I'd recommend saving your time and patience until after the image net-list is taken as far as it can go. Because of hidden traces and hidden vias under chips, you'll have a lot to do in Phase 2. Best not to burn out early.

Usually I don't do a schematic palette of the chips until the net-list is complete, as its the first step of capturing the schematic from the list. But I think that a PDF of that schematic with parts only could be a useful document as you work with the CPU card diagnosing any problems with its bootup. I'll do that this weekend as it should be easy because I've already documented all the chip pinouts, names, and type in the spreadsheet lookup table.

By the way, the lookup table in the spreadsheet looks like:


Type Desc Pin-01 Pin-02 Pin-03 Pin-04 Pin-05
74'02a NOR 1Y 1A 1B 2Y 2A
74'02b 14 Pin o ' ' o '
74'04a INV 1A 1Y 2A 2Y 3A
74'04b 14 Pin o ' o '
74'08a AND 1A 1B 1Y 2A 2B
74'08b 14 Pin ' ' o ' '
74'124a VCO 2FC 1FC 1RNG 1CX1 1CX2
74'124b 16 Pin ' ' ' ' '

There are two lines for every chip; makes it easier to align the pin type with the pin name. The table width allows for 40pins and 100 unique components for now. It just has the chips from the CPU card and a few I copied into it from the Exidy Sorcerer project.

The CPU card chips sorted by pin count ("(S)" for socketed) then chip type (the Lookup Names):


U07 14p 74'02 Quadruple 2-input positive NOR gates.
U05 14p 74'04 Hex inverters.
U27 14p 74'04 Hex inverters.
U34 14p 74'04 Hex inverters.
U13 14p 74'08 Quadruple 2-input positive AND gates.
U19 14p 74'125 Quadruple bus buffers with 3-state outputs.
U22 14p 74'20 Dual 4-input positive NAND gates.
U02 14p 74'32 Quadruple 2-input positive OR gates.
U06 14p 74'32 Quadruple 2-input positive OR gates.
U48 14p 74'32 Quadruple 2-input positive OR gates.
U60 14p 74'32 Quadruple 2-input positive OR gates.
U14 14p 74'38 Quadruple 2-input positive NAND buffers with Open-Collector outputs.
U03 14p 74'74 Dual D-type positive-edge triggered flip-flops with preset and clear.
U04 14p 74'74 Dual D-type positive-edge triggered flip-flops with preset and clear.
U15 14p 74'74 Dual D-type positive-edge triggered flip-flops with preset and clear.
U11 14p DIP14 ResPak 220/330 ohms termination
U29 14p DIP14 NOT POPULATED
U62 16p 74'124 Dual voltage controlled oscillators.
U16 16p 74'366 Hex inverter bus drivers with 3-state output.
U23 16p 74'42 4-line BCD to 10-line decimal decoders.
U24 16p 74'42 4-line BCD to 10-line decimal decoders.
U01 16p DIP16 NOT POPULATED
U08 16p DIP16 NOT POPULATED
U09 16p DIP16 NOT POPULATED
U10 16p DIP16 ResPak 2.2K ohms
U12 16p DIP16 ResPak 2.2K ohms
U30 16p DIP16 Switch 8 Bit Toggle Switch
U31 16p DIP16 ResPak 2.2K ohms
U37 16p DIP16 Switch 8 Bit Toggle Switch
U35 16p(S) P8216 4-Bit parallel bidirectional bus driver.
U41 16p(S) P8216 4-Bit parallel bidirectional bus driver.
U46 16p(S) P8216 4-Bit parallel bidirectional bus driver.
U47 16p(S) P8216 4-Bit parallel bidirectional bus driver.
U54 16p(S) P8224 Clock generator and driver.
U17 16p(S) PD416 Dram 16Kx1-bit.
U18 16p(S) PD416 Dram 16Kx1-bit.
U25 16p(S) PD416 Dram 16Kx1-bit.
U26 16p(S) PD416 Dram 16Kx1-bit.
U32 16p(S) PD416 Dram 16Kx1-bit.
U33 16p(S) PD416 Dram 16Kx1-bit.
U39 16p(S) PD416 Dram 16Kx1-bit.
U40 16p(S) PD416 Dram 16Kx1-bit.
U44 16p(S) PD416 Dram 16Kx1-bit.
U45 16p(S) PD416 Dram 16Kx1-bit.
U50 16p(S) PD416 Dram 16Kx1-bit.
U51 16p(S) PD416 Dram 16Kx1-bit.
U57 16p(S) PD416 Dram 16Kx1-bit.
U58 16p(S) PD416 Dram 16Kx1-bit.
U64 16p(S) PD416 Dram 16Kx1-bit.
U65 16p(S) PD416 Dram 16Kx1-bit.
U55 20p 74'273 Octal D-type flip-flop with clear.
U38 20p 74'374 Octal D-type transparent latches and edge-triggered flip-flops.
U43 20p 74'374 Octal D-type transparent latches and edge-triggered flip-flops.
U52 20p 74'374 Octal D-type transparent latches and edge-triggered flip-flops.
U36 20p 81'95 Octal buffers with tri-state outputs.
U49 20p 81'95 Octal buffers with tri-state outputs.
U59 20p 81'95 Octal buffers with tri-state outputs.
U61 20p 81'95 Octal buffers with tri-state outputs.
U56 20p(S) TBP1842 512 x 8 Prom.
U21 24p P8212 8-bit output port and input port.
U20 24p(S) P8214 Priority interrupt control unit.
U63 28p(S) D3242 Memory interface integrated circuit.
U42 28p(S) P8228 System Controller and Bus Driver
U28 40p P8257 Programmable DMA controller.
U53 40p(S) P8080 CPU microprocessor.

This ordering made quick work of the spreadsheet generated pin-list. I did all the 14 pin chips first, the 16 etc.

For each pin count type, I made/modified one chip pattern block that required only the chip type and the reference designator be entered. It used that to build the rest of the fields and to extract pin names and pin types and notes from the lookup table.

I'd block copy that pattern to the bottom of the pin-list for each reference designator. Repeated types were easier done at the same time because only the reference designator needed to be changed; hence this ordering.

When done I just sorted the first column of the pin-list to restore it to U01-U65 order and converted the entire pin-list block to values-only so it didn't have to recalculate or re-lookup anything.

This end result for chips only:


Empty 16 Pin
DIP U01
U01-01
U01-02
U01-03
U01-04
U01-05
U01-06
U01-07
U01-08
U01-09
U01-10
U01-11
U01-12
U01-13
U01-14
U01-15
U01-16

74'32 14 Pin
OR U02
1A U02-01
1B U02-02
1Y U02-03 o
2A U02-04
2B U02-05
2Y U02-06 o
GND U02-07 g
3Y U02-08 o
3A U02-09
3B U02-10
4Y U02-11 o
4A U02-12
4B U02-13
VCC U02-14 p

etc etc etc...


PD416 16 Pin
16KDram U65
VBB U65-01 p
DIN U65-02
WRITE# U65-03
RAS# U65-04
A0 U65-05
A2 U65-06
A1 U65-07
VDD U65-08 p
VCC U65-09 p
A5 U65-10
A4 U65-11
A3 U65-12
A6 U65-13
DOUT U65-14 o
CAS# U65-15
GND U65-16 g

PhilipA
April 23rd, 2015, 09:27 AM
That email address is fine. Attachment max 8Mbytes.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/Boards/BUS/20150423_122330.jpg?m=1429809913

Bus connectors on this one do not have any blocking segments in any of the sockets. I'll run through the power and annotate the backplane solder-side image. Sorry that one's on its side.

--Phil

PhilipA
April 23rd, 2015, 09:46 AM
Pin connectors for power, top to bottom:

+5v
+5v
GND
n/c (though comes up at 1.85V when on, shall scope that to see if it's a clock signal or something)
GND
+12V
-12V

--Phil

PhilipA
April 23rd, 2015, 09:47 AM
The images for reference designators will be lower rez than the photos you supplied as its just for display when working on the board. I'll likely re-size it for 800x600 or 1024x768 screen size and reduce the color depth so they'll be small files. I'm guessing 1024x768 would be your pick for your nearby computer. If you have another preference, let me know.

I'm good with any size/resolution/color depth. The computer I'm using mostly has a 1920x1080 screen so is capable enough in that instance.

Thanks

-Phil

PhilipA
April 23rd, 2015, 10:15 AM
Looking at the site90 pictures, the cards notches match- CPU with a notch between 40 & 42, video between 36 & 38.

The comms and RAM expansion cards on the other one both have a notch between 30 & 32.

I'll lift the power supply out later on (I feel like I'm coming down with a cold again) and see if that center pin is connected to anything at all.


EDIT:
http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/Boards/BUS/20150423_132406.jpg?m=1429813528
The pin spacing is 1/8".

The center power pin has a trace on the board that goes to a resistor network and pin 4 of the NE555 but is missing the components to join it up, so can be disregarded as n/c on this board.
Edit-edit: Thoughts there that the output from the video card may be able to sync to the power supply? No clue, evidently they thought it not required.

--Phil

PhilipA
April 24th, 2015, 07:26 AM
I have an Arduino Uno, which is a 5V device, so nice for TTL.

It has 5 dedicated inputs and 13 bidirectional pins- that's enough for this chip to be driven directly. wrong, I just went read the manual

It has 18 bidirectional i/o pins that operate at TTL levels.

I'll start on building a hardware platform and getting a program written to read the PROM.

--Phil

EDIT: This would also be really very simple to have a reprogrammable boot code booting directly off the Arduino. I'm not sure how the 8080 would read the prom- put the address on the address lines then enable !CS to get the data out?

PhilipA
April 24th, 2015, 12:24 PM
With the Arduino, it can be programmed to wait for a state change on one pin (#CS) and then read the state of the address lines and present the appropriate byte at the data output pins.

Program can be stored in the thing's memory, of which it has 2kb available for program and variables.

If we are to go larger, I'd need to purchase one of the bigger ones with more RAM and i/o lines. That's not too much a problem, they're about $50. I've ordered some jumper wires with DuPont ends on them so they plug into the Arduino and my breadboard neatly.

--Phil

Edit: Grabbed the chip pin schematics, thanks.

PhilipA
April 25th, 2015, 04:39 AM
I'd have to experiment and see; the Arduino I have is clocked at 16MHz.
If not, there's a PIC32 based model that runs at 80MHz which has more memory, more i/o and is generally more capable for about $40, which is definitely an option. I was also thinking about programming flash memory and mounting it in a carrier to make it compatible with the pinout.

I'm going to see about extracting the boot code over the course of the week though.

Phil

PhilipA
April 25th, 2015, 12:33 PM
Dumped the PROM. I think this should be correct.

Address, Data



000000000 11001111
000000001 10110000
000000010 01000011
000000011 01100000
000000100 01111100
000000101 01111100
000000110 01111100
000000111 10110011
000001000 11001011
000001001 11111000
000001010 01010100
000001011 10100000
000001100 11010000
000001101 01000000
000001110 00010011
000001111 11001000
000010000 11001011
000010001 10110011
000010010 00011101
000010011 01111110
000010100 10000100
000010101 11111101
000010110 01101101
000010111 00010011
000011000 01100111
000011001 00001101
000011010 00000000
000011011 01100111
000011100 10000000
000011101 01111101
000011110 00000000
000011111 01000011
000100000 11011011
000100001 10110011
000100010 01111110
000100011 01000100
000100100 11101001
000100101 11001011
000100110 01111100
000100111 01100001
000101000 00000000
000101001 01111110
000101010 00000000
000101011 10110000
000101100 00000000
000101101 01111101
000101110 01011011
000101111 11110011
000110000 10100000
000110001 01100000
000110010 11010111
000110011 00000000
000110100 01111110
000110101 11011011
000110110 01100010
000110111 00110100
000111000 01101111
000111001 01111100
000111010 10100111
000111011 10100000
000111100 11010111
000111101 01101001
000111110 01111110
000111111 00000000
001000000 11000000
001000001 10110011
001000010 11000100
001000011 10000000
001000100 10000000
001000101 10111110
001000110 00111101
001000111 11101101
001001000 11001011
001001001 10000100
001001010 00001001
001001011 10000000
001001100 01100000
001001101 11010100
001001110 11101000
001001111 10000000
001010000 10110011
001010001 01011100
001010010 11100010
001010011 00110100
001010100 01010000
001010101 11001011
001010110 00011101
001010111 01010011
001011000 00000000
001011001 01111100
001011010 01111010
001011011 01001100
001011100 11111110
001011101 11000100
001011110 11001011
001011111 00000000
001100000 00000000
001100001 01111110
001100010 00000000
001100011 01100011
001100100 00111100
001100101 01111110
001100110 01101110
001100111 00010011
001101000 11100111
001101001 01011100
001101010 01111110
001101011 01111110
001101100 11101101
001101101 11010100
001101110 00000100
001101111 01000011
001110000 10010100
001110001 01111110
001110010 11010111
001110011 10010000
001110100 01010011
001110101 00011010
001110110 11101001
001110111 10100011
001111000 01101000
001111001 01111100
001111010 00001100
001111011 11001011
001111100 11101101
001111101 11101101
001111110 11100000
001111111 00000000
010000000 11101001
010000001 11110011
010000010 00000000
010000011 10110011
010000100 10110011
010000101 11001011
010000110 00001110
010000111 10000000
010001000 01111100
010001001 11100100
010001010 01111110
010001011 11010000
010001100 00101101
010001101 01100011
010001110 01101101
010001111 01000011
010010000 01111100
010010001 00000000
010010010 10101001
010010011 10111000
010010100 01111110
010010101 10101101
010010110 11100010
010010111 10001100
010011000 01010011
010011001 11001011
010011010 11101010
010011011 11001011
010011100 10000100
010011101 01001001
010011110 11111011
010011111 10000000
010100000 11111000
010100001 01000100
010100010 01000011
010100011 01111110
010100100 11101101
010100101 01011100
010100110 11001011
010100111 10100000
010101000 10011000
010101001 01001101
010101010 01000100
010101011 01001100
010101100 01100000
010101101 01001001
010101110 00000000
010101111 11000111
010110000 11000000
010110001 01011100
010110010 00111011
010110011 11000000
010110100 01111111
010110101 11101000
010110110 00100110
010110111 11000111
010111000 00001101
010111001 11001011
010111010 10010111
010111011 00001000
010111100 00010000
010111101 11101101
010111110 00101000
010111111 00000000
011000000 11110101
011000001 10000000
011000010 01011100
011000011 00100001
011000100 10010101
011000101 01000100
011000110 01000011
011000111 10100011
011001000 11000011
011001001 10000000
011001010 00111110
011001011 11100000
011001100 11000011
011001101 01001101
011001110 10101101
011001111 10010011
011010000 10000000
011010001 01111110
011010010 10011101
011010011 11000011
011010100 10100111
011010101 11001011
011010110 11101010
011010111 00000000
011011000 10111100
011011001 11001011
011011010 01101010
011011011 01111110
011011100 01010000
011011101 11000100
011011110 01001100
011011111 00000000
011100000 01111100
011100001 01010000
011100010 11011101
011100011 01010100
011100100 00011101
011100101 00001000
011100110 01001100
011100111 10000011
011101000 11011011
011101001 01111110
011101010 01000011
011101011 10101101
011101100 10110011
011101101 00011101
011101110 11000011
011101111 10000000
011110000 01111100
011110001 10000101
011110010 10011101
011110011 11110000
011110100 00000000
011110101 11000100
011110110 11111000
011110111 01001000
011111000 10101101
011111001 11001011
011111010 00000000
011111011 01111100
011111100 00101100
011111101 00010001
011111110 11100111
011111111 00000000
100000000 11001111
100000001 01000011
100000010 01100001
100000011 10001000
100000100 01100000
100000101 00000010
100000110 11111001
100000111 11100111
100001000 00100000
100001001 01011011
100001010 11011101
100001011 00010000
100001100 01010011
100001101 10110011
100001110 10000100
100001111 10100000
100010000 01101000
100010001 10110011
100010010 01001011
100010011 10010011
100010100 10111101
100010101 01001100
100010110 01111110
100010111 01100000
100011000 11000000
100011001 01111110
100011010 11000011
100011011 11111011
100011100 10100111
100011101 01000011
100011110 01100111
100011111 11100111
100100000 10000000
100100001 00000000
100100010 11101101
100100011 11001101
100100100 01001100
100100101 01000100
100100110 00010000
100100111 11000100
100101000 01111100
100101001 01001100
100101010 11100110
100101011 11101001
100101100 01100000
100101101 01000011
100101110 10001111
100101111 11000111
100110000 01100111
100110001 00000000
100110010 10110011
100110011 00000000
100110100 11000100
100110101 10100000
100110110 00101011
100110111 10000000
100111000 00110000
100111001 01000010
100111010 11010111
100111011 01100111
100111100 01111100
100111101 01011100
100111110 11001011
100111111 00000000
101000000 10001100
101000001 10010101
101000010 00101100
101000011 01100000
101000100 10110011
101000101 11001011
101000110 01001111
101000111 10000000
101001000 00100000
101001001 10011001
101001010 11110110
101001011 00100000
101001100 01001100
101001101 01011100
101001110 01011100
101001111 10000011
101010000 11100111
101010001 11101101
101010010 01010100
101010011 10000000
101010100 10000000
101010101 01101000
101010110 01111110
101010111 10111101
101011000 11100010
101011001 11011011
101011010 11000100
101011011 10101101
101011100 10110011
101011101 11000100
101011110 01101000
101011111 00000000
101100000 00000001
101100001 01111000
101100010 01011100
101100011 10000000
101100100 01001100
101100101 01101111
101100110 01110000
101100111 10000000
101101000 10000000
101101001 01001101
101101010 10101101
101101011 01011100
101101100 01111110
101101101 01011100
101101110 00101100
101101111 10010111
101110000 00000000
101110001 10000100
101110010 01000100
101110011 00110000
101110100 10010110
101110101 10000000
101110110 01011110
101110111 01111110
101111000 01001100
101111001 11011001
101111010 10000100
101111011 00101000
101111100 01111110
101111101 01000011
101111110 10110011
101111111 00000000
110000000 11001011
110000001 00000000
110000010 11101110
110000011 01100011
110000100 11100111
110000101 11000100
110000110 11000100
110000111 11000011
110001000 11000000
110001001 10000000
110001010 10111110
110001011 01110000
110001100 00000000
110001101 10000000
110001110 01111110
110001111 10111011
110010000 00100110
110010001 10001011
110010010 00000000
110010011 01000011
110010100 10110011
110010101 01111110
110010110 01011100
110010111 10111000
110011000 11101000
110011001 10101000
110011010 00000000
110011011 01101000
110011100 10111010
110011101 10000000
110011110 10101100
110011111 10010011
110100000 01001011
110100001 00001101
110100010 10101001
110100011 10110011
110100100 01111110
110100101 10101101
110100110 00100000
110100111 01000011
110101000 10110011
110101001 01111110
110101010 11011101
110101011 01101101
110101100 10001000
110101101 10000000
110101110 01101111
110101111 10111000
110110000 01000011
110110001 00011101
110110010 10000000
110110011 01100000
110110100 01010000
110110101 01011011
110110110 00000000
110110111 10010011
110111000 11001011
110111001 00010100
110111010 01100000
110111011 00000011
110111100 10000100
110111101 01111110
110111110 01111100
110111111 00000000
111000000 01111110
111000001 11000011
111000010 00111101
111000011 11000100
111000100 10000000
111000101 00111110
111000110 00000000
111000111 11101001
111001000 11101000
111001001 10010000
111001010 01111011
111001011 01010000
111001100 10111101
111001101 01111110
111001110 01111110
111001111 01111000
111010000 11011011
111010001 11110010
111010010 01111110
111010011 11011101
111010100 10000111
111010101 11101000
111010110 01111111
111010111 10000100
111011000 11110000
111011001 10001000
111011010 11000100
111011011 11011011
111011100 10000000
111011101 01100000
111011110 10101101
111011111 00000000
111100000 00110000
111100001 10101011
111100010 01111110
111100011 11001101
111100100 01111110
111100101 01100111
111100110 01011100
111100111 01111101
111101000 10100000
111101001 01010100
111101010 01001110
111101011 01111110
111101100 00111011
111101101 01111110
111101110 00101111
111101111 10111100
111110000 11010000
111110001 10000000
111110010 01111110
111110011 01000000
111110100 01111111
111110101 01100000
111110110 00001001
111110111 11000100
111111000 01111110
111111001 11000100
111111010 00000001
111111011 11100000
111111100 01101001
111111101 10000000
111111110 10000000
111111111 00000000


Made a very dirty program to do this.
Pushed all the Data lines HIGH. (Arduino has internal 2k2 pull-up resistors that can be activated).
Pulled the ADDRESS lines LOW.
Pushed !CS HIGH.

Wrote Address 00000000. Pulled !CS LOW. Read DATA lines. Pushed !CS HIGH. Wrote next address. Repeat until address 111111111. Halt.

--Phil

PhilipA
April 25th, 2015, 01:11 PM
in hex:



CF
B0
43
60
7C
7C
7C
B3
CB
F8
54
A0
D0
40
13
C8
CB
B3
1D
7E
84
FD
6D
13
67
0D
00
67
80
7D
00
43
DB
B3
7E
44
E9
CB
7C
61
00
7E
00
B0
00
7D
5B
F3
A0
60
D7
00
7E
DB
62
34
6F
7C
A7
A0
D7
69
7E
00
C0
B3
C4
80
80
BE
3D
ED
CB
84
09
80
60
D4
E8
80
B3
5C
E2
34
50
CB
1D
53
00
7C
7A
4C
FE
C4
CB
00
00
7E
00
63
3C
7E
6E
13
E7
5C
7E
7E
ED
D4
04
43
94
7E
D7
90
53
1A
E9
A3
68
7C
0C
CB
ED
ED
E0
00
E9
F3
00
B3
B3
CB
0E
80
7C
E4
7E
D0
2D
63
6D
43
7C
00
A9
B8
7E
AD
E2
8C
53
CB
EA
CB
84
49
FB
80
F8
44
43
7E
ED
5C
CB
A0
98
4D
44
4C
60
49
00
C7
C0
5C
3B
C0
7F
E8
26
C7
0D
CB
97
08
10
ED
28
00
F5
80
5C
21
95
44
43
A3
C3
80
3E
E0
C3
4D
AD
93
80
7E
9D
C3
A7
CB
EA
00
BC
CB
6A
7E
50
C4
4C
00
7C
50
DD
54
1D
08
4C
83
DB
7E
43
AD
B3
1D
C3
80
7C
85
9D
F0
00
C4
F8
48
AD
CB
00
7C
2C
11
E7
00
CF
43
61
88
60
02
F9
E7
20
5B
DD
10
53
B3
84
A0
68
B3
4B
93
BD
4C
7E
60
C0
7E
C3
FB
A7
43
67
E7
80
00
ED
CD
4C
44
10
C4
7C
4C
E6
E9
60
43
8F
C7
67
00
B3
00
C4
A0
2B
80
30
42
D7
67
7C
5C
CB
00
8C
95
2C
60
B3
CB
4F
80
20
99
F6
20
4C
5C
5C
83
E7
ED
54
80
80
68
7E
BD
E2
DB
C4
AD
B3
C4
68
00
01
78
5C
80
4C
6F
70
80
80
4D
AD
5C
7E
5C
2C
97
00
84
44
30
96
80
5E
7E
4C
D9
84
28
7E
43
B3
00
CB
00
EE
63
E7
C4
C4
C3
C0
80
BE
70
00
80
7E
BB
26
8B
00
43
B3
7E
5C
B8
E8
A8
00
68
BA
80
AC
93
4B
0D
A9
B3
7E
AD
20
43
B3
7E
DD
6D
88
80
6F
B8
43
1D
80
60
50
5B
00
93
CB
14
60
03
84
7E
7C
00
7E
C3
3D
C4
80
3E
00
E9
E8
90
7B
50
BD
7E
7E
78
DB
F2
7E
DD
87
E8
7F
84
F0
88
C4
DB
80
60
AD
00
30
AB
7E
CD
7E
67
5C
7D
A0
54
4E
7E
3B
7E
2F
BC
D0
80
7E
40
7F
60
09
C4
7E
C4
01
E0
69
80
80
00


If that's any help

--Phil

PhilipA
April 25th, 2015, 01:31 PM
Possible. I just started looking at it- possibly the data lines should not be held HIGH.

Let me go re-run it and check see, I'll re-check all the connections also. Just looking at it all logically. I might have screwed up and got LSB <-> MSB backward.

--Phil

PhilipA
April 25th, 2015, 01:52 PM
ignore this for now. trying again because it still gave nonsense

PhilipA
April 25th, 2015, 02:26 PM
I can run it slowly, however, I've added in a 10ms delay after the read and after it drops #CS, the same result each time with or without the delay.

To reiterate, I have the chip plugged as follows:

1 - A0
2 - A1
3 - A2
4 - A3
5 - A4
6 - D0
7 - D1
8 - D2
9 - D3
10 - GND
11 - D4
12 - D5
13 - D6
14 - D7
15 - #CS
16 - A5
17 - A6
18 - A7
19 - A8
20 - Vcc

--Phil

PhilipA
April 25th, 2015, 03:00 PM
Redone, repeatedly, I get this from the chip:



000000000 11110011
000000001 11110011
000000010 10010111
000000011 11010011
000000100 00000011
000000101 00110001
000000110 10101111
000000111 01111110
000001000 11011011
000001001 00000001
000001010 00011111
000001011 11010010
000001100 00000000
000001101 10000000
000001110 00111110
000001111 00001100
000010000 11010011
000010001 00010110
000010010 00111110
000010011 01100100
000010100 11001101
000010101 11100111
000010110 00000001
000010111 11011011
000011000 00000101
000011001 11100110
000011010 00000011
000011011 11000010
000011100 00101001
000011101 00000000
000011110 00111110
000011111 00001011
000100000 11010011
000100001 00000100
000100010 00111110
000100011 00000011
000100100 11010011
000100101 00000100
000100110 11000011
000100111 00010111
000101000 00000000
000101001 00111110
000101010 00011001
000101011 11001101
000101100 11100111
000101101 00000001
000101110 11011011
000101111 00000101
000110000 11100110
000110001 00000011
000110010 11001010
000110011 00010111
000110100 00000000
000110101 01000111
000110110 00111101
000110111 00001111
000111000 11110110
000111001 00001100
000111010 10110000
000111011 11010011
000111100 00010110
000111101 00110010
000111110 10110101
000111111 01111110
001000000 00111110
001000001 00000110
001000010 11001101
001000011 11100111
001000100 00000001
001000101 11001101
001000110 10101001
001000111 00000001
001001000 10010111
001001001 00110010
001001010 10110111
001001011 01111110
001001100 00111100
001001101 00110010
001001110 10111000
001001111 01111110
001010000 00100001
001010001 10111101
001010010 01111110
001010011 11001101
001010100 00001010
001010101 00000001
001010110 11100101
001010111 11100001
001011000 01111110
001011001 00100011
001011010 11111110
001011011 00001010
001011100 11001010
001011101 01101001
001011110 00000000
001011111 11111110
001100000 00001011
001100001 11001010
001100010 10110100
001100011 00000000
001100100 00000110
001100101 00110010
001100110 11000011
001100111 10111101
001101000 00000000
001101001 00000110
001101010 00000110
001101011 00010001
001101100 10110111
001101101 01111110
001101110 11001101
001101111 11011100
001110000 00000001
001110001 11100101
001110010 00100001
001110011 01011101
001110100 01111111
001110101 11001101
001110110 00001010
001110111 00000001
001111000 11101011
001111001 00111110
001111010 00001000
001111011 00100001
001111100 10110111
001111101 01111110
001111110 00110100
001111111 10010110
010000000 11000010
010000001 10000110
010000010 00000000
010000011 01110111
010000100 00100011
010000101 00110100
010000110 00111010
010000111 10111100
010001000 01111110
010001001 10110111
010001010 11000010
010001011 10010101
010001100 00000000
010001101 00111010
010001110 10111011
010001111 01111110
010010000 10111000
010010001 11010010
010010010 10010101
010010011 00000000
010010100 01000111
010010101 00101010
010010110 10111001
010010111 01111110
010011000 11101011
010011001 11001101
010011010 11011100
010011011 00000001
010011100 11101011
010011101 00100010
010011110 10111001
010011111 01111110
010100000 00101010
010100001 10111011
010100010 01111110
010100011 01111101
010100100 10010000
010100101 01101111
010100110 01111100
010100111 11011110
010101000 00000000
010101001 01100111
010101010 00100010
010101011 10111011
010101100 01111110
010101101 10110101
010101110 11000010
010101111 01110010
010110000 00000000
010110001 11000011
010110010 01010111
010110011 00000000
010110100 01011110
010110101 00100011
010110110 01010110
010110111 00100011
010111000 11100101
010111001 11101011
010111010 11101001
010111011 00000110
010111100 00110000
010111101 00100001
010111110 00000000
010111111 10000000
011000000 00111110
011000001 10011111
011000010 01110000
011000011 00100011
011000100 10111100
011000101 11110010
011000110 11000010
011000111 00000000
011001000 00111110
011001001 00001000
011001010 11010011
011001011 00000100
011001100 01110110
011001101 00001110
011001110 00110010
011001111 00111010
011010000 10110110
011010001 01111110
011010010 01000111
011010011 00111010
011010100 10111000
011010101 01111110
011010110 01010111
011010111 11111110
011011000 01000110
011011001 11010100
011011010 01100100
011011011 00000000
011011100 10010111
011011101 01111010
011011110 00011111
011011111 10010000
011100000 11001000
011100001 00100001
011100010 10110110
011100011 01111110
011100100 00010111
011100101 00111010
011100110 10110101
011100111 01111110
011101000 11011010
011101001 11110001
011101010 00000000
011101011 11110110
011101100 00100000
011101101 00110100
011101110 11000011
011101111 11110100
011110000 00000000
011110001 11100110
011110010 11011111
011110011 00110101
011110100 11010011
011110101 00010110
011110110 00110010
011110111 10110101
011111000 01111110
011111001 11010011
011111010 00010100
011111011 00111110
011111100 00000111
011111101 11001101
011111110 11100111
011111111 00000001
100000000 00001101
100000001 11000010
100000010 11001111
100000011 00000000
100000100 11001101
100000101 10101001
100000110 00000001
100000111 11000011
100001000 11001101
100001001 00000000
100001010 00100010
100001011 10110000
100001100 01111110
100001101 00011110
100001110 00001010
100001111 11010101
100010000 11001101
100010001 11001101
100010010 00000000
100010011 11010001
100010100 00111010
100010101 10110111
100010110 01111110
100010111 01001111
100011000 00000110
100011001 00000000
100011010 00111010
100011011 10111000
100011100 01111110
100011101 00100001
100011110 10100001
100011111 00000001
100100000 00011111
100100001 11011010
100100010 00100111
100100011 00000001
100100100 00100001
100100101 10011001
100100110 00000001
100100111 00001001
100101000 01111110
100101001 00110010
100101010 10110010
100101011 01111110
100101100 00111010
100101101 10110010
100101110 01111110
100101111 00101010
100110000 10110000
100110001 01111110
100110010 11010011
100110011 00010101
100110100 00111110
100110101 11011011
100110110 11010011
100110111 00010001
100111000 00111110
100111001 01000010
100111010 11010011
100111011 00101000
100111100 00111110
100111101 10011011
100111110 11010011
100111111 00100011
101000000 00111110
101000001 01000000
101000010 11010011
101000011 00100011
101000100 01111101
101000101 11010011
101000110 00100010
101000111 01111100
101001000 11010011
101001001 00100010
101001010 00111010
101001011 10110101
101001100 01111110
101001101 11110110
101001110 00010000
101001111 11100110
101010000 10111111
101010001 00110010
101010010 10110101
101010011 01111110
101010100 11010011
101010101 00010110
101010110 11010011
101010111 00010111
101011000 11011011
101011001 00000101
101011010 00010111
101011011 11011010
101011100 01011000
101011101 00000001
101011110 00100011
101011111 00000110
101100000 00000010
101100001 11001101
101100010 11000110
101100011 00000001
101100100 00101011
101100101 00111010
101100110 10110010
101100111 01111110
101101000 10111110
101101001 11000010
101101010 10010010
101101011 00000001
101101100 00101011
101101101 00111010
101101110 10111000
101101111 01111110
101110000 10111110
101110001 11000010
101110010 10010010
101110011 00000001
101110100 00100011
101110101 00100011
101110110 00100011
101110111 00000110
101111000 10010110
101111001 00111010
101111010 10110111
101111011 01111110
101111100 10110111
101111101 11000010
101111110 10001000
101111111 00000001
110000000 00000110
110000001 00010001
110000010 11001101
110000011 11000110
110000100 00000001
110000101 00000110
110000110 10000100
110000111 00100011
110001000 00100010
110001001 10110011
110001010 01111110
110001011 11001101
110001100 11000110
110001101 00000001
110001110 00101010
110001111 10110011
110010000 01111110
110010001 11001001
110010010 00011101
110010011 11000010
110010100 00101100
110010101 00000001
110010110 11000011
110010111 10111011
110011000 00000000
110011001 00000000
110011010 00000011
110011011 00000110
110011100 00001001
110011101 00001100
110011110 00001111
110011111 00000010
110100000 00000101
110100001 00001000
110100010 00001011
110100011 00001110
110100100 00000001
110100101 00000100
110100110 00000111
110100111 00001010
110101000 00001101
110101001 10010111
110101010 00110010
110101011 10110110
110101100 01111110
110101101 00111010
110101110 10110101
110101111 01111110
110110000 11100110
110110001 11011111
110110010 11010011
110110011 00010110
110110100 00110010
110110101 10110101
110110110 01111110
110110111 11011011
110111000 00000101
110111001 11100110
110111010 00010000
110111011 11000000
110111100 11010011
110111101 00010100
110111110 00111110
110111111 00000111
111000000 11001101
111000001 11100111
111000010 00000001
111000011 11000011
111000100 10110111
111000101 00000001
111000110 11000101
111000111 10010111
111001000 10000110
111001001 00100011
111001010 00000101
111001011 11000010
111001100 11001000
111001101 00000001
111001110 11000001
111001111 10111110
111010000 11001000
111010001 00000110
111010010 00110001
111010011 00011101
111010100 11001010
111010101 10111101
111010110 00000000
111010111 00100001
111011000 00101100
111011001 00000001
111011010 11100011
111011011 11001001
111011100 11000101
111011101 01111110
111011110 00010010
111011111 00100011
111100000 00010011
111100001 00000101
111100010 11000010
111100011 11011101
111100100 00000001
111100101 11000001
111100110 11001001
111100111 00011110
111101000 11001111
111101001 11100011
111101010 11100011
111101011 00011101
111101100 11000010
111101101 11101001
111101110 00000001
111101111 00111101
111110000 11000010
111110001 11100111
111110010 00000001
111110011 11001001
111110100 00000000
111110101 00000000
111110110 00000000
111110111 00000000
111111000 00000000
111111001 00000000
111111010 00000000
111111011 00000000
111111100 00000000
111111101 00000000
111111110 00000000
111111111 00000000


If I leave #CS HIGH and run the program, it returns all 0's so at least that part of it's working right

--Phil

PhilipA
April 25th, 2015, 03:25 PM
Here's the program. Very dirty and lazy but it does work. I've annotated it, it's very C# like in the way it's constructed.



#include <stdint.h>

// 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)); // Read back and print state of A8 to screen
Serial.print(digitalRead(9)); // Read back and print state of A7 to screen
Serial.print(digitalRead(8)); // Read back and print state of A6 to screen
Serial.print(digitalRead(7)); // Read back and print state of A5 to screen
Serial.print(digitalRead(6)); // Read back and print state of A4 to screen
Serial.print(digitalRead(5)); // Read back and print state of A3 to screen
Serial.print(digitalRead(4)); // Read back and print state of A2 to screen
Serial.print(digitalRead(3)); // Read back and print state of A1 to screen
Serial.print(digitalRead(2)); // Read back and print state of 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)
}
}


In case you fancy seeing how I did it.

http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150425_183048.jpg?m=1430004723

--Phil

PhilipA
April 25th, 2015, 04:09 PM
Actually, I had meant to say.. I had looked at the card pictures from the Site90 Lanier, and the chip in that location is an NE558N.
Makes sense as to what's still vaguely legible on mine.

Phil

PhilipA
April 25th, 2015, 06:05 PM
http://vintagecomputers.site90.net/aes/?mmskip=1

Watch for the pop-up that site likes to spit out.

Phil

PhilipA
April 25th, 2015, 07:38 PM
Thinking of.. that jump in the early bytes of the PROM- one behavior that has been noted is that the screen will fill with the drive number if it finds data that it doesn't recognize- should be useful in discovering the video address.

--Phil

PhilipA
April 26th, 2015, 12:46 PM
There are 4 74LS287 1kbit PROM chips on the video board. U58, 49, 39 and 69.

http://www.datasheetspdf.com/PDF/74LS287/798764/1

I'm going to try and capture the contents. Not sure what the two CERDIP pieces are, but I guess they are PROM also.

--Phil

EDIT: Unhelpfully TI decided that their address lines are A thru H, I'm going to have to make the assumption that A is A0 and H is A8, LSB at A to MSB at H.

PhilipA
April 26th, 2015, 02:15 PM
Lifted the tables out of the 74LS287 PROMs on the video card.

U39:


00000000 0101
00000001 0101
00000010 0101
00000011 0101
00000100 0101
00000101 0101
00000110 0101
00000111 0101
00001000 0101
00001001 0101
00001010 0101
00001011 0101
00001100 0101
00001101 0101
00001110 0101
00001111 0101
00010000 0101
00010001 0101
00010010 0101
00010011 0101
00010100 0101
00010101 0101
00010110 0101
00010111 0101
00011000 0101
00011001 0101
00011010 0101
00011011 0001
00011100 0001
00011101 0001
00011110 1001
00011111 0001
00100000 0001
00100001 0001
00100010 0100
00100011 0000
00100100 0000
00100101 0000
00100110 0000
00100111 0000
00101000 0000
00101001 0000
00101010 0000
00101011 0000
00101100 0000
00101101 0000
00101110 0000
00101111 0000
00110000 0000
00110001 0000
00110010 0000
00110011 0000
00110100 0000
00110101 0000
00110110 0000
00110111 0000
00111000 0000
00111001 0000
00111010 0000
00111011 0000
00111100 0000
00111101 0000
00111110 0000
00111111 0000
01000000 0101
01000001 0101
01000010 0101
01000011 0101
01000100 0101
01000101 0101
01000110 0101
01000111 0101
01001000 0101
01001001 0101
01001010 0101
01001011 0101
01001100 0101
01001101 0101
01001110 0101
01001111 0101
01010000 0101
01010001 0101
01010010 0101
01010011 0101
01010100 0101
01010101 0101
01010110 0101
01010111 0101
01011000 0101
01011001 0101
01011010 0101
01011011 0001
01011100 0001
01011101 0001
01011110 0001
01011111 0001
01100000 0001
01100001 0001
01100010 1001
01100011 0001
01100100 0001
01100101 0001
01100110 0001
01100111 0001
01101000 0011
01101001 0100
01101010 0000
01101011 0000
01101100 0000
01101101 0000
01101110 0000
01101111 0000
01110000 0000
01110001 0000
01110010 0000
01110011 0000
01110100 0000
01110101 0000
01110110 0000
01110111 0000
01111000 0000
01111001 0000
01111010 0000
01111011 0000
01111100 0000
01111101 0000
01111110 0000
01111111 0000
10000000 0000
10000001 0000
10000010 0000
10000011 0000
10000100 0000
10000101 0000
10000110 0000
10000111 0000
10001000 0000
10001001 0000
10001010 0000
10001011 0000
10001100 0000
10001101 0000
10001110 0000
10001111 0000
10010000 0000
10010001 0000
10010010 0000
10010011 0000
10010100 0000
10010101 0000
10010110 0000
10010111 0000
10011000 0000
10011001 0000
10011010 0000
10011011 0000
10011100 0000
10011101 0000
10011110 0000
10011111 0000
10100000 0000
10100001 0000
10100010 0000
10100011 0000
10100100 0000
10100101 0000
10100110 0000
10100111 0000
10101000 0000
10101001 0000
10101010 0000
10101011 0000
10101100 0000
10101101 0000
10101110 0000
10101111 0000
10110000 0000
10110001 0000
10110010 0000
10110011 0000
10110100 0000
10110101 0000
10110110 0000
10110111 0000
10111000 0000
10111001 0000
10111010 0000
10111011 0000
10111100 0000
10111101 0000
10111110 0000
10111111 0000
11000000 0000
11000001 0000
11000010 0000
11000011 0000
11000100 0000
11000101 0000
11000110 0000
11000111 0000
11001000 0000
11001001 0000
11001010 0000
11001011 0000
11001100 0000
11001101 0000
11001110 0000
11001111 0000
11010000 0000
11010001 0000
11010010 0000
11010011 0000
11010100 0000
11010101 0000
11010110 0000
11010111 0000
11011000 0000
11011001 0000
11011010 0000
11011011 0000
11011100 0000
11011101 0000
11011110 0000
11011111 0000
11100000 0000
11100001 0000
11100010 0000
11100011 0000
11100100 0000
11100101 0000
11100110 0000
11100111 0000
11101000 0000
11101001 0000
11101010 0000
11101011 0000
11101100 0000
11101101 0000
11101110 0000
11101111 0000
11110000 0000
11110001 0000
11110010 0000
11110011 0000
11110100 0000
11110101 0000
11110110 0000
11110111 0000
11111000 0000
11111001 0000
11111010 0000
11111011 0000
11111100 0000
11111101 0000
11111110 0000
11111111 0000


U49:


00000000 1101
00000001 1101
00000010 1101
00000011 1101
00000100 1101
00000101 1101
00000110 1101
00000111 1101
00001000 1101
00001001 1101
00001010 1101
00001011 1101
00001100 1101
00001101 1101
00001110 1101
00001111 1101
00010000 1101
00010001 1101
00010010 1101
00010011 1101
00010100 1101
00010101 1101
00010110 1101
00010111 1101
00011000 1101
00011001 1101
00011010 1101
00011011 1101
00011100 1101
00011101 1101
00011110 1101
00011111 1101
00100000 1101
00100001 1101
00100010 1101
00100011 0101
00100100 1101
00100101 1101
00100110 1101
00100111 1101
00101000 1101
00101001 1101
00101010 1101
00101011 1101
00101100 1101
00101101 1101
00101110 1101
00101111 1101
00110000 1101
00110001 1101
00110010 1101
00110011 1101
00110100 1101
00110101 1101
00110110 1101
00110111 1101
00111000 1101
00111001 1101
00111010 1101
00111011 1101
00111100 1101
00111101 1101
00111110 1101
00111111 1101
01000000 1101
01000001 1101
01000010 1101
01000011 1101
01000100 1101
01000101 1101
01000110 1101
01000111 1101
01001000 1101
01001001 1101
01001010 1101
01001011 1101
01001100 1101
01001101 1101
01001110 1101
01001111 1101
01010000 1101
01010001 1101
01010010 1101
01010011 1101
01010100 1101
01010101 1101
01010110 1001
01010111 1001
01011000 1001
01011001 1001
01011010 1001
01011011 1001
01011100 1001
01011101 1001
01011110 1101
01011111 1101
01100000 1101
01100001 1101
01100010 1101
01100011 1100
01100100 1111
01100101 1111
01100110 1111
01100111 1111
01101000 1111
01101001 1111
01101010 1111
01101011 1111
01101100 1111
01101101 1111
01101110 1111
01101111 1111
01110000 1111
01110001 1111
01110010 1111
01110011 1111
01110100 1111
01110101 1111
01110110 1111
01110111 1111
01111000 1111
01111001 1111
01111010 1111
01111011 1111
01111100 1111
01111101 1111
01111110 1111
01111111 1111
10000000 1101
10000001 1101
10000010 1111
10000011 1111
10000100 1111
10000101 1111
10000110 1111
10000111 1111
10001000 1111
10001001 1111
10001010 1111
10001011 1111
10001100 1111
10001101 1111
10001110 1111
10001111 1111
10010000 1111
10010001 1111
10010010 1111
10010011 1111
10010100 1111
10010101 1111
10010110 1111
10010111 1111
10011000 1111
10011001 1111
10011010 1111
10011011 1111
10011100 1111
10011101 1111
10011110 1111
10011111 1111
10100000 1111
10100001 1111
10100010 1111
10100011 0111
10100100 1111
10100101 1111
10100110 1111
10100111 1111
10101000 1111
10101001 1111
10101010 1111
10101011 1111
10101100 1111
10101101 1111
10101110 1111
10101111 1111
10110000 1111
10110001 1111
10110010 1111
10110011 1111
10110100 1111
10110101 1111
10110110 1111
10110111 1111
10111000 1111
10111001 1111
10111010 1111
10111011 1111
10111100 1111
10111101 1111
10111110 1111
10111111 1111
11000000 1111
11000001 1111
11000010 1111
11000011 1111
11000100 1111
11000101 1111
11000110 1111
11000111 1111
11001000 1111
11001001 1111
11001010 1111
11001011 1111
11001100 1111
11001101 1111
11001110 1111
11001111 1111
11010000 1111
11010001 1111
11010010 1101
11010011 1101
11010100 1101
11010101 1101
11010110 1001
11010111 1001
11011000 1001
11011001 1001
11011010 1001
11011011 1001
11011100 1001
11011101 1001
11011110 1101
11011111 1101
11100000 1101
11100001 1101
11100010 1101
11100011 1100
11100100 1111
11100101 1111
11100110 1111
11100111 1111
11101000 1111
11101001 1111
11101010 1111
11101011 1111
11101100 1111
11101101 1111
11101110 1111
11101111 1111
11110000 1111
11110001 1111
11110010 1111
11110011 1111
11110100 1111
11110101 1111
11110110 1111
11110111 1111
11111000 1111
11111001 1111
11111010 1111
11111011 1111
11111100 1111
11111101 1111
11111110 1111
11111111 1111


U58:


00000000 0001
00000001 0001
00000010 0001
00000011 0001
00000100 0001
00000101 0001
00000110 0001
00000111 0001
00001000 0001
00001001 0001
00001010 0001
00001011 0001
00001100 0001
00001101 0001
00001110 0001
00001111 0001
00010000 0001
00010001 0001
00010010 0001
00010011 0001
00010100 0001
00010101 0001
00010110 0001
00010111 0001
00011000 0001
00011001 0001
00011010 0001
00011011 0001
00011100 0001
00011101 0001
00011110 0001
00011111 0001
00100000 0001
00100001 0001
00100010 0001
00100011 0001
00100100 0001
00100101 0001
00100110 0001
00100111 0001
00101000 0001
00101001 0001
00101010 0001
00101011 0001
00101100 0001
00101101 0001
00101110 0001
00101111 0001
00110000 0001
00110001 0001
00110010 1001
00110011 1001
00110100 1001
00110101 1001
00110110 1001
00110111 1001
00111000 1001
00111001 1001
00111010 1001
00111011 1001
00111100 1001
00111101 1001
00111110 1001
00111111 1001
01000000 1001
01000001 1001
01000010 1001
01000011 1001
01000100 1001
01000101 1001
01000110 1001
01000111 1001
01001000 1001
01001001 1001
01001010 1001
01001011 1001
01001100 1001
01001101 1001
01001110 1000
01001111 1000
01010000 1010
01010001 1010
01010010 1010
01010011 1010
01010100 1001
01010101 1001
01010110 1001
01010111 1001
01011000 1001
01011001 1001
01011010 1001
01011011 1001
01011100 1001
01011101 1001
01011110 1001
01011111 1001
01100000 1001
01100001 1001
01100010 1001
01100011 1001
01100100 1111
01100101 1111
01100110 1111
01100111 1111
01101000 1111
01101001 1111
01101010 1111
01101011 1111
01101100 1111
01101101 1111
01101110 1111
01101111 1111
01110000 1111
01110001 1111
01110010 1111
01110011 1111
01110100 1111
01110101 1111
01110110 1111
01110111 1111
01111000 1111
01111001 1111
01111010 1111
01111011 1111
01111100 1111
01111101 1111
01111110 1111
01111111 1111
10000000 0101
10000001 0101
10000010 0101
10000011 0101
10000100 0101
10000101 0101
10000110 0101
10000111 0101
10001000 0101
10001001 0101
10001010 0101
10001011 0101
10001100 0101
10001101 0101
10001110 0101
10001111 0101
10010000 0101
10010001 0101
10010010 0101
10010011 0101
10010100 0101
10010101 0101
10010110 0101
10010111 0101
10011000 0101
10011001 0101
10011010 0101
10011011 0101
10011100 0101
10011101 0101
10011110 0101
10011111 0101
10100000 0101
10100001 0101
10100010 0101
10100011 0101
10100100 0101
10100101 0101
10100110 0101
10100111 0101
10101000 0101
10101001 0101
10101010 0101
10101011 0101
10101100 0101
10101101 0101
10101110 0101
10101111 0101
10110000 0101
10110001 0101
10110010 1101
10110011 1101
10110100 1101
10110101 1101
10110110 1101
10110111 1101
10111000 1101
10111001 1101
10111010 1101
10111011 1101
10111100 1101
10111101 1101
10111110 1101
10111111 1101
11000000 1101
11000001 1101
11000010 1101
11000011 1101
11000100 1101
11000101 1101
11000110 1101
11000111 1101
11001000 1101
11001001 1101
11001010 1101
11001011 1101
11001100 1101
11001101 1101
11001110 1100
11001111 1100
11010000 1010
11010001 1010
11010010 1010
11010011 1010
11010100 1001
11010101 1001
11010110 1001
11010111 1001
11011000 1001
11011001 1001
11011010 1001
11011011 1001
11011100 1001
11011101 1001
11011110 1001
11011111 1001
11100000 1001
11100001 1001
11100010 1101
11100011 1101
11100100 1111
11100101 1111
11100110 1111
11100111 1111
11101000 1111
11101001 1111
11101010 1111
11101011 1111
11101100 1111
11101101 1111
11101110 1111
11101111 1111
11110000 1111
11110001 1111
11110010 1111
11110011 1111
11110100 1111
11110101 1111
11110110 1111
11110111 1111
11111000 1111
11111001 1111
11111010 1111
11111011 1111
11111100 1111
11111101 1111
11111110 1111
11111111 1111


U69:


00000000 1111
00000001 1111
00000010 1111
00000011 1111
00000100 1111
00000101 1111
00000110 1111
00000111 1111
00001000 1111
00001001 1111
00001010 1111
00001011 1111
00001100 1111
00001101 1111
00001110 1111
00001111 1111
00010000 1111
00010001 1111
00010010 1111
00010011 1111
00010100 1111
00010101 1111
00010110 1111
00010111 1111
00011000 1111
00011001 1111
00011010 1111
00011011 1111
00011100 1111
00011101 1111
00011110 1111
00011111 1111
00100000 1111
00100001 1111
00100010 1111
00100011 1111
00100100 1111
00100101 1111
00100110 1111
00100111 1111
00101000 1111
00101001 1111
00101010 1111
00101011 1111
00101100 1111
00101101 1111
00101110 1111
00101111 1111
00110000 1111
00110001 1111
00110010 1111
00110011 1111
00110100 1111
00110101 1111
00110110 1111
00110111 1111
00111000 1111
00111001 1111
00111010 1111
00111011 1111
00111100 1111
00111101 1111
00111110 1111
00111111 1111
01000000 1011
01000001 1000
01000010 1000
01000011 1010
01000100 1000
01000101 0000
01000110 1000
01000111 1100
01001000 1011
01001001 1000
01001010 1000
01001011 1010
01001100 1000
01001101 1000
01001110 0000
01001111 1100
01010000 1000
01010001 1000
01010010 1000
01010011 1000
01010100 1000
01010101 0000
01010110 1000
01010111 1100
01011000 1000
01011001 1000
01011010 1000
01011011 1000
01011100 1000
01011101 1000
01011110 0000
01011111 1100
01100000 1000
01100001 1000
01100010 1000
01100011 0000
01100100 1000
01100101 1000
01100110 1000
01100111 1100
01101000 1000
01101001 1000
01101010 1000
01101011 0000
01101100 1000
01101101 1000
01101110 1000
01101111 1100
01110000 1000
01110001 1000
01110010 1000
01110011 0000
01110100 1000
01110101 1000
01110110 1000
01110111 1100
01111000 1000
01111001 1000
01111010 1000
01111011 0000
01111100 1000
01111101 1000
01111110 1000
01111111 1100
10000000 1000
10000001 1000
10000010 1000
10000011 1000
10000100 1000
10000101 0000
10000110 1000
10000111 1100
10001000 1000
10001001 1000
10001010 1000
10001011 1000
10001100 1000
10001101 1000
10001110 0000
10001111 1100
10010000 1000
10010001 1011
10010010 1000
10010011 1000
10010100 1010
10010101 0000
10010110 1000
10010111 1100
10011000 1000
10011001 1011
10011010 1000
10011011 1000
10011100 1010
10011101 1000
10011110 0000
10011111 1100
10100000 1000
10100001 1000
10100010 1000
10100011 0000
10100100 1000
10100101 1000
10100110 1000
10100111 1100
10101000 1000
10101001 1000
10101010 1000
10101011 0000
10101100 1000
10101101 1000
10101110 1000
10101111 1100
10110000 1000
10110001 1000
10110010 1000
10110011 0000
10110100 1000
10110101 1000
10110110 1000
10110111 1100
10111000 1000
10111001 1000
10111010 1000
10111011 0000
10111100 1000
10111101 1000
10111110 1000
10111111 1100
11000000 1000
11000001 1000
11000010 1000
11000011 1000
11000100 1000
11000101 0000
11000110 1000
11000111 1100
11001000 1000
11001001 1000
11001010 1000
11001011 1000
11001100 1000
11001101 1000
11001110 0000
11001111 1100
11010000 1000
11010001 1000
11010010 1000
11010011 1000
11010100 1000
11010101 0000
11010110 1000
11010111 1100
11011000 1000
11011001 1000
11011010 1000
11011011 1000
11011100 1000
11011101 1000
11011110 0000
11011111 1100
11100000 1000
11100001 1000
11100010 1000
11100011 0000
11100100 1000
11100101 1000
11100110 1000
11100111 1100
11101000 1000
11101001 1000
11101010 1000
11101011 0000
11101100 1000
11101101 1000
11101110 1000
11101111 1100
11110000 1000
11110001 1000
11110010 1000
11110011 0000
11110100 1000
11110101 1000
11110110 1000
11110111 1100
11111000 1000
11111001 1000
11111010 1000
11111011 0000
11111100 1000
11111101 1000
11111110 1000
11111111 1100


I'll have a look at the others, sadly the Site90 video card is a different model. Did we ever determine what the CERDIP chips are?

--Phil

JDallas
April 26th, 2015, 02:21 PM
I don't think those are holding code. It may be that they're feeding the video bit counter into it as addresses and outputting the video H&V blanking an dsyne signals. I'll give it a closer look later. I think if you trace the ADDRESS input lines, you'll find they go to a counter chip and the outputs head over the the video output signal area.

They also don't look like character roms. I think we identified that likely chip.

It may be that loading them into a spreadsheet and using the four output signals to create a four signal waveform will make the function in the video section obvious.

PhilipA
April 26th, 2015, 02:48 PM
I agree, they do look to be doing other things, especially given their placement on the board.

The big unmarked ROM in the corner looks to be the same as the one on the Site90 so I might be able to get the pinout for it that way; I can get a couple shift registers and try offload it also, for giggles.

--Phil

JDallas
April 27th, 2015, 06:24 AM
I looked through the CPU card boot Prom last night and it seems to confirm that upon power up, its purpose is to orchestrate loading run-time code from floppy. They were probably challenged to fit that in the 512 bytes, because they skipped quite a few normal initialization steps.

Very quickly they load the stack pointer to a block of Dram, they don't bother testing it first or postponing use of the stack. I've detected what are the fatal error subroutines and I think it matches what you said the system does after giving up.

Before it goes into a HALT that it appears to be forever until powered up again, it paints 16KB of memory at 8000 with an ASCII number which I suspect it the fatal error number. It would follow that 8000h is the start of the Video display if they wanted that error number to be visible, but they also execute at 8000h which could be done as a temporary boot stage, but is odd considering there is 32KB on the CPU card.

I think you described a situation where numbers like "0", "1", "2" were filled on the display. There are piece of code that can load another value before calling that fill and halt routine.

I doesn't appear to post a message on the screen, at least not in this block of code.

I'll list the memory map (with I/O) that it initializes. It might be possible to deduce some of the devices addressed merely by the initialization patterns sent to them (the Intel peripheral chip set on the CPU card).

I'm guessing that the bootup is mostly about checking that a drive is ready and then that a floppy is detected. I'm looking for Floppy interface control code (boot loader). I'll let you know when I find something useful or suggest tracing some signals to further the details of which port is which.

Until then, can you describe the boot activity on the screen that you've seen? If the Dram pointed to be the stack is corrupt, that behavior may be too random.

I'll try to deduce from the code whether the failure is Dram related at all, as it should predict activity to a point and if so, the problem may be with the signals its trying to read through some of the port activity.

I'll be particularly busy this week until late Thursday.

JDallas
April 27th, 2015, 06:31 AM
Here's my CPU card Prom annotations from last night:


ORG 00000H
;---------------------------------------;
;
;---------------------------------------;
Y7EB0 EQU 07EB0H ; DW
Y7EB2 EQU 07EB2H ; DB
Y7EB3 EQU 07EB3H ; DW
Y7EB5 EQU 07EB5H ; DB
Y7EB6 EQU 07EB6H ; DB
Y7EB7 EQU 07EB7H ; DB
Y7EB8 EQU 07EB8H ; DB
Y7EB9 EQU 07EB9H ; DW
Y7EBB EQU 07EBBH ; DB
Y7EBC EQU 07EBCH ; DB
X8000 EQU 08000H
;---------------------------------------;
;8080 Boot-up at address 0000h
;---------------------------------------;
0000 F3 DI ;disable interrupt if runaway to here
0001 F3 DI ;same but if 2byte opcode skewed
0002 97 SUB A ;clear accumulator
0003 D303 OUT (003H),A ;output port 03 <-- 000h
0005 31AF7E LD SP,07EAFH ;set stack near top of 6000-7FFFh block
;ram variables and buffers at 7EB0-7FFFh
0008 DB01 IN A,(001H) ;input port 01 b0
000A 1F RRA ;rotate b0 into Carry
;---------------------------------------;
;Assume this is a jump to ram after a program has been loaded from the disk
;---------------------------------------;
000B D20080 JP NC,X8000 ;execute at 8000h if b0=0
;---------------------------------------;
;Otherwise process until disk program is loaded.
;---------------------------------------;
000E 3E0C LD A,00CH ;value to write at port 16
0010 D316 OUT (016H),A ;output port 16 <-- 00Ch
0012 3E64 LD A,064H ;100dec
0014 CDE701 CALL DELAYA ;call delay function at 01E7h
0017 DB05 WAIT: IN A,(005H) ;input port 05 b0 b1
0019 E603 AND 003H ;filter for b1.b0
001B C22900 JP NZ,A0029 ;exit WAIT Loop when either bit high to A0029
;b1.b0 may be status disk loaded in drive A and B
001E 3E0B LD A,00BH ;value for port B (must be drive related?)
0020 D304 OUT (004H),A ;output port 04 <-- 00Bh
0022 3E03 LD A,003H ;value for port B (must be drive related?)
0024 D304 OUT (004H),A ;output port 04 <-- 003h
0026 C31700 JP WAIT ;go back as scan for diskette?
;---------------------------------------;
;Condition met, delay and test again before proceding else begin condition test again
;---------------------------------------;
0029 3E19 A0029: LD A,019H ;VALUE FOR LOOP DELAYA FUNCTION
002B CDE701 CALL DELAYA ;DO DELAYA THEN ASSURE DISKS STILL IN DRIVE
002E DB05 IN A,(005H) ;input port 05 b0 b1
0030 E603 AND 003H ;value for port B (must be drive related?)
0032 CA1700 JP Z,WAIT ;if neither disk ready, go back to WAIT again
;---------------------------------------;
;Assumed disk in drive for duration. First wait condition fully met. Proceed.
;A={1,2,3}
;---------------------------------------;
0035 47 LD B,A ;save pattern of available drives in register B
0036 3D DEC A
0037 0F RRCA
0038 F60C OR 00CH
003A B0 OR B
003B D316 OUT (016H),A ;output port 16 <-- 0xxh
003D 32B57E LD (Y7EB5),A
0040 3E06 LD A,006H
0042 CDE701 CALL DELAYA
0045 CDA901 CALL A01A9
0048 97 SUB A
0049 32B77E LD (Y7EB7),A
004C 3C INC A
004D 32B87E LD (Y7EB8),A
0050 21BD7E LD HL,07EBDH
0053 CD0A01 CALL A010A
0056 E5 PUSH HL
0057 E1 A0057: POP HL
0058 7E LD A,(HL)
0059 23 INC HL
005A FE0A CP 00AH
005C CA6900 JP Z,A0069
005F FE0B CP 00BH
0061 CAB400 JP Z,A00B4
;---------------------------------------;
;Fill 8000h block with '2' to 8000-9EFFh and HALT forever
;---------------------------------------;
0064 0632 ERROR2: LD B,032H
0066 C3BD00 JP ERRHLT
;---------------------------------------;
;
;---------------------------------------;
0069 0606 A0069: LD B,006H
006B 11B77E LD DE,07EB7H
006E CDDC01 CALL HL2DE
0071 E5 PUSH HL
0072 215D7F A0072: LD HL,07F5DH
0075 CD0A01 CALL A010A
0078 EB EX DE,HL
0079 3E08 LD A,008H
007B 21B77E LD HL,07EB7H
007E 34 INC (HL)
007F 96 SUB (HL)
0080 C28600 JP NZ,A0086
0083 77 LD (HL),A
0084 23 INC HL
0085 34 INC (HL)
0086 3ABC7E A0086: LD A,(Y7EBC)
0089 B7 OR A
008A C29500 JP NZ,A0095
008D 3ABB7E LD A,(Y7EBB)
0090 B8 CP B
0091 D29500 JP NC,A0095
0094 47 LD B,A
0095 2AB97E A0095: LD HL,(Y7EB9)
0098 EB EX DE,HL
0099 CDDC01 CALL HL2DE
009C EB EX DE,HL
009D 22B97E LD (Y7EB9),HL
00A0 2ABB7E LD HL,(Y7EBB)
00A3 7D LD A,L
00A4 90 SUB B
00A5 6F LD L,A
00A6 7C LD A,H
00A7 DE00 SBC A,000H
00A9 67 LD H,A
00AA 22BB7E LD (Y7EBB),HL
00AD B5 OR L
00AE C27200 JP NZ,A0072
00B1 C35700 JP A0057
;---------------------------------------;
;
;---------------------------------------;
00B4 5E A00B4: LD E,(HL)
00B5 23 INC HL
00B6 56 LD D,(HL)
00B7 23 INC HL
00B8 E5 PUSH HL
00B9 EB EX DE,HL
00BA E9 JP (HL)
;---------------------------------------;
;Fill 8000h block with '0' to 8000-9EFFh and HALT forever
;---------------------------------------;
00BB 0630 ERROR0: LD B,030H ;this isn't an 8080 opcode, ascii "0" (zero)
00BD 210080 ERRHLT: LD HL,08000H ;point to Dram at 8000h
00C0 3E9F LD A,09FH ;load loop exit value
00C2 70 ERRHL0: LD (HL),B ;write 030h to Dram 8000-9FFFh
00C3 23 INC HL ;bump Dram pointer
00C4 BC CP H ;09Fh-09Fh=0 is Positive so takes the jump
00C5 F2C200 JP P,ERRHL0 ;loop till H=A0h
00C8 3E08 LD A,008H ;value to port 04
00CA D304 OUT (004H),A ;output port 04 <-- 008h
00CC 76 HALT ;8080 exits only if INT but no EI in Prom
;HALT forever
;---------------------------------------;
;
;---------------------------------------;
00CD 0E32 A00CD: LD C,032H
00CF 3AB67E A00CF: LD A,(Y7EB6)
00D2 47 LD B,A
00D3 3AB87E LD A,(Y7EB8)
00D6 57 LD D,A
00D7 FE46 CP 046H
00D9 D46400 CALL NC,ERROR2
00DC 97 SUB A
00DD 7A LD A,D
00DE 1F RRA
00DF 90 SUB B
00E0 C8 RET Z
00E1 21B67E LD HL,07EB6H
00E4 17 RLA
00E5 3AB57E LD A,(Y7EB5)
00E8 DAF100 JP C,A00F1
00EB F620 OR 020H
00ED 34 INC (HL)
00EE C3F400 JP A00F4
;---------------------------------------;
;
;---------------------------------------;
00F1 E6DF A00F1: AND 0DFH
00F3 35 DEC (HL)
00F4 D316 A00F4: OUT (016H),A ;output port 16 <-- 0xxh
00F6 32B57E LD (Y7EB5),A
00F9 D314 OUT (014H),A ;output port 14 <-- 0xxh
00FB 3E07 LD A,007H
00FD CDE701 CALL DELAYA
0100 0D DEC C
0101 C2CF00 JP NZ,A00CF
0104 CDA901 CALL A01A9
0107 C3CD00 JP A00CD
;---------------------------------------;
;
;---------------------------------------;
010A 22B07E A010A: LD (Y7EB0),HL
010D 1E0A LD E,00AH
010F D5 PUSH DE
0110 CDCD00 CALL A00CD
0113 D1 POP DE
0114 3AB77E LD A,(Y7EB7)
0117 4F LD C,A
0118 0600 LD B,000H
011A 3AB87E LD A,(Y7EB8)
011D 21A101 LD HL,T01A1
0120 1F RRA
0121 DA2701 JP C,A0127
0124 219901 LD HL,T0199
0127 09 A0127: ADD HL,BC
0128 7E LD A,(HL)
0129 32B27E LD (Y7EB2),A
012C 3AB27E A012C: LD A,(Y7EB2)
012F 2AB07E LD HL,(Y7EB0)
0132 D315 OUT (015H),A ;output port 15 <-- 0xxh
0134 3EDB LD A,0DBH
0136 D311 OUT (011H),A ;output port 11 <-- 0DBh
0138 3E42 LD A,042H
013A D328 OUT (028H),A ;output port 28 <-- 042H
013C 3E9B LD A,09BH
013E D323 OUT (023H),A ;output port 23 <-- 09Bh
0140 3E40 LD A,040H
0142 D323 OUT (023H),A ;output port 23 <-- 040H
0144 7D LD A,L
0145 D322 OUT (022H),A ;output port 22 <-- 0xxh
0147 7C LD A,H
0148 D322 OUT (022H),A ;output port 22 <-- 0xxh
014A 3AB57E LD A,(Y7EB5)
014D F610 OR 010H
014F E6BF AND 0BFH
0151 32B57E LD (Y7EB5),A
0154 D316 OUT (016H),A ;output port 16 <-- 0xxh
0156 D317 OUT (017H),A ;output port 17 <-- 0xxh
0158 DB05 A0158: IN A,(005H) ;input port 05 b7
015A 17 RLA
015B DA5801 JP C,A0158
015E 23 INC HL
015F 0602 LD B,002H
0161 CDC601 CALL A01C6
0164 2B DEC HL
0165 3AB27E LD A,(Y7EB2)
0168 BE CP (HL)
0169 C29201 JP NZ,A0192
016C 2B DEC HL
016D 3AB87E LD A,(Y7EB8)
0170 BE CP (HL)
0171 C29201 JP NZ,A0192
0174 23 INC HL
0175 23 INC HL
0176 23 INC HL
0177 0696 LD B,096H
0179 3AB77E LD A,(Y7EB7)
017C B7 OR A
017D C28801 JP NZ,A0188
0180 0611 LD B,011H
0182 CDC601 CALL A01C6
0185 0684 LD B,084H
0187 23 INC HL
0188 22B37E A0188: LD (Y7EB3),HL
018B CDC601 CALL A01C6
018E 2AB37E LD HL,(Y7EB3)
0191 C9 RET
;---------------------------------------;
;
;---------------------------------------;
0192 1D A0192: DEC E
0193 C22C01 JP NZ,A012C
0196 C3BB00 JP ERROR0
;---------------------------------------;
;
;---------------------------------------;
0199 00 T0199: DB 00,03,06,09,0C,0F,02,05
01A1 08 T01A1: DB 08,0B,0E,01,04,07,0A,0D
;---------------------------------------;
;
;---------------------------------------;
01A9 97 A01A9: SUB A
01AA 32B67E LD (Y7EB6),A
01AD 3AB57E LD A,(Y7EB5)
01B0 E6DF AND 0DFH
01B2 D316 OUT (016H),A ;output port 16 <-- 0xxh
01B4 32B57E LD (Y7EB5),A
;---------------------------------------;
;Wait for port 4 b4 to go high, then return
;---------------------------------------;
01B7 DB05 WAITB4: IN A,(005H) ;input port 05 b4
01B9 E610 AND 010H ;test b5 only
01BB C0 RET NZ ;exit loop when port 5 b4 is high
01BC D314 OUT (014H),A ;output port 14 <-- 0xxh
01BE 3E07 LD A,007H ;
01C0 CDE701 CALL DELAYA ;wait and try again
01C3 C3B701 JP WAITB4 ;
;---------------------------------------;
;
;---------------------------------------;
01C6 C5 A01C6: PUSH BC
01C7 97 SUB A
01C8 86 A01C8: ADD A,(HL)
01C9 23 INC HL
01CA 05 DEC B
01CB C2C801 JP NZ,A01C8
01CE C1 POP BC
01CF BE CP (HL)
01D0 C8 RET Z
01D1 0631 LD B,031H
01D3 1D DEC E
01D4 CABD00 JP Z,ERRHLT ;ERROR1
01D7 212C01 LD HL,A012C
01DA E3 EX (SP),HL
01DB C9 RET
;---------------------------------------;
;BLOCK MOVE (HL)-->(DE) Countdown B
;---------------------------------------;
01DC C5 HL2DE: PUSH BC ;save B
01DD 7E HLOOP: LD A,(HL) ;copy from (HL)
01DE 12 LD (DE),A ;copy to (DE)
01DF 23 INC HL ;bump
01E0 13 INC DE ;bump
01E1 05 DEC B ;countdown B
01E2 C2DD01 JP NZ,HLOOP ;loop till down
01E5 C1 POP BC ;restore B
01E6 C9 RET ;return
;---------------------------------------;
;OPCODE DELAYA LOOP:
;---------------------------------------;
01E7 1ECF DELAYA: LD E,0CFH
01E9 E3 DELAY0: EX (SP),HL
01EA E3 EX (SP),HL
01EB 1D DEC E
01EC C2E901 JP NZ,DELAY0
01EF 3D DEC A
01F0 C2E701 JP NZ,DELAYA
01F3 C9 RET
;---------------------------------------;
; >> NO EXECUTION PATH TO HERE <<
;---------------------------------------;
01F4 00 NOP
01F5 00 NOP
01F6 00 NOP
01F7 00 NOP
01F8 00 NOP
01F9 00 NOP
01FA 00 NOP
01FB 00 NOP
01FC 00 NOP
01FD 00 NOP
01FE 00 NOP
01FF 00 NOP
0200 00 NOP
;---------------------------------------;
;
;---------------------------------------;
END
;
; UNRESOLVED LABELS
;
; LABLE CROSS REFRENCE
;WAIT A0026 A0032
;A0029 A001B
;A0057 A00B1
;ERROR2 A00D9
;A0069 A005C
;A0072 A00AE
;A0086 A0080
;A0095 A008A A0091
;A00B4 A0061
;ERROR0 A0196
;ERRHLT A0066 A01D4
;ERRHL0 A00C5
;A00CD A0107 A0110
;A00CF A0101
;A00F1 A00E8
;A00F4 A00EE
;A010A A0053 A0075
;A0127 A0121
;A012C A0193 T01D7
;A0158 A015B
;A0188 A017D
;A0192 A0169 A0171
;T0199 T0124
;T01A1 T011D
;A01A9 A0045 A0104
;WAITB4 A01C3
;A01C6 A0161 A0182 A018B
;A01C8 A01CB
;HL2DE A006E A0099
;HLOOP A01E2
;DELAYA A0014 A002B A0042 A00FD
; A01C0 A01F0
;DELAY0 A01EC
;Z7EAF Z0005
;Y7EB0 Y010A Y012F
;Y7EB2 Y0129 Y012C Y0165
;Y7EB3 Y0188 Y018E
;Y7EB5 Y003D Y00E5 Y00F6 Y014A
; Y0151 Y01AD Y01B4
;Y7EB6 Y00CF Z00E1 Y01AA
;Y7EB7 Y0049 Z006B Z007B Y0114
; Y0179
;Y7EB8 Y004D Y00D3 Y011A Y016D
;Y7EB9 Y0095 Y009D
;Y7EBB Y008D Y00A0 Y00AA
;Y7EBC Y0086
;Z7EBD Z0050
;Z7F5D Z0072
;X8000 X000B Z00BD

PhilipA
April 27th, 2015, 06:43 AM
What I had seen until now- power up. Screen comes on to raster. Continuous beep from speaker. Blank screen. Drive motors spin continuously.
Insert (soft sectored) floppy disk, in either drive. Beep beep beep beep beep so long as the disc is in. Blank screen.

Previously, the lower drive would CLIK and engage the read/write head mechanism (head clamp) but would not move the heads.

Pressing the reset button causes raster to de-stabilize then come back to a rectangle, beep resumes about 1/4 second later. Blank screen.


What others have said- "It beeps until you give it a disc. If the disc you give it does not contain boot code, it would fill the screen with 0 or 1 depending on the drive you put the wrong disc in"

--Phil

PhilipA
April 27th, 2015, 09:14 AM
JD- Do you have the chip listing spreadsheets I sent you? The ones I have here became corrupted due to a faulty program.

--Phil

JDallas
April 27th, 2015, 10:36 AM
...others have said- "It beeps until you give it a disc. If the disc you give it does not contain boot code, it would fill the screen with 0 or 1 depending on the drive you put the wrong disc in..."

Good. Odds are high that the reason your's doesn't get that far is that Dram has problems and thus all stack activity is like a ramdomizer, particularly the RET instructions. :)

We might consider a expanded Prom replacement that allows us to test Dram and other parts of the system before doing stack operations. If we limit the code to 512bytes, we might not be ready to know how to write to the screen and control scrolling correctly, for now.

That they said the screen filled with a number, suggests strongly that the Video Dram *IS* the 8000h-BFFFh block... though the code above only fills 8000-9FFFh.

The 32KB on the CPU card, I'm hoping is 0000h-7FFFh and that they shadow that ROM in until the Boot rom jumps to 8000h, where a snippet of code flips the Boot Rom out of the Memory map and the completes the boot loader to transfer to system software into that 32KB block, quickly transferring execution off the video page and shortly clearing that and posting the Welcome page on the screen.

PhilipA
April 27th, 2015, 10:38 AM
Hopefully when it comes in, I'll try changing out the RAM on the CPU card and see what results that yields. That's a low impact effort, might show up if that's the problem.

I'll agree with you it's highly likely.

I might try do a RAM tester on the Arduino, it might run fast enough for the RAS/CAS to work


--Phil

PhilipA
April 27th, 2015, 11:59 AM
...or not, the 4116 is out of stock. Please call back May 1st.

Time to start RAM testing, I think.


EDIT: Looked on the vintage arcade game scene and discovered that 4164 is nearly pin-compatible with 4116- clip off the -5V supply pin and tie the MSB address line low, and it's a slot-in replacement.

Ordered that instead, should be arriving sometime soon from The California.


--Phil

JDallas
April 27th, 2015, 05:01 PM
...4164 is nearly pin-compatible- clip off the -5V supply pin and tie the MSB address line low...

A 64KB Dram may work as you describe. The CPU card's refresh circuit will only keep a fractured (not internally contiguous) 16KB block refreshed.

Drams capacity jumps in powers of 4 because the address is split in half and latched separately as a row and column address.

For a 16KB Dram, A0-A6 and A7-A13 are the two halves that are latched into the Dram for normal access. A 64KB Dram is addressable A0-A15, and the split would be A0-A7,A8-A15. When you tie that MSB low (or high if it goes bad, a second chance) you'll actaully address it oddly:


8080 +-------+ +----------+
Addr | | | 64KB Dram|
A00----| |---A00&A07---|A00&A08 | Addresses used in a 64KB Dram:
A01----| |---A01&A08---|A01&A09 | 0xxxxxxx.0xxxxxxx
A02----| |---A02&A09---|A02&A10 | Thats every other 128 byte block
A03----| Dram |---A03&A10---|A03&A11 | up to the 32KB boundary.
A04----|Refresh|---A04&A11---|A04&A12 | Nothing above 32KB, inside the Dram
A05----| Chip |---A05&A12---|A05&A13 | would be addressed or refreshed.
A06----| & |---A06&A13---|A06&A14 |
A07----|Circuit| GND---|A07&A15=0 | Refresh would happen on the entire
A08----| |---RAS-------| | lower 32KB block, though you can't
A09----| |---CAS-------| | access but half of it.
A10----| | +----------+
A11----| |
A12----| |
A13----| |
+-------+

Note that if you tie the old -5Vdc to TTL High instead of GND, you have a backup 16KB set in the DRAM's high 32KB that you can *try* should you have bit problems later.

When its tied to TTL high, the effective address inside the 64KB Dram is 1xxxxxxx.1xxxxxxx And the upper 32KB should be refreshed. So that's *why* it should work.

By the way, instead of modifying every Dram, it would be better to just cut the -5Vdc trace feeding those chips and jumper the isolated side to GND or TTL High (GND is better given that choice). That way you don't ruin you Drams and you can use them is something else if you get some 16KB Drams later. Just one cut trace and wire tack to reverse. :)

PhilipA
April 27th, 2015, 06:57 PM
It should- I know it's a bit of a waste- I don't intend on using it all, I have ordered most of it for another machine that actually takes 4164.

To use a 4164 with the address line tied off is a tested* trick used where 4116 is unavailable.

Should be able to start with one and sequence through- then two. I know it's a lot of combinations but it's a direction to go for now. I forget how fast the RAM has to be strobed to keep it "alive". More thinking along the lines of building an ad-hoc tester with the Arduino..

--Phil

*not by me, yet.

JDallas
April 28th, 2015, 03:47 PM
I've seen Drams done like that before, but I wanted to actually figure out what memory was being addressed internally and confirm that the refresh would be fine. Not really an easy way to to paging except to toggle the TTL level on the MSB address (as opposed to hard tying it to GND or TTL High.

I'll look to see if my datasheet download has the timing information for the refresh and RAS/CAS (row/column) latching of the address for your Arduino Dram tester. If I don't find it tonight, I'll dig for it Thursday afternoon (after a meeting).

PhilipA
April 29th, 2015, 10:04 AM
No problem, no rush at this instant. The replacement DRAM is currently in San Fransisco. I'm hoping it'll be here Friday or Saturday.


Thanks

--Phil

PhilipA
May 2nd, 2015, 10:40 PM
DRAM is due in Tuesday now.

Phil

Chuck(G)
May 5th, 2015, 10:33 AM
My recollection of the Lanier 8" machines was that a USART/USRT was used for floppy, with a bit of Fairchild Macrologic for CRC generation and checking. Of course, this means that the bit ordering is "backwards", but otherwise pretty straightforward M2FM encoding.

PhilipA
May 6th, 2015, 09:46 AM
Got the new DRAM in. Used this guide to change the pinouts. (http://picmania.garcia-cuervo.net/recursos/redpicdatasheets/memorias_ram/4116_to_4164.htm)

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150506_113505.jpg?m=1430931786

Net result is the same behavior. Also tried putting some of the RAM I'd removed from the CPU card into the video card. Same result, so that was returned back as it was.

--Phil

PhilipA
May 7th, 2015, 07:22 AM
My concern is the Arduino won't run fast enough on the code loop. I was doing some calculation and it might be a problem.

However, it could be of use to program boot code onto some form of EEPROM or flash.

It's doing -something- because recall, stuffing a soft-sector floppy into either drive causes the beep to repeat on and off rather than just the solid on that it does. So some signal is getting from the I/O card that's forcing it to interrupt.
I'm good with attempting to tie the floppy cables to force it to advance and see if it produces any screen output. That would be a good indication. I'm concerned that the drive heads no longer pull in, but that might be just me. I know the mechanism is working because it'll CLUNK in and out rapidly on power-down.

--Phil

NeXT
May 7th, 2015, 09:12 AM
Being on the West Coast, if you have any chips you want to read or burn that are within what a Willem can support, I can do that for you.

PhilipA
May 7th, 2015, 11:06 AM
The beeper is on the addendum card that's attached to the top of the backplane. There's a plugin for the loudspeaker.

PhilipA
May 7th, 2015, 01:18 PM
I'm looking at EEPROMs. I'm thinking something like this would be a good candidate to use in place of the boot PROM. Both as a device to hook directly in to the socket and also useful as a larger-scale device to hook in further up the chain. I'd be able to program it with the Arduino because it's CMOS.

http://www.onsemi.com/pub_link/Collateral/CAT28C65B-D.PDF

Thoughts?

--Phil

Chuck(G)
May 7th, 2015, 02:16 PM
Consider FRAM also. You simply write to it just as you would RAM.

But yes, EEPROM is pretty simple to use.

PhilipA
May 9th, 2015, 10:58 AM
Photos I shall work on, I'll need to get a couple suitable lights and an area to photograph in. I'll work on that in the upcoming week.

CPU DRAM - of the 18 chips I put in the Compaq, 6 were faulty in some way or another. Testing the DRAM in this will be vital. Would also be helpful to test the original 4116 RAM.

Programming EEPROMs - without hardware additions only 512 bytes with the number of address lines. I might save up and buy a larger Arduino, with a greater number of I/O pins, so it can work natively with pretty much anything that can be attached to it.


--Phil

JDallas
May 10th, 2015, 09:03 AM
The image below shows a concise way to do the 16Kx1 Dram tester on your Arduino.

As you probably want to test your new 64Kx1 Drams too, just reserve your D0-D7 for the test socket's A0-A7 lines instead and read and write to DIN DOUNT by another bi-directional I/O bit.4

Initialize by doing a refresh cycle for all 128 rows of the 16Kx1 Dram or 256 rows of the 64Kx1 Dram. Effectively you load 00h on A0-A6,A7 and activate RAS# to refresh all the cells on that row, then increment the address and RAS# it again. The timing should be in the spec, I'll get that later. After you've done all the 128 or 256 rows depending on which Dram you're testing, set a timer in the Arduino to alert your code when to do another refresh.

In the period between refreshes could can read and write a single bit by latching the 16K or 64K address in two steps. The manual will say which you do first but I'll assume is Row for High half of the address and Column for the Low half of the address. I'll edit a correction when I dig up that datasheet.

The datasheet will tell you when to activate the WRITE# to determine whether its a read or write cycle.


All these signals can be chosen from your 18 I/O lines with the exception of the odd voltages lines. D0-D7 would be better on a single 8bit port.

JDallas
May 10th, 2015, 09:55 AM
The schematic below shows an example of how to do the EEprom programmer on your Arduino, just adding two common 74'374 to latch the high and low address lines from the same data bus used to read and write from the EEprom.

Using loadable counters doesn't really add much so latching is really better when you consider that the chips are more common.

All these signals can be chosen from your 18 I/O lines. D0-D7 would be better on a single 8bit port.

PhilipA
May 11th, 2015, 07:26 AM
Typically the CAT28C65B is now unavailable old-stock, retired.

However, Atmel have an equivalent: http://www.mouser.com/ds/2/36/doc0270-16204.pdf

--Phil

PhilipA
May 12th, 2015, 04:40 AM
I've taken a new photo and sent it for evaluation.

I also had a thought this morning. I've never powered this thing up with the printer attached. I wonder if there's a possibility it hangs if it doesn't get a response from the thing? I'll have to bring my Variac in and power it up gently, it's never been powered up in the time I've had it, just sat on the side awaiting later attentions.

A thought on gathering data off the bus- I'll have to come up with something that requires data to be brought off the Arduino onto something else- it has a bottleneck of 115200 baud max on the UART and basically no onboard memory. It can be used to push data "away" from the PC rapidly, as code can be loaded onto it and executed. A different method to extract ~1Mhz signaling from the CPU will be required.

Also, looking at it, the 50-ish ns timing requirements for DRAM is a bit outside the system capability of the Arduino, the most granular it can time to is 1ms, and that can be a bit unreliable whilst the rest of the code is going on.

The direction forward might just be writing code for the thing to boot from and run its own testing.

Found a supply of 20-pin turned-pin DIL sockets which are excellent to make pseudo-chips from. It's tempting to fit the PROM location with a ZIF socket. There's enough space on the board.


--Phil

antiquekid3
May 12th, 2015, 05:23 AM
A thought on gathering data off the bus- I'll have to come up with something that requires data to be brought off the Arduino onto something else- it has a bottleneck of 115200 baud max on the UART and basically no onboard memory. It can be used to push data "away" from the PC rapidly, as code can be loaded onto it and executed. A different method to extract ~1Mhz signaling from the CPU will be required.

Also, looking at it, the 50-ish ns timing requirements for DRAM is a bit outside the system capability of the Arduino, the most granular it can time to is 1ms, and that can be a bit unreliable whilst the rest of the code is going on.

I have pushed the Arduino to a baud rate of 2M baud without issue. That was on an Uno if I recall. Also, you can get much more accurate timing if you stray away from the built in Arduino functions and work more in native C. Also, be sure to disable interrupts if doing anything special timing wise.

Kyle

PhilipA
May 12th, 2015, 05:26 AM
I thought the maximum data rate on it was 1.5Mbps if you leave the functions out of it?

I'm not very good at working with the code in that respect, I'll admit. I'm still learning the thing really (I have an Uno) and have only really been using the regular libraries.

--Phil

PhilipA
May 13th, 2015, 09:02 AM
Figured what the hey

Brought the Variac in, hooked up the printer and powered it up gently

It then kindly proceeded to run away, went dead short and blew out the +5v rail on the PSU.


Now I gotta find the last remaining chopper transistor.. I think I have it somewheres.

--Phil

PhilipA
May 14th, 2015, 07:32 AM
Pulled the printer to bits. Found the culprits for the smoke- a resistor (might be an inductor, not sure) and a couple caps.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150514_102459.jpg?m=1431617443

Printer got a clean-out and is going back together once I can figure out where the loose nut that was rattling about int he back is supposed to go.

It'll be on the "DO NOT PLUG" list for a while yet. Need to order some more chopper transistors before I can continue.

--Phil

PhilipA
May 14th, 2015, 04:26 PM
Thankfully, I have found the last remaining chopper transistor.

I shall fit it this weekend. I have brought the thing home so I can work on it more easily.

I shall also be fitting fuses to the +5V feeds.

Phil

PhilipA
May 15th, 2015, 03:28 AM
That is a good idea. I will be able to see if the boards are still working after the printer shenanigans.

The wife was nonplussed again at the introduction of another piece of, er, vintage equipment being introduced to the kitchen table...

I have a couple 20 pin dil sockets coming in the mail, the type that have the turned pins. They plug into sockets nicely.

Going to see also about getting the eeprom memory and build it up on a small board in order to create a custom boot prom.

Phil

PhilipA
May 16th, 2015, 08:05 AM
I do like that a lot. Neat trick, hadn't thought that hooking it in and paging it with addresses available at pins.

Unfortunately I don't have anything "laying around", as my old bench was in the UK and very little of it made it with me to the USA. I'll have to pick up some logic, but I'm going to have to order the EEPROM so I'll get them at the same time, grab a ZIF for the board and probably the EEPROM

I had the power supply in bits again this morning. Got the 5V rail operational again.
http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150516_102134.jpg?m=1431791863

Which means, repopulated (I had to strip the chassis down in order to be able to get it light enough to carry) the thing is back to the same old tricks. Raster.. pause..beep.

http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150516_103619.jpg?m=1431791896

Buttoned it back up for now. I'll have to see about ordering the rest of the bits next week. Leave those schematics up if you don't mind and I'll set about building a rig. I think the plan you have is good. Keep the new EEPROM, most of the original boot code, paged out for greater capability

--Phil

JDallas
May 16th, 2015, 12:41 PM
...I do like that a lot. Neat trick, hadn't thought that hooking it in and paging it with addresses available at pins.

Unfortunately I don't have anything "laying around", as my old bench was in the UK and very little of it made it with me to the USA. I'll have to pick up some logic, but I'm going to have to order the EEPROM so I'll get them at the same time, grab a ZIF for the board and probably the EEPROM...

Give me a week to see if I can simplify it further. Is there clearance when the CPU card is inserted in its slot for a daughter card to stand atop the CPU Card prom socket?

Funny thing is that last year I was in a discussion about how CP/M should have been shadow-rom'd into a smaller address space and use exactly the idea of switching pages to put 24KBytes of CP/M 2.2 into a small 4KByte top of 64KByte memory map. This 8KByte EEprom in a 512byte Prom rang those similarities loudly. So I'll be thinking along several paths for what can be done with this system at least until someone disk-images a Lanier floppy that you can use.

Another floppy-free way to load CP/M would be to put a Shadow Static Ram in an unused location in the 8080s 64KByte address space. With RD/WR access, it could have a Nor Flash Rom in the same address space so that it could fetch CP/M into Dram memory by paging the Flash Rom and copying it into Dram. All sorts of ways to do that. The Flash Rom could even be used to store the files and programs for the system, making it less reliant upon floppies.

PhilipA
May 16th, 2015, 04:11 PM
Thankfully yes. The cpu card is the furthest to the left,leaving component-side access of several inches deep and the full height and length of the cpu card available.

I shall hold off for now, however a ZIF socket for the boot prom is in order, regardless.

Phil

JDallas
May 17th, 2015, 05:52 AM
Shadow Rom Banking the 8KByte EEprom as a 512Byte Prom:

I've updated this message is the improved use of JP (HL) as the single byte opcode to use in the EEprom Page change block.

Below is a schematic for a small Lanier 103 CPU Card 20pin Prom socket to 8KByte EEprom plug-in. It uses a two-stage capture off the address bus to supply sixteen page addresses for the 8KB EEporm, residing in the 512B address page of the original prom. A single stage might suffice but as we don't have a schematic, this two-stage design works safely.

The concept is that the rig detects access to the highest 16 bytes of the 512byte prom address space. When A4-A8 are all high, and CS# is active low, the program counter has addressed that range of 16 bytes. The *trick* is to capture the low address lines A0-A3 (nibble) and latch them in as the page select A9-A12 on the EEprom. Thus the selection of 1 or those 16 bytes in high prom space, will set the page address to the EEprom when that cycle is over.

For example, access to address 01Fx will the the page of the EEProm to the nibble value x. Thus 01F0h selects page 0 or 15, 01FCh selects page 12 of 15, and 01FFh selects page 15 of 15. The trick is to not switch the page until that access is completed, thus when CS# and A4-A8 all being high, deasserts, that's when the EEprom page is updated. As it needs A4-A8 as they're disappearing, the two stage latch is used to temporarily hold A4-A8 anytime CS# goes active on the prom, holding it in the first stage. That value is never used unless the current access is to the high 16 bytes of the prom, which triggers a LOW signal to the second stage latch, that clocks in the address saved on the first stage latch as CS# and A4-A8 deassert at the end of the access cycle. That updates the EEProm page.

That's the hardware side.

On the firmware side the access to the 16 byte page select range, needs to have a single byte instruction that changes the program counter out of the range afterwards. Previously I discussed RST N and RET instructions and how they'd be used. As both require a dummy stack operation, I've realized that using a JP (HL) instruction is more advantageous. Its single byte, Z80 and 8080 instruction, and it allows a jump to any address in another page, as the code example below will illustrate. If the current page is loaded into a register other than HL, a call can be made to a routine in another page, and it can use the register to find its way back. I'll add a code example to illustrate that too.


;every 512byte page would have this at the top 24 bytes FROM 01E8h-01FFh:
ORG 01E8h
;E holds previous page as F0-FF value
01E8H 1601 PAGRET: LD D,01h ;high page select address 01Fxh for accessed by dummy return
01EAH D5 PUSH DE ;setup return address on stack prior to RET goes to PAGEx
01EBH 21EE01 LD HL,RETURN ;routine to execute in the destination page
01EEH C9 RETURN: RET ;enters PAGEx via the return address on the stack
01EFh F0 PAGE: DB 0F0h ;address of current selected page of EEProm
01F0h E9 PAGE00: JP (HL) ;select page 0 of 15 and execute code at (HL)
01F1h E9 PAGE01: JP (HL) ;select page 1 of 15 and execute code at (HL)
01F2h E9 PAGE02: JP (HL) ;select page 2 of 15 and execute code at (HL)
01F3h E9 PAGE03: JP (HL) ;select page 3 of 15 and execute code at (HL)
01F4h E9 PAGE04: JP (HL) ;select page 4 of 15 and execute code at (HL)
01F5h E9 PAGE05: JP (HL) ;select page 5 of 15 and execute code at (HL)
01F6h E9 PAGE06: JP (HL) ;select page 6 of 15 and execute code at (HL)
01F7h E9 PAGE07: JP (HL) ;select page 7 of 15 and execute code at (HL)
01F8h E9 PAGE08: JP (HL) ;select page 8 of 15 and execute code at (HL)
01F9h E9 PAGE09: JP (HL) ;select page 9 of 15 and execute code at (HL)
01FAh E9 PAGE10: JP (HL) ;select page 10 of 15 and execute code at (HL)
01FBh E9 PAGE11: JP (HL) ;select page 11 of 15 and execute code at (HL)
01FCh E9 PAGE12: JP (HL) ;select page 12 of 15 and execute code at (HL)
01FDh E9 PAGE13: JP (HL) ;select page 13 of 15 and execute code at (HL)
01FEh E9 PAGE14: JP (HL) ;select page 14 of 15 and execute code at (HL)
01FFh E9 PAGE15: JP (HL) ;select page 15 of 15 and execute code at (HL)


Example: In EEprom page 4 it needs to jump to address 0B8h in page 12.


P04: 218000 LD HL,GETCHR ;load the address of function on another page in HL
P04: C3FC01 JP PAGE12 ;go to 01FCh to execute JP (HL) and switch to page 12
P04: 01FCh E9 PAGE12: JP (HL) ;load the destination address into the program counter
P12: 0018h GETCHR: ;Page 12 is loaded by hardware as the previous instruction is fetched.
;execution continues within page 12 and the address of function GETCHR.

To do a call and return, the current page is loaded into a register for the function to utilize:


P04: 1EF4 LD E,0F4h ;load return page number
P04: 211800 LD HL,GETCHR ;load the address of the other page function in HL
P04: CDFC01 CALL PAGE12 ;go to 01FCh to execute JP (HL) and switch to page 12
P04: 01FCh PAGE12: JP (HL) ;load the destination address into the program counter
P12: 0018h GETCHR: ;Page 12 is loaded by hardware as the previous instruction is fetched.
P12: ... C3E801h JP PAGRET ;return to original page in E and return address on stack
P12: 01E8H 1601 PAGRET: LD D,01h ;high page select address 01Fxh for accessed by dummy return
P12: 01EAH D5 PUSH DE ;setup return address on stack prior to RET goes to PAGEx
P12: 01EBH 21EE01 LD HL,RETURN ;routine to execute in the destination page
P12: 01EEH C9 RETURN: RET ;enters PAGEx via the return address on the stack
P12: 01F4h PAGE04: JP (HL) ;load the destination address into the program counter
P04: 01EEH C9 RETURN: RET ;enters PAGEx via the return address on the stack
P04: (original return address)


Here's the schematic updates:
(1) Lanier CPU prom adapter2.jpg
(2) Lanier Arduino EEprom Burner2.jpg
(3) Lanier Arduino Dram Tester2.jpg

(1) Shows to two-stage address latch.
(2) Shows the previous updated with I/O counts and bus lines for clarity.
(3) Shows the previous updated with I/O counts and A7 added for 64Kbit Drams too.

PhilipA
May 22nd, 2015, 11:38 AM
Paycheck went completely to bills recently. Going to be ordering some replacement parts soon.

--Phil

PhilipA
May 28th, 2015, 05:43 AM
First of the new bits arrived in yesterday.

http://www.oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150527_223344.jpg?m=1432784131

Going to mount flying leads into the pin holes and use it as a plug to connect to the boot PROM socket on the CPU board, nice thin (turned) pins.

--Phil

PhilipA
May 28th, 2015, 05:04 PM
http://oldbrokenjunk.com/gallery/var/resizes/Lanier_103/20150528_103946.jpg?m=1432827632

This arrived today also.

Phil

JDallas
May 29th, 2015, 12:48 PM
I took a look at the two circuits, (1) The Arduino remote EEprom programmer and (2) the In-Circuit paging EEprom.

There are a few chips common to both designs suggesting that it might be worth looking at combining the two into to one board so that you can more quickly reprogram the EEprom while plugged into the Lanier CPU card.

The isolation logic might not make it worth doing, but give me the weekend to look at it and post an small schematic of the combination.

A more interesting alternate would be to have one of the EEprom resident paging-monitor commands, allow it to program itself from a TTL serial-clocked HEX file transmit. More code, less circuit. You'd program the EEprom originally in the Arduino, and when tested ok, you just send a hex file from you arduino and it uses the CPU card's 8080 to program the EEprom. The board would have to include another "trick" to create a WRITE signal for programming and be able to detect the EEprom's BUSY signal to time it right. Using a tiny cable with GND, DAT, CLK (like SPI interface) could make it a lot easy to work with (less chance and accidently yanking the EEProm rig out of the board.

My goal is to use Tricks rather than using signals that are not on the 20pin prom socket. Might be ODD.

PhilipA
May 30th, 2015, 08:31 AM
Okay. I'm game for that, sounds like it could work well.

I was having a thought also on the Arduino and communications therein. It has 4 UARTs onboard and could be used as a base for serial i/o on and off the CPU board. There should be enough digital i/o lines to support hooking it up to the bus- programmed in C it should be fast enough to become an expansion board, useful for building a software-based prototype, at least.

--Phil

JDallas
June 1st, 2015, 01:17 PM
I started designing a circuit for your Lanier 103 CPU card's 20 pin prom socket. The given rule for this design is that it only uses the limited signals in the prom socket; no jumpers to get extra signals are allowed. Thats { A08-A00, D7-D0, CS#, VCC, GND }.

Its a more advanced version, but its still limited to the 512 byte address block of prom socket. To access additional on-board EEprom or Static Ram memory, it uses either dedicated read and dedicated write addressed registers or a mode select for its paging block of continuous 256 Bytes of static ram. It can also program the EEprom in-system using the 8080 processor running a small program loaded into its ram, while the Arduino or other remote host transfers the program in from a shift register. The 8080 on the Lanier does the shift clocking. It can also be used to transfer data from the Lanier to the Arduino-or-other-remote-host.

And because there is more control logic controlling more operations, it uses a simpler prom paging method than the previous design.

PhilipA
June 1st, 2015, 03:59 PM
You have been having fun with this challenge, it seems.

I look forward to building and troubleshooting it.

Phil

JDallas
June 1st, 2015, 04:30 PM
Its a fun puzzle... I'd call it the digital engineer's equivalent to building a model ship inside a bottle. ;)

PhilipA
June 1st, 2015, 05:50 PM
In this instance, it would seem that the full size ship is being constructed inside the bottle, but only because the bottle has been made bigger on the inside.

--Phil

PhilipA
June 3rd, 2015, 02:09 PM
The EEPROM is fairly forgiving, in terms of programming. You can give it a single byte, or up to 128, I think, within the time window of "write"

I can get the parts put on order this weekend, unless you change your mind; breadboard it once they come in as proof of concept.

--Phil

PhilipA
June 4th, 2015, 05:52 AM
Being as I'm not that hot with C# you may have to introduce some wait states on the logic for communication with the Arduino.

So long as that can operate at less than the bus speed, we should be good. The Arduino, when running the library functions performs buffering checks to ensure the lines are all correct before presenting the output.

In C# you can drive the lines directly without checking and thus work a lot faster. Let me know your thoughts.


--Phil

PhilipA
June 4th, 2015, 11:14 AM
I have no qualms about which SRAM to use- so long as it's through-hold DIP I'm good. I'll let you pick. So far it's a wide open table because nothing's been purchased. Likewise the EEPROM if you wish to change it.

The Arduino is good up to +20V on each pin before it is damaged. I think. The "ready" signal if it is needed, once its address and data buses are stable is easy to provide.

--Phil

JDallas
June 6th, 2015, 10:45 AM
I confirmed that all the 74LSxx Plastic DIP chips are active production via the Texas Instruments website. No parts should be difficult to order when the schematics are done. Since I'm only addressing 4 registers in this design, I have to do more address decoding to select them. I'll use a 74'11 triple AND gate with three inputs each, to do the decoding. Basically if A2-A7 are high, and A8 is low, then A0-A1 select one of the four registers. I'll post some schematics next week.


Previously:
I did the 8K eeprom + 2K static ram changes to the schematics, system diagram and register map.

The original prom address block, 0000h-01FFh, it is now split into two 256 byte blocks; eeprom in the low half, 0000h-00FFh, and ram and the high half, 0100h-01FFh. The register block is in the top of the eeprom at addresses 00FCh-00FFh. It only consumes 4 bytes of each 256 byte page.

I've switched to 74'273 latches so I can clear them with a power-on-reset (POR#) or mode register bit to assure eeprom and ram always start on the same base page. It also assures that the flag register is selected (FLG#=0).


Previously:
Your suggestion to have the Arduino drive the cable lines directly is a good one.

The Arduino transfer during eeprom programming would probably be something like this:
The Lanier asserts a handshake signal requesting the Arduino to send a byte. The Arduino takes the next byte to be programmed and latches it into its shift register and then signals the Lanier that a byte is ready with a handshake line.

The Lanier then clocks 8 bits down the cable, reads the arriving byte and stores in a 128 byte buffer in the static ram. When 128 bytes are buffered buffered in ram, the Lanier temporarily delays another byte request and reconfigures to program-mode, copies the 128 bytes from ram to the eeprom and waits until it switches from busy to ready. At that point it requests the Arduino to send another 128 byte block as it repeats the process above, block by block.

Note that the eeprom has to be programmed by the Arduino to start with this firmware to thereafter program the eeproms in-circuit. So the Arduino will likely have to jumper into this board to run the program by the Arduino. I might add a connector to make that easier.


Previously:
The firmware to make the Lanier program the eeprom requires two pieces of code: (1) runs in eeprom and (2) runs in static ram. Ram allows firmware to be fetched while the eeprom is busy programming a 128 byte block.

Where Do.Rom is eeprom code and Do.Ram is static ram code:
(0) Do.Rom copies Do.Ram from rom, to static ram.
(1) Do.Rom downloads 128 bytes of new code from the Arduino into a ram buffer.
(2) Do.Rom jumps to Do.Ram where it changes to program-mode.
(3) Do.Ram writes the 128 byte buffer into the eeprom.
(4) Do.Ram waits until the eeprom is ready by looping on the BUSY flag.
(5) Do.Ram then changes out of program mode.
(6) Do.Ram jumps back to a Do.Rom entry point.
(7) Do.Rom exits if done, otherwise loops back to (1).

As noted previously, it possible that the Do.Ram code might also manage the download and buffering from the Arduino. There is only 128 bytes for code in the ram as it holds 128 bytes for buffer too. If there is codespace available, Do.Ram could be downloading a new buffer while monitoring the BUSY signal. The eeprom would likely be ready before the download is complete, but that's not a coding problem.


Previously:
Theory of Operation: The Lanier (Host) has these signals to interface in the prom socket:
A00-A08 to address 512 Bytes of original Prom space
CE# to select the board
D0-D7 to originally fetch|read the prom.

The host data bus connects to an internal data bus through a 74'245 transceiver to access four special registers. A08 selects the static ram when high and the eeprom when low. A00-A07 address a 256 byte page of either device.

The eeprom and ram blocks are independent, a necessary feature to allow the Lanier to program the eeprom while running the program in ram.

A mode register latches values to control the board. A flag register allows the Lanier to read status bits.

PhilipA
June 8th, 2015, 05:31 AM
Sounds good, apologies, I wasn't around the entire weekend due to family things.

--Phil

JDallas
June 10th, 2015, 06:11 PM
I've got the circuit done but the odd way the Lanier CPU card addresses the original prom needs to be revealed via schematic capture before I'll really know that the data will write into the chips on the board.

The problem is basically the T.I. 512 byte prom. It has address lines, data lines and one control line: CS#. We saw a little bit of the logic glue around that 74'48 (whatever) decoder they used. At some point we're going to have to capture that part of the circuit to be sure.

Probably all they did was delay the decoder chip select line until the RD# signal was valid so it didn't drive data onto the bus as soon as the address lines decoded that block of memory.

As this circuit addition does writes, I have to confirm that the CPU card doesn't disable that decoder during write cycles (just to prevent bad code or bugs writing data at the prom while the prom is writing data back at the bus. Many ways to clean that up of ignore it... I don't know which solution AES chose.

So, there is no reason to buy some chips if the Lanier card messes with this approach. Schematics from a retired AES employee would be ideal... but we'll likely have to do it the hard way. Not really a good time for me to be focusing on that.

An alternate trick would be to imagine a simple tester board that would give us the information or perhaps figuring a way to scope it out.

It might be that removing the DMA controller temporarily, and tying a DMA REQUEST line active, would get the 8080 to snooze on NOP instructions internally, allowing you probe the data and address bus with the Arduino. Removing the DMA controller assure it won't relinquish control back to the 8080 or that another DMA line takes priority over our choice. I really don't need to read the DMA controller chip that deeply unless I have to code for it.

PhilipA
June 11th, 2015, 12:37 PM
I can spend a bit of time undoing the circuitry around the PROM, I started doing it already.

--Phil

PhilipA
June 15th, 2015, 12:01 PM
I was considering that as an idea, and it's a good one. If the board is extended out to fit the same form factor, there is a nice un-screwable panel on the back of the case that could be removed to give access to flash etc.

I'll try start tracing the bus connectors at some point this week- have a large recap project going on right now.

--Phil

PhilipA
June 25th, 2015, 09:58 AM
This is going to have to go on pause for a short while longer until a bunch of family and work stuff gets out of the way.

--Phil

PhilipA
July 6th, 2015, 06:19 AM
okay, have cleared a workspace for the machine, with access all around and power. It's a bit heavy for the table but it should do. Can get back onto it now..

--Phil

JDallas
July 6th, 2015, 07:28 AM
Great!

I'm doing a schematic capture on another system's board testing out the technique I think will make the Lanier boards more efficient to do. This other board doesn't have as many traces running mysteriously under chips as the Lanier boards, but the technique addresses all those hidden pieces and should organize piecing them back together, better.

Until then, some schematic information about the CPU card's address decode and signals on the bus could validate that rig design that is standing by.

Getting the bus information may allow the "rig" to be done on a sawed-off S-100 prototype board as the bus edge connector on both systems are the same. Just cut the left was right sides of the S-100 board profile to match the connector offset and card width and you have it. Of course this board will be shorter that the other Lanier cards but there will be plenty of room on the board.

Might have to start watching e-Bay for a S-100 Prototype Board.

I used one in 1979 to build a General Instruments AY-3-8910 programmable sound generator board (schematic plans published in various articles).

PhilipA
July 6th, 2015, 07:57 AM
I saw a site that had S-100 prototyping boards available whilst I was thinking about expansion units. I'll see if I can dig it up.

If not I can solder (laboriously) flying leads onto the backplane and bring it onto breadboard for now.

--Phil

Paul Sampson
November 3rd, 2015, 04:22 AM
i recently acquired an AES Plus (aka 103), and found this thread by accident, when trying to find out more about it. Sadly, I have no disks, and haven't yet tried to power it on. I am suspecting that it will be in a similar shape to the one in this thread.

PhilipA
January 23rd, 2016, 06:34 AM
Paul,

Due to Life(tm) getting in the way, mine has sat on the desk untouched for the past half year. I need to get back to it- if I find a way to build an interface cheaply enough to boot something like CP/M, I'll post it here.


--Phil

PhilipA
October 20th, 2017, 06:26 PM
My, oh my, oh my. Where did the time go?

I know where it went. Work, life, death, court, houses and lawyers.

However, I have managed, for the first time in two years, to gather up something resembling a work space (now in my new house, woo!) and have dumped the Lanier into a table, pulled the CPU card out and have made a start on making a circuit diagram.

I've also got a logic analyzer on its way, which may or may not assist in the undoing of this device.

41408

Here goes nothing.

Phil

falter
October 20th, 2017, 07:50 PM
Brings back memories of my Alphaplus 14:

41409

It would only typewrite on the built in printer.. no sign of life onscreen and no attempt to boot. I talked to an engineer who worked on them and he told me finding boot disks would be impossible. Sadly I ended up getting rid of it in a move (took up too much space at the time) and wasn't all that interested given I'd been led to believe it was just a Word Processor anyway. Boy that thing was a beast!! Hope you get yours going!!

PhilipA
October 20th, 2017, 08:02 PM
Looks to be much the same kind of machine. Can't see them deviating too much from the innards as this one has.

I'm going to try mock the boards up in kicad and go from there.

Phil

zombienerd
October 20th, 2017, 08:28 PM
Wow.. Great thread. Obviously someone early on deleted all their posts or they were otherwise removed. Unfortunate, as you seem to be having a very one way conversation for the first 10 pages :)

PhilipA
October 21st, 2017, 03:47 AM
Yeah, shame. I forget who it was who was commenting; it was a good while back. I guess they deleted their account for the system to not show their posts at all, rather than *deleted post* placeholders.

Phil

PhilipA
October 22nd, 2017, 06:23 PM
41464

Beginning to build the schematic for the CPU card in KiCad.

Slow progress because a lot of the chips aren't in the library.

Phil

PaddyIreland
November 4th, 2017, 12:18 PM
I have boot disks for the AlphaPlus 12, and 14. I have a complete Alphaplus 12. The Alphaplus 14 disks also boot the 7100. I also have boot disks for the 7200 and 7300. As well as CPU's.

PhilipA
November 7th, 2017, 04:13 AM
I suppose the question there is would any of those boot this machine? Then, are you able to make copies, then are you willing to make copies? :)

Phil

PhilipA
November 11th, 2017, 06:53 AM
I decided last night to power up the Lanier. It's been off since, what, maybe some time in 2015. Took the lids off and pulled the PSU out, unhooked the machine from it, eyeing the old Sprague capacitors.
41900
Ran it up gently on the Variac, watching the voltages. Carried on bringing it up and everything was as stable as it ever was.. 5.04V, 12.00 being particularly stable and accurate still.

Given that everything was present and correct, I reconnected and powered it up.

41901

Got the logic analyzer hooked in on what looked most likely to be the bus on the backplane. Lots of nonsense, coupled with the floppy drives going totally nuts.

41902

Tried to see what was going on. Removing the CPU and address decoder stops it from freaking out. It's random though. I'm thinking I might have to remove every chip and test. If I'm going to do that I'll socket them all.

Would any of the 8080's support chips (or the 8080 itself) be damaged by being powered up without the +5V rail present? The psu had failed previously and the 5V rail was at zero.


Phil

PhilipA
November 14th, 2017, 05:12 PM
Under instruction, here are the voltages present.

41967

-27 = -33.68
+27 = +33.65
+15 = +14.96
-15 = -15.14
+5 = +5.14
+12 = +12.03
-12 = -11.97

No more than 0.006VAC ripple on any rail.

TP1= +5.14
TP2= +5.07
TP3= +12.02
TP4= +7.27
TP5= +14.95
TP6= +7.23
TP7= +6.64
TP8= -14.69

Phil

PhilipA
November 15th, 2017, 08:22 PM
Powered it up with everything plugged, and it went a bit weird.

Lost the -12V rail.

Pulled the video card, all voltages nominal. Lightning-bolt-question-mark LED lights up. (What does that one mean? Fault?)

Pulled the RAM off, checked it for shorts, none found. Board still makes -12 rail collapse.

-5 appears to be created by putting a diode and 330 ohm resistor from the -12 and shorting it to 0 with a Zener. I think the Zener had gone bad. Shall pull it out tomorrow, get the numbers off it and check.

Phil

PhilipA
November 16th, 2017, 03:18 PM
Yup, standard 500mA 5.1V Zener. With one leg pulled, all the RAM out it switches on and comes up (to completely blank screen of squares- expected), with a beep until the floppy drive clicks and the lights come on.

I'll get a Zener, refit the RAM and see what it does.

Phil

PhilipA
November 16th, 2017, 06:45 PM
Well, that was masking another problem.

The -15 rail (that the -12 is derived from) is hitting crowbar when it's loaded with all the cards. Next up is to find why. Power supply in bits again.

Phil

PhilipA
November 16th, 2017, 07:32 PM
Aha. Main smoothing capacitor for the -15 rail gone leaky. Soldered in a temporary replacement (15000uF 50V) on a couple flying leads and bingo. Stable voltages, with all the cards in and drives running. Tweaked to within 0.01V on all rails.

Still does the click click clunk click thing occasionally. Periodically beeps. Not producing reliable results with each power-up.

Derived -5V rails on video card at -4.89V and the CPU card at -4.96V.

Phil

PhilipA
November 17th, 2017, 03:59 PM
Redid the caps on the CPU card tonight. One had gone all melted, where I'd not noticed.

42004

Went ahead and replaced them all apart from the one by the timing crystal because I'm not sure how to read the value.

42005

Same behavior as before. Cold, it seems to behave. I pulled the CPU and I/O cards out. Just that powered up, long, solid beep that doesn't stop and the screen is filled with repeating random nonsense.

42006

Plugging the CPU card and I/O cards back in make the beep go all crackly, like AM radio static interfering with it.

With the CPU and I/O cards in, the screen always has the same pattern, though the contents of each location vary.

42007

Strange behavior. Definitely deteriorates the longer it's switched on.

Phil

PhilipA
December 1st, 2017, 07:50 PM
I put a handful of self-powered, self-referenced volt meters on order. They're coming in from China so no clue when they'll actually arrive but it'll give me a good opportunity to monitor the power rails all at the same time when the machine is running.

Phil

PhilipA
December 8th, 2017, 09:03 AM
Just placed an order for 2 8080A processors from Jameco. I have a feeling, looking at the datasheet, that the -12 (and subsequently -5) rails being inop will have toasted the current one.

--Phil

PhilipA
December 12th, 2017, 05:20 AM
42431

Well, that didn't change the behavior much at all.

Next up, pulling the backplane out and having the boards out on the desk so I can actually get probe clips on the thing.

Phil

PhilipA
December 28th, 2017, 06:24 AM
42700

Built a voltmeter panel. Powered up, everything coming from the PSU is stable and within tolerance. Still the same crackling beep for about 30 seconds, then it goes silent. Didn't run it much more than that to see if it changed as it warmed up, will do that tonight and have a poke about on the video and CPU boards for everything looking correct. Next task then will probably be to pull the backplane out and sit it on the table so I can clip to it with the logic analyzer.


--Phil

Quincy56
February 8th, 2018, 11:28 AM
I worked for Lanier for years repairing these in the field. They do NOT run CP/M, but a proprietary OS. I used to have some disks for them, but I haven't seen them for years. Probably tossed them at some point.

John


42700

Built a voltmeter panel. Powered up, everything coming from the PSU is stable and within tolerance. Still the same crackling beep for about 30 seconds, then it goes silent. Didn't run it much more than that to see if it changed as it warmed up, will do that tonight and have a poke about on the video and CPU boards for everything looking correct. Next task then will probably be to pull the backplane out and sit it on the table so I can clip to it with the logic analyzer.


--Phil

PhilipA
February 16th, 2018, 09:00 AM
If you do ever come across them, let me know!

I've had to pack the Lanier back in the cupboard for the moment (prep for visitors) but it'll be back out after because I want to find out why the beep tone when it's powered up warbles so badly. If you power one up sans diskettes, what would it do? Beep? Mine doesn't produce a steady tone, rather a crackling modulated beep, which sounds plain wrong...

Thanks


--Phil

Chuck(G)
February 16th, 2018, 09:01 AM
Lanier did offer a CP/M (just check the trade rags) option for the 103, but that wasn't the standard software. There was a sort of data migration program available between the two OSs as the file system organization was miles apart.

Many vendors added the option to improve sales, but it wasn't the prime driver.

PhilipA
July 4th, 2018, 01:24 PM
Had a bit of time and inclination to haul this out of the cupboard today. I'd bought a 40 pin DIP chip-clip, which necessitates removal of half of the frame to get to fit with the backplane still in the chassis.

Hooked it up. This morning, solid beep for a few seconds and I captured a bunch of data; unfortunately knocked the power out of the analyzer so lost everything. Tried again, got very little more.

Replaced a tantalum capacitor that was cracked but that didn't improve things. One new behavior, white noise static from the speaker and some trash on the screen (nothing sane, just looks like the sync lines went funny) and now it's pretty much dead again.

It would help if I knew what it was actually supposed to do...
From what I can tell, beep until a disk is inserted. However, it's become more and more random as time goes by.


Phil

PhilipA
July 4th, 2018, 07:50 PM
I had a thought earlier. After a frustrating day of broken stuff, I decided to put the CPU card into the freezer for a few minutes then fire up the Lanier.

I was greeted by a long (somewhat crackly) beep and the screen woke up and displayed junk!

Definitely some bad silicon. I've got 4 8216 bus transceivers (AES must have recognized them as an issue because they're socketed) which are possible culprits. I'll grab some freeze spray and start doing individual IC's, I think. Get it nice and warm then cool them off and see if any make a marked difference like freezing the board did.

Phil

PhilipA
July 5th, 2018, 06:48 PM
Agh, frustrating. In the house move I've lost the spare RAM I had for this. I'm pretty sure I had put it in a bag, a padded anti static envelope, and tucked it inside the Lanier.

I'm beginning to think I took it out so I could work on it and it it some place safe, then it got split up when we moved.

Not happy, that's a lot of steps to trace backwards over several years. My memory isn't what it once was.

Phil

Chuck(G)
July 5th, 2018, 08:01 PM
Phil, 8216's are pretty easy to come by, since they are/were made by several outfits. My recollection is that they're power hogs and ran hot as a two-buck pistol--and Intel-branded ones were the worst. Try AMD, Siemens, or NEC versions, if you can get them.

PhilipA
July 6th, 2018, 03:47 AM
I used Samsung 4164 chips and bent the MSB pins over to ground. I am not sure if they're good.

It had NEC chips in before.

Chuck(G)
July 6th, 2018, 08:05 AM
This is to replace the 4116 chips? I don't know about that.

PhilipA
July 6th, 2018, 02:13 PM
Yessir. The -5 pin on the 4116 is the MSB bit on the 4164.

Lift the pin up and fold it over and solder it to the ground pin to hold it low (it's not used by a machine that has 4116 memory).

Most 4164 is faster than 4116 so 200 or 150ns memory works.


Phil

Chuck(G)
July 6th, 2018, 03:05 PM
I was under the impression that the internal organization was a bit differen (number of rows and columns). I'm surprised that you can get it to work.

PhilipA
July 6th, 2018, 06:07 PM
No, all the other data lines are pin compatible.

I bought a can of "air", that you use to blow the dust from electronics.
Held upside down it ejects the contents as fluid, evaporating rapidly and cooling significantly. Switched the Lanier on and started having a go at the bus transceivers.

Spray one and the beep returns. Spray the other and it stops crackling for a while, and the screen fills with very regular nonsense rather than random junk.

I see this as a good thing. It means definitely I need some 8216 transceivers. They recognized the things would be trouble as they're all socketed...

Phil

Chuck(G)
July 6th, 2018, 07:43 PM
8216 failures aren't uncommon. Even when they work, they run hot--but go with the second-source ones, rather than genuine Intel.

PhilipA
July 6th, 2018, 09:37 PM
I was reading that, but there don't appear to be that many on offer that I found.

I bought some little aluminum heat sinks designed for modern video RAM to attach to them also, to try extend their life expectancy.

Any suggestions on alternative manufacturers of the same part? I had read that the closest one doesn't share 100% functionality.

Phil

Chuck(G)
July 7th, 2018, 06:06 AM
Have you checked Anchor Electronics? They list the 8216s for $1.60.

If you want to pay for it, there's an eBay seller with NOS DP8216s in quantity: here (https://www.ebay.com/itm/Vintage-National-INS-DP8216J-4-Bit-Bidirectional-Bus-Transceivers-DP8216-8216/263420006920?epid=4012607001&hash=item3d550e5208:g:OAgAAOSwMfhaTpdN) It's probably a pretty good bet that these are compatible, as NSC also offered the 8080A.

PhilipA
July 7th, 2018, 07:27 AM
I did; anchor's search engine returned no results for "8216", so I moved on.

Chuck(G)
July 7th, 2018, 07:52 AM
Anchor doesn't put its entire inventory online. Look to the "Price List" for a PDF of their paper catalog.

PhilipA
July 7th, 2018, 08:31 AM
I see this now. I think what I'll do is buy a handful of them from Anchor and replace as required. The heat sinks should help, the air flow around that board is reasonable. It's not going to be a high-hours machine.

PhilipA
July 10th, 2018, 05:08 PM
Placed an order for most of the chipset from Anchor. Orville was most pleasant and very helpful.

Hopefully the bits will be here soon and I can try again.

Phil

NeXT
July 10th, 2018, 08:27 PM
I am really enjoying reading this. I wish you the best of luck.

PhilipA
July 11th, 2018, 04:31 PM
Thanks. It's been dragging on long enough, in and out of storage as I get enthusiasm/money/insight/information (delete as applicable) for it.

The goal here is to get to a stage where it does what it's meant to without discs, then try and get some discs...


Phil

PhilipA
July 13th, 2018, 03:14 PM
Okay, so I replaced the bus transceivers. That got me a result: less than before. No beep, nothing.

Replaced the rest of the chipset, same deal.

Checked the clock generator as it does get hot.

46687

Phase 1 and 2 as pulled up from the pins on the 8080.

Pulled the RAM. Same result, video card init with trash on the screen.

46688

So, I put the board in the freezer.

46689

Crackling beep but no organized nonsense on the screen like last time. Argh. I'm trying to be positive. I know at least it's not the bits I changed and now I have spares. Back to the board again.

Phil