Category Archives: Hardware

AVM B1 hacking

Intro

Transputers were created to control everything. They were not just CPUs… they could do the video output, control interfaces or even storage devices. So no wonder there were ISDN and SCSI controllers available using transputers.

One of those transputer-sporting controllers was the AVM B1 active ISDN card. Back in the PC-AT days, handling the ISDN protocol and traffic could easily bring down your super-cool 80386/25 without a problem, especially if this machine should also fulfill server tasks.
So active (vs. passive) ISDN cards were the cure to that issue. They featured a CPU of their own with some RAM to buffer the data coming in at the maximum ultra-fast rate of 128kbps 😉

In case of the the AVM B1 the CPU was a transputer (T400) and that had reign over a whopping 1MB of RAM! When the card was installed and the DOS driver booted, it actually loaded the transputer code onto the card like any normal transputer card would be fed with code – behaving like an Inmos B004 card and even using the same port addresses.
So in fact, the AVM B1 is a transputer card featuring an ISDN-part connected to one of the transputers links.

Using the usual tools for finding and checking a B004 compatible card shows this

> ispy | mtest Using 150 ispy 3.21 | mtest 3.21
# Part rate Link# [ Link0 Link1 Link2 Link3 ] RAM,cycle
0 T400b-20 43k 0 [ HOST ... ... ... ] 2K,1 1022K,6.

Weapon of choice


Ok, cool – so where do I get this card?

Well, AVM is still very alive-and-kicking but they’re not building these cards (using transputers) anymore… even if they wanted to, Inmos/SGS killed the transputer back in 1993. So eBay is your friend.

Anything to watch out for?

Yes! AVM build(s) 4 major versions of the B1: V1 to V4.
V1.x – Available as ISA and MCA version. The perfect choice! Everything important is socketed, no SMD parts.
V2.x – ISA version only. CPU & RAM is SMD. Ready to play with but not much to mod.
V3.x – ISA & PCI version. Updated version, same features like V2.x
V4.x – PCI version only. No transputer anymore. “StrongT” Controller… might hint towards a StrongARM based thingy.

Again: If you want to do all the hacks described here you have to get a Version 1.x card!

Enhance it! This is the easy part…

Ok, so I assume you fought hard to get a V1.x B1… it should look like this:
(If you acquired an V2.0 card which is smaller and has lots of SMD parts on it, check out Jonathan Schillings page (German), who did all the mods described here with a V2.0 card)

TheBeast

If you have your card in front of you, you might spot some differences. These are the first two and most obvious “mods”:

  • Change the T400 CPU (e.g. to a T425 or even T800)
  • Add more RAM

The T400 is OK to begin playing with this card, but it only offers 2K internal RAM (vs. 4k in the T425/800) as well as it has only 2 links: One connected to the C012 (and this going to the ISA interface) and one is available. I was under the impression, that AVM might use the other link to interface to the ISDN part, but that seems to be memory-mapped.
Changing to a T425 gives you more internal RAM (=speed) and the possibility to use 3 external links to talk to more connected transputers.
A T800 would be the top-of-the-hill, featuring an FPU which will speed up your Mandelbrot tremendously.

So here’s my T425 which replaced the stock T400. At about 8-10 Euros you should be able to get one at ePay…

CPUChanged

Next up, the RAM. Albeit the standard 1MB are plenty enough for nearly all fooling-around you might plan, there’s another Axel-Law to be followed: “If there’s an empty socket, fill it!”.
Also if you’re going serious and think about running the Helios OS on this card, you’ll better have 2MB!
You need to get eight 256Kx4 chips – they’re pretty common. They should be faster than 100ns… you’ll read later why.

RAMAdded

The eagle-eyed reader might spot the different makers of the RAM chips. That’s because I’ve salvaged 2 old ISA-VGA cards (each 512k) for the chips. All are spec’ed at 80ns.

Another run of the transputer find/check-tools now shows this

> ispy | mtest

Using 150 ispy 3.21 | mtest 3.21
# Part rate Link# [ Link0 Link1 Link2 Link3 ] RAM,cycle
0 T425b-20 43k 0 [ HOST ... ... ... ] 4K,1 2044K,6.

Not bad, huh? But there’s room for improvement… the RAM is accessed extremely slow, set to 6 clock cycles which is very conservative, even for 100ns RAM parts.

Faster RAM – The not-so-easy part…

Ok, up to here it was a piece of cake, wasn’t it? Now we’re switching to hard-core mode 😉

RAM-Access speed-up

For this you’ll need

  • Some soldering know-how – and a solder-iron of course
  • A calm hand
  • A continuity-tester or multimeter
  • A thin cutter
  • the pinout of a transputer (available in the data sheet (PDF))

As said before, the RAM access is very slow. It’s set to 6 clock cycles which is recommended for 150ns parts even at 20MHz. So for a start we should be safe going down to 5 cycles even with the standard 100ns RAM chips…
The RAM is controlled by the transputer itself – something the Intel-World introduced with the AMD Opteron years later!

When booting, the transputer checks how his “MemConfig” pin (position C8) is connected to the MemAD[3-7] pins to determine the RAM speed. The AVM B1 has its “MemConfig” connected to MemAD7 (position K10) which we want to change to MemAD6 (J8) in the first step.
The AVM B1 is a 4-Layer card and unfortunately the wire connecting those two pins is running in the 2nd layer from the back.

To find the trace we have to cut, hold the card in front of you looking at the component-side – like the first picture on this page. Now flip it vertically. You’re looking at the solder-side, the external connectors pointing to the left.
A closer look at the transputer pins shows you where to cut and the wire connecting “MemConfig” with “MemAD6” – Pin A1 is in the upper left corner, counting down[123456789,10], letters right [ABCDEFGHJK]!

RamSpeedMod

The cutting is a delicate thing to do. So be very careful not to cut too deep. I did it by cutting carefully once or twice and then checking with a continuity-tester if MemConfig and MemAD7 are still connected. Repeat until the connection is broken.
If everything went fine solder a wire between the two pins. Don’t make the wire too short, so we can change/move it anytime later. Another test shows this now:

Using 150 ispy 3.23 | mtest 3.22
# Part rate Link# [ Link0 Link1 Link2 Link3 ] RAM,cycle
0 T425b-20 43k 0 [ HOST ... ... ... ] 4K,1 2044K,5.

Yay! RAM’s accessed a bit faster now.

If that works and you’re like me (squeezing out the last drip of everything) you can try connecting to MemAD5 (J9). It worked for me.

Faster Link Speed – Not for the fearsome!

The next thing being rather sub-optimal is the link-speed… 43k/s is dran slow.

Using 150 ispy 3.23 | mtest 3.22
# Part rate Link# [ Link0 Link1 Link2 Link3 ] RAM,cycle
0 T425b-20 43k 0 [ HOST ... ... ... ] 4K,1 2044K,5.

That’s because it’s locked to 10Mbit/s by AVMs design even 20Mbit/s would be possible. Again, the transputer gets its configuration during boot-time via special pins. In this case LinkSpecial(A2), Link0Special(B4) and Link123Special(A4).

Not a big deal, but in case of the AVM B1 it’s not solvable by simply putting those pins high or low. That damn card is -again- a multilayer card and one of those layers is a ground-layer. No way in cutting a trace here.
The only solution is an in-between socket… a calm hand and pincers >:-)

socket_topOk, first you have to get another 84-pin socket. It’s not so easy anymore to find those… luckly, I had one spare collecting dust.

You might find an alternative socket meant for a Motorola 68881/2 FPU – but make sure it also has the inner pin-rows connected. Normally the 68881/2 has 8 pins less!
Another possibillity would be making a socket by glueing 10×1 pin-rows together. Not pretty but should do the job.

For the second step, you’ll need a caliper and (again) the transputer pinout. Orientate the socket so that pin-1 is in the upper left corner (the picture above shows this by the angled-corner in the center of the socket).
Now identify the pins LinkSpecial(A2), Link123Special(A4) and Link0Special(B4) as well as one VCC-Pin of your choice (I went for C2). We need to connect those 4 pins, pulling all Link[n]Specials high… which gives us 20Mbit/s link speed!

Note: If you plan to use the B1’s external links, you might consider not to change the external link-speed – read more about this in the next chapter.
In this case do not change Link123Special(A4).

So carefully cut the thin part of the pins A2, A4 (see note above!) and B4. Use a rasp/file to shorten the pin down to the thicker base (so the remaining part can’t connect to the original socket).
This is how it looks already having A4 & B4 cut off, A2’s still due (all marked red) – Do not cut the VCC-pin (C2, marked blue)! :

socket_pins_cut

When everything’s nicely cut, use a wire to connect them together – it’s a bit tricky to solder between the pins, so use a fine tip.
When you’re done, the socket should look like this:

socket_pins_solder

Now double check the modded pins for shorts to their neighbours!! Not doing so might kill your transputer/card!!

Cool! Were half done. For the third step we need to adjust the other side of the link accordingly. “The other side” is the Inmos C012 link-adaptor sitting in the lower right corner of the card -close to the ISA connector- labeled “IMSC012-P20S”.
Identify pin-15 and use a thin caliper to cut its leg as close to the board as space allows it. Bend the remaining leg up and check that there’s no connection to the card anymore.
Now solder a wire going from pin-15 to some VCC source. I’ve chosen Pin-20 of the 74ALS245 next to the C012. This is how it looks on my card:

C012_mod

[Note: Make your wire long enough so you can reach some GND pin with it. So you can reverse the mod easily.]

We’re nearly there! For the forth and last step, plug your transputer into your in-between socket and the whole thing into the original socket on the card like this:

socket_seatedt

Done! If everything was done right the usual tools should give you some serious number (well, it’s still far away from the theoretical 1.7Mbit/s, but at least 8.8 times faster than before):

Using 150 ispy 3.23 | mtest 3.22
# Part rate Link# [ Link0 Link1 Link2 Link3 ] RAM,cycle
0 T425b-20 378k 0 [ HOST ... ... ... ] 4K,1 2044K,5.

378k/s is faster than my crappy Gerlach-card (@239k), even the AVM is also just using 8 data-lines of the ISA bus (being a 16-bit card it only uses 4 lines from the AT bus… for IRQs 10-13).

So… what else can be done?

The external Connector

The AVM B1 v1.x cards feature a mysterious (green) connector:

ExpansionPins

It’s undocumented… up to now 😉 I just started tracing all the connections, but I’m happy to say that even AVM did everything possible to cripple the B1 card, they did not dumb it down completely:

Link[123] & Reset (not inverted!) are brought to the outside!! Error and Analyse are hold to GND, though.

Note: That said, AVM wouldn’t been AVM if they didn’t save a dime… the external links are buffered (at least) by a comparably slow 74BCT541 octal buffer.
This offers a signal propagation delay of ~9ns while INMOS recommended to use “F” type buffers, which offer a speed of about 3-4ns. So 20mbps are too fast for this chip. 10mbps should work though.

Here are my findings so far: [work in progress]

I started counting pins from the transputer, zig-zag, downwards. Interesting things coloured green.

1 2
o o
reset o o
o o
o o
o o
o o
PEB2070
o o (to its pin 10)
Link3Out o o
Link2Out o o
Link1Out o o
Link3In o o
Link2In o o
Link1In o o
GND o o
o o
GND o o
o o
33  34

Motorola M8120

Preliminary, yet lame, M8120 Page

Hi! You just stumbled across our very basic info page about the Motorola M8120 System. Some fine day this will all be redone in 100% Flash…NOT! Anyhow, this is a quick hack but should be sufficient to give you as much info you need about the system.

[For our German readers: Jaja, wie es aussieht, gibt es momentan hauptsächlich deutsche M8120 Besitzer, was man wohl TWC verdanken muß, aber das kann sich ja ändern… sollte jemand Probleme mit Englisch haben, kann er sich gerne an mich wenden.]

What’s a M8120?

The M8120 is a nice little shoebox-sized computer build 1991 by Motorola. The case is just big enough to offer the space for the board, optional memory expansions and the power supply.
The used CPU is a Motorola 88100, member of the 88k family, clocked at 25MHz. If you take a close look, the mainboard is actually a VME board and a ‘raiser card’ which offers one SCSI, one network and six serial connectors to the outside world.

Hardware

First some pictures…. I know you all love pictures 😉 The system looks like this (pictures generously donated by Michael Schneider):

m8120_1

The upper box is the M8120 itself, the lower one is the ‘media box’ containing the SCSI harddisk and a QIC tapedrive.

m8120_2  m8120_3

Upper picture: The opened system (Memory mezziane board removed). You’re looking at the mainboard with its 88100 CPU, two 88200 cache controllers (CMMUs) and the Intel network controller.. on the right side it the power supply with its rubber (!) cover.
At the back of the system you can see the serial connectors (console, s1, s2, s3, modem1, modem2), the ethernet AUI and the SCSI connector.

Lower picture: And finally this is the bare case with its motherboard removed.

The technical details:

Actually the M8120’s mainboard is a MVME187 board, slightly tweaked to offer 4 more serial ports for the loss of the parallel interface. This moves this little exotic box into the light of standard hardware… well as far as 88k boxes are ‘standard’ these days. So, here’s the list of used components:

  • one 88100 CPU at 25Mhz
  • two 88200 Cache / Memory Management Units (CMMU), 16KB each.
  • NCR53C710 SCSI-2 controller
  • Intel 82596CA LAN controller (10Mbit)
  • CD2401 four channel serial controller
  • 128K static RAM for debugger and diagnostics

The original MVME187 board came in different memory (4-128MB RAM, Parity/ECC RAM) and CPU configurations, having several “sub-models”:

MVME187-001B 25MHZ, 4MB Parity
MVME187-002B 25MHZ, 8MB Parity
MVME187-003B 25MHZ, 16MB Parity
MVME187-004B 25MHZ, 32MB Parity
MVME187-023B 33MHZ, 16MB ECC, 128k L2 Cache
MVME187-024B 33MHZ, 32MB ECC, 128k L2 Cache
MVME187-031B 33MHZ, 4MB ECC
MVME187-032B 33MHZ, 8MB ECC
MVME187-033B 33MHZ, 16MB ECC
MVME187-034B 33MHZ, 32MB ECC
MVME187-035B 33MHZ, 64MB ECC
MVME187-036B 33MHZ, 128MB ECC

As far as we know by the different models being offered on the web, the M8120 seems to be available only with 16, 32 or 64 MB. As we (the maillist members) don’t have a 64MB board, it’s unclear if that is a 33MHz/ECC then.

There’s no RAM on the board itself. It is provided on a mezzanine board on which a 2nd can be stacked.

More details are available in this PDF file from Motorolas library.

Software

The OS installed it System V Rel. 4.0 for m88k. The latest version seems to be R40V4.4… anyone with a more recent version?

No, there’s no Linux for the 88k… if you like to port it yourself, this page (68k MVME) is probably the best start.

New & Exciting! There is a port working of OpenBSD for the MVE187 and the M8120. It runs like a charm on our systems!

Update: The most recent version of OpenBSD/88k is 3.6 (which is true for all supported platforms). While 3.4 and 3.5 boots fine on our litte shoebox, 3.6 gives you some trouble hanging with the message “cl_txintr extra intr” after some boot messages.
Luckily enough, there’s a workaround! Boot into command line mode via

BUG88k> bo 00 00 bsd -c

when you get the prompt enter “disable cl1” and then “quit”. Voilá, 3.6 successfully boots.

Installation HOW-TO: in the works… 🙁 Well, but the official installation manual is quite good!)

Here are two “essentials” I’ve compiled from the original source (not from ports): bash and joe – As I saw quite some downloads for these two binaries, I’ve renamed them to 88k_*.gz just to underline that those are M88k binaries, i.e. won’t work on your x86 Linux box.

Setup

Ok, so you found, bought or auctioned a M8120. Hopefully you got a running system with it. If not, I do have a QIC tape which boots (but still refuses to run on my M8120) I could copy for you if I could boot my machine… you get the point.

What you need for sure is a terminal (or any computer with a RS232 connector) and a cable with at least these tree lines connected:

Signal Pin Pin
TXD (Send) 2 3
RXD (Receive) 3 2
GND (Ground) 7 7

First switch on your terminal being set to 9600bd -8N1, which is the Motorola default. If this doesn’t work (i.e. giving crap on the screen) try different speeds as it could be the case that somebody changed the terminal speed in the ROM (-> See tips and Tricks).
Now start your external media-box and then the M8120.

You should now see the following boot message:

Copyright Motorola Inc. 1988 - 1992, All Rights Reserved

M8120 Debugger/Diagnostics Release Version 1.2 - 04/14/93
COLD Start

Local Memory Found =02000000 (&33554432)

MPU Clock Speed =25Mhz

Autoboot in progress... To abort hit <BREAK>
Booting from: M8120, Controller 0, Drive 0
Loading: Operating System

Volume: $00000000

IPL loaded at: $00FC0000
SVR4 Disk Boot Loader 940112

Probing for devices

.........

Boot: Using EDT built by probe programs
Multiprocessor Kernel Debugger Release 4 Version 6
Copyright (c) 1988 UNISYS.
Copyright (c) 1991-1995 Motorola, Inc.
All rights reserved.
System Diagnostic Command Processor (DIAGPROC Version 94/07/01)
Mentat Portable Streams, Version 3.0
Copyright (C) 1989-1994 Mentat Inc.
All Rights Reserved

Max STREAMS memory = 26043015
Allocating 49K for trace buffers
Found 1 CPU(s)

NOTICE: MP Locking disabled
UNIX(R) MP System V Release 4.0 Motorola m88k Version R40V4.4
Total real memory = 33554432
Available memory = 26669056
Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T
Copyright (c) 1991 UNIX System Laboratories, Inc.
Copyright (c) 1987, 1988 Microsoft Corp.
Copyright (c) 1990, 1991, 1992, 1993 Addamax
Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995 Motorola, Inc.
All Rights Reserved

Node: mc88100

Enter <CR> to pause in a single user shell before init.

At this point I was told it switches the line speed to 38400 baud if you’re not hitting CR… but I don’t get this far 🙁

Default boot sequence continuing...
The system is coming up. Please wait.
sadc: Building symbols in /tmp/sa.adrfl for /stand/unix
Configuring loopback interface
Configuring e1x70 interface
add net default: gateway 10.23.1.6 flags 0x3
Starting rpcbind ... done
Starting syslogd
Starting time daemon...done
Print services started.
The system is ready.

mc88100
Console Login:

Tips, Tricks & other findings

Q: What do those LEDs on the cases front mean?

A: The LEDs are different from the MVME187. There are 3 visible LEDs on the front bezel. From left to right those are:

  • RUN – Green : Your system is ON (or off if not lit ;-))
  • STAT – Yellow: System Status, kind of shows the system load. Steady ON means the CPU’s working. It’s software controlled.
  • SCSI – Yellow: If it’s flickering, some bits are running over the bus

There’s a fourth LED on the mainboard not showed to the outside. It’s Red and further right to the SCSI LED (there are two important buttons between them actually, ABORT and RESET). If this LED is on it means FAIL and is not a good sign… 😉


Q: What is the debugger and how do I get there?

A: The debugger could be described as a minimal system to boot your OS, check your system and do some operations similar to todays BIOSes. Hardcore techies will say it’s much more than just a BIOS… and that’s true. But for now, this explanation should be sufficient.
You get into the Debugger by hitting BREAK shortly after the boot process started and you’re asked to hit BREAK to get to the debugger 😉
HINT: ‘he’ will give you a list of available commands.


Q: How can I change my initial terminal speed?

A: Go into the Debugger. Use the ‘PF’ command.


Q: Wow! I like/love/adore the 88k CPU. Are there other machines/boards/systems?

A: Well, quite some. Motorola build several VME boards:

  • MVME187 – The “real” VME version of our little M8120. One 88100, SCSI, serial, parallel and ethernet on-board.
  • MVME188 – Like the 187 but without any onboard peripherals… but with 1, 2 or 4 (!) 88100 CPUs!
  • MVME197 – Like the 187 but using the faster 88110 CPU (LE=one CPU or DP=two CPUs)

These VME boards also came in a stackable case, called the “900 series”. (Front, Back)

Motorola founded a consortium with the aim of creating a multivendor open computing environment based on the Motorola 88000 RISC processor family. This was called 88/open. Some children of this effort been:

The Data General AViiON systems using the 88k family (single and dual, 16-33MHz) running DG/UX. (pictures?)

Finally a Japanese box, the OMRON Luna88k used up to 4 88k CPUs (Back, Inside).

Actually, Jules Richardson revived the original m88k domain. Click here to read more about all the different m88k machines etc.[offline as of 2013]

And then, there is was Paul Weissmann’s badabada.org which is was another cool source for m88k related stuff… you see, you’re not alone! 😉
[Update 2013: Well, it’s getting lonely again… badabada.org went dodo, too
Update 2014: Yay,Houston we have a mirror! badabada.org is back from the grave.]

Das Transputerbuch

There was one major german book about transputers called “Das Transputerbuch”, written by Uwe Gerlach (ISBN 3-87791-019-X).DasTransputerbuch
What made this book special was that it included an unpopulated 8-bit ISA card for a transputer and 1MB RAM, fully B004 compatible.
Additionally, there were schematics provided to build a host-adapter for several homecomputers of that time (C64, Apple II, ATARI ST and Commodore Amiga).

I was able to get one book off ePay which was still includung the printed circut board and a 360k floppy containing some sample sources and a rudimentary assembler.
So I’ve polpulated it, found some mistakes Gerlach made and made it somehow run.

This is how the card looks

Gerlach

It’s design is pretty simple – at least compared to the efforts been taken with the i860 cards on this page. The simple design is also because the Transputer has nearly everything included… so what you see is:

  • The right half is the ISA-bus and link interface. The rightmost and longest IC is a C012 connecting the 8-Bit ISA bus to link0 of the Transputer. Everything else are buffers & drivers.
  • The left half is -besides the Transputer itself- just 1MB RAM and some address-logic. The card would also work without having this side populated using the internal 2 or 4k of the Transputer.

C’est ca. As said, prety simple.

The mentioned bugs of the card are:

  1. The orientation of U11 and U12 are wrong on the print on the PCB and in the book, check the photo for them.
  2. There are no holes for the capacitor near to U28, you will have to solder it to the corresponding pins on the back of the PCB.
  3. The crystal oscillator U12 has its pin-1 not-connected, but it is connected to ground on the board. My crystal oscillator didn’t generate a clock signal, when pin 1 was connected to GND, although it normally shouldn’t matter.

Still, there was a persistent problem with the external 1MB RAM. It was detected by mtest but depending on the Transputer-type used and some randomnes, it never was checked as being ok.
Thanks to Michael Brüstle and his skills it’s working now – he replaced some capacitors and strenghtened some ground traces but it’s still not clear what the real reason was.

Here’s the back of the card – looking like a snake-pit now 😉

GerlachBackMod

Microway NumberSmasher

The US company MicroWay (also known for their NDP compiler range), presented an i860 ISA card called NumberSmasher 860.
It was available in two speed grades, costing 11698 DM (@33 MHz) or 14170 DM (@40 MHz). The needed compiler (C, Pascal or Fortran) was an 3135 DM extra.

This 16-bit ISA card featured an 40MHz i860, 4 or 8MB of ram and one INMOS OS-link controlled by a IMSC012 on a litte PCB, hiding 2 additional IMSC012 below it on the main PCB.
It is possible to connect one IMS C012 to to the ISA host bus to “feed” the Number Smasher 860 with programs and data (seedocumentation at the bottom of this page).

Here’s the board in its full beauty:

NumSma860

The left half is occupied by the 8MB RAM. The right half is all bus-logic, buffers and drivers. At the top is a very custom HD-connector – thanks to Jörg Heilmann I now know that this is the FiFo-Connector counting 100 pins. Again thanks to Jörg I also have4 pages of documentation to this connector which was designed to connect the FIFO I/O board (available as ISA and EISA version) to.

On a little separate PCB (having “LINK DR V2.0” printed on it) connected to P3 some sort of additional communication part was placed, consisting of an octal transceiver, one INMOS C012 link-adapter a PAL and an octal buffer featuring two 4-pin connectors (J1 & J2).

  • J1 – GND – GND(code) – to pin 3 of J4 – to pin 3 of J3 – GND
  • J2 – GND – GND(code) – to pin 16 of P3 – to pin 14 of P3 – GND

Additionally there are 3 configuration jumpers – function as far as my measurements go:

  • J3 – Connects pin 18 of the board-connector (LinkIn lower onboard C012) to either LinkOut of the C012 (jumper on upper pin) or to the 4th pin of J1 (jumper on lower pin).
  • J4 – Connects pin 20 of the board-connector (LinkOut lower onboard C012) to either LinkIn of the C012 (jumper on upper pin) or to the 3rd pin of J1 (jumper on lower pin).
  • J5 – Linkspeed for the IMSC012  (upper is 20Mbps, lower is 10Mbps)

NumSma860_Link

Documentation

As I have next to no official documentation about this board I would be very glad to hear from anybody who knows the tiniest bit about this card! AFAIK the original “manual” wasn’t bigger than 13 pages… pretty lame for a board costing as much as a small car back in those days.

Thanks to Jörg Heilmann, I got my first piece of original documentation: The 100 pin FIFO-Connector is described on these four pages. Not much but a start!

Here’s what I found out about the P3 connector on the board, having the “LINK DR” PCB plugged into it. If you have a look at the picture above, I’m start counting pins from bottom right continuing zig-zag like this:

26 oooo...oooo 2
25 oooo...oooo 1

1 – VCC
2 – CLK 5MHz
3 – Reset of the C012 (Pin 11) goes directly to the i860 reset-pin
4 – GND
5 – D7 from ISA Bus
6 – D6 from ISA Bus
7 – D5 from ISA Bus
8 – D4 from ISA Bus
9 – D3 from ISA Bus
10 – D2 from ISA Bus
11 – D1 from ISA Bus
12 – D0 from ISA Bus
13 – ???
14 – Pin 2 of the upper onboard C012
15 – ???
16 – Pin 1 of the upper onboard C012
17 – ISA Pin B8 (NoWS)
18 – Pin 2 of the lower onboard C012
19 – ???
20 – Pin 1 of the lower onboard C012
21 – MEMW to ISA
22 – MEMR to ISA
23 – ???
24 – ???
25 – VCC
26 – GND

From these findings I conclude that J2 is directly connected to the upper onboard C012 while J1 is either connected to the lower onboard C012 (J3 & 4 set to upper pins) or to the C012 on the LINK DR (J3 & 4 set to lower pins) which has its data-lines connected to the ISA bus.

On the main-card are 3 other jumpers:

  • J1 & J2 – Set the connection speed of the two C012 on the card
  • J3 – Select the ISA IRQ. Top down: IRQ 10, 11, 12, 15.

Everything else I have for now is a single article from the German computer magazine “c’t” (3/91,p.164 by O. Grau and A. Stiller) giving a bit more insight in the way the card works:

“Das Interface zum ISA-Bus des Hostrechners ist auf einer kleinen austauschbaren Platine untergebracht und basiert auf einem FIFO. Durch ihn geht sämtlicher I/O. Ein vergleichsweise aufwendiges Protokoll sorgt für einen recht langsamen Datentransfer, so besteht jeder Transfer aus dem Kennbyte 0 (Schreiben) oder 1 (Lesen), gefolgt von der Zieladresse (vier Bytes) und dem Datum (vier Bytes).”

The interface to the hosts ISA-bus is located on a small changeable board and is based on a FIFO [buffer]. All I/O is going through this. A comparably complex protocol is the reason for the data transfer being a bit slow. Each transfer consists of a ID-byte (0=write, 1=read) followed by the target address (four bytes) and the data (four bytes).

This “protocol” sounds very familiar to me. INMOS had the same, calling it PEEK and POKE… I’m still evaluating this, so stay tuned.

[11/05/10] Great News! I had some time and did some deeper investigation… hardware archaeology at its best 😉 So read on in the next post… it’s dissection time!

Hauppauge 4860

Not really an expansion card but a full blown EISA motherboard featuring an i80486 and an i80860 socket directly on board – thus the ingenious name Hauppauge 4860. The i860 can work in parallel to the i486, both sharing the on-board RAM which can be freely partitioned. But theoretically the i860 could also run completely alone… at least Hauppauge mentions this in the manual, announcing a UNIX version for this option (of course that never shipped).

This board is quite a huge beast, full size AT that is. For its time it was regarded as high-quality but besides 1 ASIC and 2 Intel chip set ICs there are a lot of logic ICs and PALs.
I’d say it’s a ‘IC graveyard’ and one of the most exciting 80486 boards ever made.
(And a real diva when it comes to add cards :-/ More on this further down)

FullBoard

These are the main specs:

  • 80486 socket (does not run stable with DX/2), 25 or 33MHz
  • 80860 socket (same clock speed as 486)
  • Weitek 4167 (aka Abacus) mem-mapped FPU socket
  • Intel “485TurboCache Module” socket
  • 7-8 EISA Slots (depending on revision)
  • Intel EISA chip set consisting of 82358-33 EISA Bus Controller and 82357 Integrated System Peripheral
  • On-board Serial/Parallel and PS/2 mouse support
  • 8 SIMM sockets for up to 64MB (Fast Page Mode,parity – No chance with EDO or non-parity)
  • Award “486 Modular BIOS v4.10” / BIOS level 1.01 -obviously specifically tailored to the 486/860 needs.

Because there are so many things on this manly mainboard, I will go into further detail based on quadrants:

Lower right

LowerRight

Well, that’s where all the mojo sits, right. The two processors side by side – ahhh – what a macho view! 😉 Mind the single oscillator: This means both CPUs run at the same speed, which is a bit of a pity, as the i860 was/is available at clock speeds up to 40MHz. Because Intel never really crossed the 33MHz external clock (the 50MHz 486 was quickly replaced by clock doubling versions due to heat issues) for their 486 processor, this is the highest common denominator.
That said, the Hauppauge 4860 does not support DX/2 processors… believe me I tried them all (even up to 5×86 w/ voltage regulator).Yes, it’s running fine one day while failing to boot the next day. So be sporting about it, an AMD 5×86/133 will easily outperform the i860/33 and who would like to put him ashame like this?

Ok, next to the two brains you can easily spot the 8 SIMM slots. It’s not easy to satisfy the RAM specs here: PS/2 SIMMs, optimally 60ns, Fast Page Mode (FPM) with parity – only up to 8MB per SIMM will be addressed. I had to learn that it is not so easy anymore to find those SIMMs today :-/
At the rightmost edge of the board you can see the classic AT-style power connectors… with an additional connector for 5V. Yup, it’s a server board, having all RAM- & EISA-slots populated, this beast can slurp quite some juice. Ok, it still would be nothing compared to todays insane 1000W power supplies feeding quad-core CPUs and dual graphic-cards.

At the lower edge you can spot quite some logic ICs. That’s a part of the memory interface – yeah, no stinkin’ ASIC, just TTL logic and many GALs.

Lower left

LowerLeft

While or two processors still peeking over the right edge, you can easily spot even 2 more sockets on this board. The square one on the left is meant for a Weitek 4167 (also known as  “Abacus”) while the two pin-rows in the middle of the picture are planned for an “Intel 485TurboCache” (yes, that’s 485) module.
Honestly, I have no idea why Hauppauge added the Weitek 4167. As it was just about a bit faster than the inbuilt FPU of the 486/33 (~10% overall), it had no chance against the i860 – both needed programs which were specifically made for them, so compatibility wasn’t an argument for both. I guess it was added on the board just because they could… which is the right spirit!
The socket for the “485 TurboCache” was a good idea – which seems to went wrong in the case of this board. The module generally is nothing more than an i82485 cache controller with 64 or 128k SRAM. After years of searching I found two different models, both not working with the 4860. This seems to be a known issue to Hauppauge as you can find complaints in old (’92) newsgroup posts and Hauppauge itself suggesting not using this module.

Upper left

UpperLeft

This is the most modern part of the board (as by 1992 standards). It’s actually using ASCIs and not only 80’s-style PLDs. In the top-left corner you’ll spot the Samsung 82C452, which is controlling the 2 serial and 1 parallel port(s) on the board.
Next to it is all the Keyboard/BIOS stuff – one fine thing to mention: Hauppauge used an external battery for the settings/clock. Thanks to god they didn’t use some of those nasty Dallas SRAM/Clock chips. After 10 years the internal battery get weak and there’s no way the replace just that (well, there are ways, but that’s really the last resort).
Now it’s getting serious: ASICs, made by Intel… a chip set! Woohoo! Namely the 82350 Intel chip set (Click here for a lenghty article I wrote about this chip set).
This chip set comprises the 82358-33 EISA Bus Controller (EBC) and the 82357 Integrated System Peripheral (ISP). Together these two devices implement a functional interface to the EISA bus,  and provide most of the standard peripheral functions necessary to implement a minimum EISA solution. In a simple sentence: The EISA interface.
That said, there’s a catch: The 4860 being an early EISA board, does not feature the more ‘modern’ 82358DT EBC you’ll find on most EISA boards. This might be the reason why some EISA cards refrain from working with this board. I found a snippet saying “The 82358DT is a superset of the original 82358 and includes a mode compatible with the 82359 Buffered Bus“. The 82359 DRAM controller is obviously missing (probably not a available at that time) and the RAM controller is implemented in lots’o’GALs.

Across the bottom of the picture there’s another slot, looking a bit like EISA… but it’s not! That’s the Hauppauge 64bit Framebuffer Expansion Bus. Hauppauge sold a graphics card basically containing 4MB of VRAM which could be directly accessed by the i860 at very high speed. That made the board a graphics-accelerator like for example the SPEA Fire.

Not much is known about this framebuffer card. Still, I was able to find a blurry press photograph in an 1992 computer magazine. Obviously it’s mainly buffers, GALs, VRAM and 3 RAMDACs for R, G and B… I do have an AutoCAD ADI driver, but I guess you won’t get this board anywhere on the planet anymore 🙁

4860-Framebuffer

Here’s a better photograph I just dragged out of the web:

4860_vidcard

Upper right

UpperRight

Welcome to the end of our tour… the boring part – at least at the first look. 8 EISA slots and some buffers. Nothing exciting, really.
If you take a close look, you’ll see the sticker between slot 6 & 7 (counting from the bottom). This sticker tells you that this board is a “rev D2”:

RevDetail

I don’t have that much documents to figure out the tiny little differences to older versions, but the big one is slot #2. In previous revisions, that slot was ISA… a heritage to this fact is, that on REV D2, this slot is a “non EISA bus master slot” – which is also true for slot #7 (inline with the Frambuffer-Card slot).
The reason for this is (my assumption, though) that the 82357 (ISP) integrates seven 32-bit DMA channels, of which 6 routed to the EISA slots and one used for the Framebuffer.

That’s it for now. I will add new findings as I proceed with my fiddlings.
Thanks for joining the tour, don’t forget to buy a T-shirt in the merchandise shop at the exit…

Software

For the whole enchilada, get the 4860 Manual here. That’s real men reading stuff… i860 source code samples included.

This is the official tools and driver disk and here’s a (yet) small archive containing the ADI drivers for the Framebuffer card and the i860 APX specifically tailored to the Hauppauge 4860 (i.e. won’t run on any other i860 system).

Another nice find: The presentation held at Hot Chips Conference 1990. It gives some more insight into the board design and ideas behind it.

The SPEA cards

Between 1990 and 1995 the German multimedia-card manufacturer SPEA was one of the leading companies in this sector (When ATI was comparably small and NVIDIA not even founded).
They offered a wide range of display-cards, from a simple ET4000 up to very expensive CAD/CAM cards using various graphic chips like the TIGA controllers, Hitachi ACRTC and… of course the i860.
Later SPEA was bought by Diamond Multimedia (still in business) and some employees started their own company to finalize the graphic chip they already started to design when being with SPEA (read more here… article in German, sorry).

Two SPEA cards using the i860 were built. The first was the

SPEA Fire

SPEA-Fire

This full-size ISA card features a 33MHz i860 with 4MB own RAM as well as 2MB VRAM. An Inmos G364 graphics controller is in charge for creating a picture on the monitor – BTW that’s the last and fastest graphics controller which was manufactured by Inmos.
Theoretically, this card could be called an INMOS B020 on steroids.

As this is “just” a 3D subsystem, a standard VGA was still needed for all 2D stuff. Its video signal was then looped-through the SPEA Fire… just like the Voodoo cards did it some years later.

A recent photo I’ve fond on ePay shows, that there was a proprietary memory expansion available, which has to be plugged next to the i860. Probably expanding the RAM to 8MB, which seems to be a considered a reasonable amount of RAM back in those days.

SPEAFire_RAM_upgrade

Interestingly the manual briefly touches the possibility to be programmed with own applications using Intels APX system. Sad enough, the APX is not included on the driver disks and was sold seperately… for a lot of money.

FGA860

SPEA-FGA860

The FGA860 is the bigger brother of the SPEA Fire. Actually it’s two boards sandwhiched together: The one on top is -again- called the Fire-Board. But this time it is designed completely different. There is no RAMDAC or such… just the i860, RAM (16MB) and some custom- and bus-logic.
Behind this, there’s a full-blown TIGA card called FGA-4E, using a TMS34020/32Mhz with 4MB DRAM and 2MB VRAM. Not so usual is the also included VGA part on the FGA-4E. This way you can save an ISA slot for the needed VGA card.

The Fire-Board was available for 5700 German Marks, the FGA-4E added another hefty 10.820 Marks making a total of 16.520 Marks (1990/91 that was about US$ 8000)!
But for that money you got a “graphic subsystem” which was capable of 300.000 2-D vectors/s (10 Pixel long) and amazing 30.000 gouraud-shaded polygones/s (10 × 10 Pixels).
[Back then, that really was amazing… today every mobile phone might be better in 3D. Here are some numbers for comparison/amusement:
3DLabs GLINT 300SX: 500.000/300.000]

Here’s a view from the top… not really much to see. It’s very hard to pry those cards from each other. I guess, they were never intended to be separated again.

SPEA-FGA860_sandwich

If you are in need of the drivers, I make them available here. It’s the IMHO most recent version from August 1994 including an AutoCAD 13 driver update.

DesperRAM

You might have been in the same situation: Some piece of old hardware could be upgraded (aka pimped) with more RAM, but there’s no place in the world to get that type of RAM needed.

In my case it was 1Mx4 DRAM in a DIL packaging. It’s hard to come by those in a ZIP packaging – sometimes used on AMIGA RAM cards – but DIL is next to impossible.

Well, when 1Mbit RAM chips were introduced, the industry switched to SIMMs anyway… and that’s where you find those. For the DespeRAM, SOJ packaging is what you want. SOJ (sometimes also called J-Lead) means there are short pins on the IC but they’re bend inwards under the chip… pretty much like PLCC pins.

What you need for this stunt:

  • Desperation. Lots of it.
  • A hot-gun (for getting the SOJ chips off the SIMM module)
  • A fine tip on your solder-iron. Very thin solder led (e.g. 0.5mm)
  • DIL sockets for your desired piece of crap^h^h^h^h vintage hardware
  • Wire, also thin (I used 0.6mm)

Preparation:

Clean desk. Good lighting. A steady hand (no coffee or drugs – I assure you, it won’t work. I tried it ;))

Ok, so first of all get out the hot-gun and carefully get the ICs off the module. Here’s a single chip and the socket it should be mated to

desperRAM1

Bend the pins and straighten them. I used a needle to pry the pins upwards a bit and did the rest with tweezers. Now you have the exact spacing of the pins on your chip. Use that for building a “pin aligning tool”. I’ve used a piece of plastic and a fine saw to cut 10 grooves into it. When done, it looked like this:

desperRAMtool

Now find something on which you can fixate the chip to (still being movable). I used a block of wood and a rubber band. This worked quite well. This way, you can always adjust the position of the chip when needed.
It’s time to cut some pins. For the start I went for about an inch long – place them into your self-made tool and fix them with a piece of self-adhesive tape (Scotch in USA, Tesa over here ;)).
Now put some solder on the chip’s pins as well as on the freshly cut DIY-pins.
Carefully position your tool so that the pins do have good contact.

If you did everything right, a short contact with the solder iron tip should be enough to solder the new long pin to the original one. When you’re done with all pins it should look like this

desperRAM2

As you can see, I did already start to bend the new pins to fit into the socket. It’s a bit try-and-error to get the right angle. Be careful to avoid the pins touching each other or even break when being bent. Re-fitting a single pin can be a major pain in the a**!
Now you need to cut the pins into a reasonable length. First bend them into position – constantly checking against the socket. When all pins are ok – start cutting from one side to the other, bit for bit until you got the perfect length (Use the first chip as a model for others which might follow).

The seating is a bit difficult as you can’t use maximum force to push them into the socket. I used a fine caliper to actually pull the chip into the socket.

Due to the angle needed, the chip will hover quite a bit above the socket. I guess you can go lower if you go for a 90° bending – I didn’t have the patience.
Double check all connections from the original pin to the one on the socket. Also check for shorts!

desperRAM3

Here you have it, the ugly Franken-Chip. But hey, it didn’t cost me a dime!
That said, after soldering 160 pins, bending them and carefully pulling them into their sockets… I guess I won’t do it again 😉

Kontron SBC860

First of all: I do not own this card, I just list it for completeness.
Everything written here is accumulated through computer magazine articles or internet sources – if you know more or better, I’m always happy to hear from you.

This is a picture of the Kontron SBC860 (courtesy of Jörg Heilmann):

Kontron_SBC8601

As you can see the SBC860 is much higher integrated as all other i860 cards presented on this page (while it bears quite some similarities with the rev.1.6 of the DSM860-OEM/16), most parts being used in modern SMD form.
It’s a single, full-length 16-bit ISA card, featuring 8 proprietary SIMM slots for up to 32MB RAM.

As far as I can see, the SBC860 has its own bus-interface so no fancy Transputer-Links or such.
In the upper right corner of the card are two huge “pin arrays” (each with 112 pins), the left one having two blue jumpers set. Iassume this could be some sort of expansion-bus for add-ons. Interesting fact: Exactly this part was missing on the board which was reviewed in the German magazine c’t 91/3. As Jörgs card says “R14/A” on one label this might hint towards his card being a later, updated version.

The price of the card was as hefty as their competitors: 33 MHz/8 MByte 13212 DM, 40 MHz/32 MByte at ~21200 DM in the year 1991 (US$ was roughly half)

P3 = Interrupt Vector
7  10  11  12
:   :   :   :

P4 = I/O Base Address   8 consecutive Port Adresses, between 0x100 and 0x3F8

   P4              I/O Addr
==============================
::IIIII            0x300
::II:II :::        0x320
::IIII: :::        0x308
:I::III            0x200 

miroHIGHRISC & miroTIGER

This is indeed a very rare breed – I was informed that less than a 100 of those were sold. Built in the end of 1992 as “Project Zorro” by the German company miro (bought by Pinnacle in ’97) it took the same line as all the other accelerated graphic cards in those days: Highspeed graphic -mostly TIGA- plus some speedy general purpose CPU. The SPEA cards using Intels i860 were direct competitors for example – I was also told that miro also looked into using the i860 but scrapped that attempt in an early stage in favor for the HIGHRISC.

The Miro HighRisc -or miroHIGHRISC as they wrote it back then- was a full-length 16-bit ISA card containing a MIPS CPU and a maximum of 32MB of RAM.

Technical facts:

  • 33MHz LSI LR33050 CPU which is a R3000 clone including the R3010 FPU minus MMU
  • 1k data- and 4k instruction caches on-die
  • 33 MIPS / 33 MFLOPS
  • 8-32 MB RAM plugged into up to 4 SIMM slots
  • 32 bit bus to connect the miroTIGER graphics card (100MB/s)
  • 2D: 150000 Vectors/s of 10 pixels length
  • 3D: 10000 triangles/s of 100 pixels, flat-shaded
  • 6000 triangles/s of 100 pixels, Gouraud-shaded

miro claimed that the HighRisc would deliver nearly twice the performance of an i860/33 solution with “real-world” applications (namely AutoCAD 12). That has yet to be proven but sounds reasonable given the limitations the i860 had when used as general purpose CPU.

Here’s the HighRisc in its full glory:

HighRiscTotal

Interestingly, there’s next to none information on the Web about this card. Probably due to its high cost (5700DM) and the failing TIGA standard.
Here’s a nice snippet from an interview (in German) from 1999 with the original product manager Frank Pölzl:
Q4. What was your biggest flop?
miroHIGHRISC, a 3D-graphic card with MIPS and TI-Graphic-Processor.

Another tasty detail is that according to a news-snippet from the German magazine c’t (12/99, p.22) this card was developed in cooperation with Silicon Graphics (SGI) which bought MIPS some years before. Maybe this was SGIs first and last attempt to get a foot into the PC market?
Yet another interesting fact: The LSI 33k CPU was later radiation hardened by a company called Synova Inc., rechristened as “Mongoose V” and as such traveled into space several times… even to Pluto!

Here’s the left side of the card in more detail. It contains the CPU and the BIOS (32k EPROM dump available here) lots of 74-logic ICs, GALs and some MACH PLDs.
At the top-left corner of the picture below you see the connector to the miroTIGER, a TIGA graphics card described a bit further down on this page.
Also, there’s  an undocumented 20-pin connector at the upper-right edge of the card. This might be the 16MB/s interface “to connect peripherals like laser printers or repro-devices” as mentioned in the c’t article. Thinking about it – it’s an interface to an UART. This will be a nice project to do further investigation.

The pinout (the connector is rotated 90° clock-wise):

GND  oo  /WR0
D0   oo
      INT2
D1   oo  /RD
D2   oo  /IOSEL
D3   oo  (unknown)
D4   oo  A2
D5   oo  A3
D6   oo  A4
D7   oo  A5
VCC  oo  A23

HighRiscLeft

The right side of the card is dominated by the 4 SIMM slots which, according to the manual, support up to 8MB each. Also there’s a DIP-switch for setting up the address-range etc.

HighRiscRight

Even it has nothing to do with MIPS, the accompanying graphics card miroTIGER fits in quite good here. This card was meant to run for itself or accelerated by the above described miroHIGHRISC. This is what it looks like:

TigerTotal

Following the TIGA standard it naturally features a TMS34020 graphics processor. This processor has its own RAM to do all the calculations, display-lists and fonts. Because TIGA was completely incompatible to the usual CGA/EGA/VGA standards you had to have such a card installed in parallel to see all the DOS/Windows outputs before switching into TIGA-mode. The normal setup was to have a 2nd high-res (1024×768++) monitor connected to the TIGA card then.
More advanced cards like the miroTIGER also had a VGA chip on-board, which saved you a slot and all the extra hassle. So let’s have a look at the details:

TigerLeft

This is the left side of the card. The nice golden chip is of course the TIGA processor. Next to it there’s a National Design V2000 chip – most probably an ASIC doing all the RAM handling and stuff.. accidentally I stumbled across a notion of a “National Design Volante2000” TIGA card. Smell the relation here? So my most recent assumption about this is, that’s a somewhat standard TMS340 glue-chip, licenced by National Design to other TIGA card manufacturers.

The SIMM above is 8MB of RAM for the TMS340. Depending on the PAL (labeled 2004, 2044 or 2084) on the lower edge of the card, one could use 0, 4 or 8MB of RAM.
On the upper left corner is the connector to the miroHIGHRISC card as well as an impressive row of DIP switches.

TigerRight

The right side is mainly occupied by 4MB VRAM for the TMS340 as well as the TI RAMDAC in the upper right corner.
Below is a very simple onboard VGA controller by Cirrus Logic (CL-GD5401 aka Acumos AVGA1) and next to it its puny 256k DRAM – which is the maximum a GD5401 can address by the way :-/

This is a good place to post a big thank you to Peter Huyoff – the wonderful guy who saved my life while doing the ‘research’ on this card.
As you might spot in the picture above, there’s one chip broken… a tiny 74AS74 flip-flop – try to find a single SMD AS74 these days. It’s impossible if you’re not prepared to pay $50 b/c of minimum order fees! And no, an F74 doesn’t do it, it’s still too slow. Been there, done that.

Peter provided me another working miroTIGER for free! That’s the spririt between real men! And Peter is definitely one of them!

Removing pin rows

Removing pin rows…doh! It took me quite some time to figure out a working solution for this problem, so I thought it might be useful to you some day, too.

Some idio^h^h^h^h not so clever person cut off all the pins on one of my DSM860 RAM boards – I probably will never figure out why (may a lightning hit him!). Besides 8 of the pins all other 74 (!) where cut, rendering the ram card non-functional (it’s the memory bus connector).

Here’s a (blurry enlarged) picture of the mess:

DSM860-RAMcard-Pins1

I started to desolder some pins from the back-side of the card but soon found out that the solder was too old to be removed the classic way (desolder pump & wick). Also, that pin-row (41×2) was one piece, so I would have to completely remove all the solder before I would be able to pull the part from the card.

After some thinking I came to this solution, which worked quite good:

First you need to cut away the plastic part from the top of the board. I used a very fine and sharp  caliper to cut away one pin after the other (i.e. like a single jumper).
While doing so be careful not to cut into the board!
Then pull or push the plastic pieces from the pins, again one after the other – I used a thin knife pushed under the plastic an gently wiggling it over the pin.

When done, it should look like this:

DSM860-RAMcard-Pins2

You may spot that some pins are missing already – that’s because my previous desolder tries sometimes seemed to work. Still, I couldn’t avoid that some pins got bent. This is the time for my secret repair tools: Syringe needles!

Second, get two kind of needles:  Gauge 18 and 20, that is 0.9mm and 1.2mm, color code yellow and pink. Cut off the tip of the needles and use a rasp to make the edge straight and clean. They should look like this then:

Needles

The bigger needle (G20) is just perfect to be completely pushed over a pin which then can be bent into any position without the risk of breaking it off – it works like this:

BendPins
(This is just a showcase picture with a different board, the needle needs to be pushed all the way down over the pin)

So straighten all the pins into an upright position. This will be important for the next step!

Now put your board into a vertical position (e.g. fixed by a bench vise or clamped between your inner thighs ;-)), get out your solder iron and the G18 needle – this needle should be just small enough to fit through a pin-hole.

This is the third and last step. Place the G18 needle over the pin you like to desolder on the back-side of the board like showed here:

PushPins

From the other side you’re touching the base of the pin with your solder iron. As soon as the solder starts to melt gently push the needle onto the pin.
If everything works like it did for me, you will push the needle through the board, including the solder and the pin you’ve planned to remove!

The great thing with this is that the needle (being made of steel) does not stick to the solder. As soon as the needle got a bit colder, you can easily remove the pin as well as the excess solder from the needle with your fingers!
Now carefully pull back the needle through the board and you should have a nice and clean through-hole in the board. If not, a final cleaning with a desolder-pump or wick should do it.

This needle-trick also works brilliantly with empty pin-holes which got filled with solder. Just place the needle on the pin-hole on one side of the board, heat up the solder on the other side while pushing the needle. Pop! There goes the solder!

As said, this technique worked great for me. All 82 pins got removed, a new pin-row was soldered into place and the card is now working like a charm.

Still, do this at your own risk!
I’m not going to be taken liable for any damage to your board or your health!
If your unsure if you are able to perform this stunt, don’t do it!
Practice with an old scrap board/card before you fiddle with the “real thing”!