What RAM slots are these?
I recently found a relic on eBay. It's an AST Bravo 4/33 (not the LC!) and has a very proprietary motherboard. I'd seen the photos and I thought I saw standard 72-pin SIMM slots. Turns out I was totally wrong... I've never seen this size before!? There's a similar-but-not-quite motherboard diagram here, but the jumpers are in different locations. The strange RAM also doesn't get a mention?
Turns out they're neither 30-pin, nor 72-pin! Did AST decide to use Apple's proprietary 64-pin SIMMs? There are similar (68-pin) 256kb and 512kb SIMMs on eBay, but they don't match the pin-count and they're for VRAM in older Apples? There also seems to be other something resembling RAM soldered onto the motherboard, but I can't find any information to determine if that's actually RAM or just cache. Either way, the machine just beeps once when power is applied. The beep sounds like a standard "NO RAM" boot error. There's also a fried electrolytic capacitor.
...Actually, I just found two 64-pin 4mb SIMMs for an Amiga... Let's see if they work when/if they arrive...
ASUS Media Bus (aka not-PCI-64-bit)
I'd picked up an old motherboard from an eBay auction and had seen a PCI slot with an extension.
Here I was thinking it was PCI 64-bit...
I grabbed the 64-bit SCSI card that I'd installed in my G4 Graphite Macintosh (which has a suite of 64-bit slots) and quickly realised it wasn't what I thought it was!
Ok.. it doesn't fit... let's look closer?
From the photos above, it doesn't take a genius to work out that it's actually a Media Bus 2.0 slot by ASUS. Turns out they tried, for a short while, to make their own proprietary slot that combines PCI and ISA. The brown socket is actually just a condensed ISA slot and the cards that fit are usually dual-purpose, combining video and sound or SCSI and sound.
V1.2 and V2.0 Compatiblity
Note that there are two versions and I failed. I went gung-ho and purchased an 'ASUS Media Bus' card on eBay without paying attention to the version. This card was meant to be the ATI Mach 64 + Sound Blaster card and I was really happy... saving slots it a great idea! A week after purchase, whilst the card was still in the mail, I did a little more research and realised that this card would be ASUS Media Bus 1.2, not 2.0! I went back to the seller and found a SCSI + Sound for Media Bus 2.0 and ordered that too.
A few weeks later (thanks to surface mail), a missed-delivery slip appeared in my letterbox and I went to pick up the video+sound card...
Sound? Check! Video? Nope... What? The card I had ordered second arrived first! This can't be good. I still had a V1.2 card in-flight somewhere... would it arrive? I purchased a V1.2 motherboard I saw on eBay anyway; it was cheap and I wanted to use this card... when it arrived!
Anyway, back to this card: It's the PCI-AS300 Adaptec AIC-7880 SCSI + Vibra 16 PnP Sound.
It fits nicely, as one would expect... and works perfectly too!
The V1.2 motherboard then showed up (before the V1.2 card!) and, just to test, I tried to see if the PCI-AS300 would fit...
Nope... millimetres out! I actually think the V1.2 card is lost and I now have a nice and clean Pentium board for another machine... oh wells... Note that the V1.2 slot just says MEDIA whereas the V2.0 says MEDIA BUS 2.0.
I hope others don't make the same mistake!
INTERLINK – Reverse-Engineering the Protocol
I've recently been playing with INTERLINK. Firstly, it was between two real machines, but then I managed to get DOSbox to talk to another DOSbox instance and a real physical PC. From here, there was a thought... why need DOSbox to host the INTERLINK server when I could possibly emulate the conversation and then create an app that'd work on all versions of Windows (or other OS') and then allow easier serial transfers to older equipment.
This post will be a work in progress for quite a while. I'll be updating it as I find time to work through the 'conversation' between the hosts... I might also spend a little time on reversing the actual source of INTERLINK itself.
Snooping in on the Conversation
As per the previous post, I created a quick .NET app to listen in to the serial conversation. This was done via the help of Eltima's Virtual Serial Port Driver. A pair of virtual ports was created and DOSbox was hooked onto one side. From here, I hooked my app onto the other side of the virtual pair and then into the real physical port. A real computer was then hooked onto the end of that port. You could also use two DOSbox instances here, along with two pairs of virtual ports.
You can download the source of my serial snooping app here.
The Conversation
This is where it now gets a LOT harder. Below shows the client (green/left) talking to the DOSbox server (blue/right). From the conversation, the client works out what drives are shared: A: and C: to D: and E:.
A: and C: | A:, C: and D: |
---|---|
0xAA
Hello?
Hi!
0x00
0x55
0xFF
0x5A
0x11
0x80
0x7B
0x02 0x00 0x00 0x5D 0x03
0x80
0x81
0x7A
0x22 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x01 0x00 0x00 0x01 0x00 0x20 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xD9 0x73 0x50 0x42 0xAA 0x8D 0x75 0x72 0x1F 0x12
0x81
0x02
0xFD
0x02
0x04 0x82
0x79
0x21 0x00 0x00 0x00 0x00 0x00 0x00 0x0A 0x01 0x01 0x00 0x01 0x00 0x20 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xF7 0x0C 0x71 0xEA 0xB0 0x04
0x82
0x03
0x83
0x78
0x24 0x01 0x01 0x00 0x16 0x06 0x03 0x03 0xFF 0xFF 0xFF 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0x95 0x6E
0x83
0x00
0x80
0x7B
0x57 0x01 0x0A 0x16 0x06 0x06 0xFF 0xFF 0xFF 0x00 0x02 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xC2 0x08 0xC2 0x08 0xC2 0x08 0x42 0x28 0x42 0x28 0x42 0x28 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xF2 0x73
0x80
0x01
0x81
0x7A
0x02 0x1C 0x00 0x1B 0x1D
0x81
0x02
0x82
0x79
0x17 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xD5 0x2F
0x82
0x03
0x83
0x78
0x02 0x1C 0x02 0x3B 0x5F
0x83
0x00
0x80
0x7B
0x17 0x28 0x32 0x36 0x38 0x4D 0x62 0x29 0x00 0x00 0x00 0x4D 0x53 0x2D 0x44 0x4F 0x53 0x5F 0x36 0x00 0x00 0x00 0x00 0x00 0xCA 0xC7
0x80
0x01
Other side receives drive D:\ 0xFC
Ping
Pong
0xFC
0xFC
Ping
Pong
0xFC
0xFC
Ping
Pong
0xFC
|
0xAA
Hello?
Hi!
0x00
0x55
0xFF
0x5A
0x11
0x80
0x7B
0x02 0x00 0x00 0x5D 0x03
0x80
0x81
0x7A
0x22 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x01 0x00 0x00 0x01 0x00 0x20 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xD9 0x73 0x50 0x42 0xAA 0x8D 0x75 0x72 0x1F 0x12
0x81
0x02
0xFD
0x02
0x04 0x82
0x79
0x21 0x00 0x00 0x00 0x00 0x00 0x00 0x0A 0x01 0x01 0x00 0x01 0x00 0x20 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xD9 0x73 0x50 0x42 0xAA 0x8D 0x75 0x72 0x28 0xD6
0x82
0x03
0x83
0x78
0x24 0x01 0x01 0x00 0x16 0x06 0x03 0x03 0xFF 0xFF 0xFF 0x00 0x02 0x03 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0x77 0xE9
0x83
0x00
0x80
0x7B
0x57 0x01 0x0A 0x16 0x06 0x07 0xFF 0xFF 0xFF 0x00 0x02 0x03 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xFE 0xC2 0x08 0xC2 0x08 0xC2 0x08 0xC2 0x08 0x42 0x28 0x42 0x28 0x42 0x28 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xF4 0x61
0x80
0x01
0x81
0x7A
0x02 0x1C 0x00 0x1B 0x1D
0x81
0x02
0x82
0x79
0x17 0x00 0x35 0x33 0x36 0x4D 0x62 0x29 0x00 0x00 0x00 0x00 0x53 0x2D 0x44 0x4F 0x53 0x5F 0x36 0x00 0x00 0x00 0x00 0x00 0x00 0x23
0x82
0x03
0x83
0x78
0x02 0x1C 0x02 0x3B 0x5F
0x83
0x00
0x80
0x7B
0x17 0x28 0x32 0x36 0x38 0x4D 0x62 0x29 0x00 0x00 0x00 0x4D 0x53 0x2D 0x44 0x4F 0x53 0x5F 0x36 0x00 0x00 0x00 0x00 0x00 0xCA 0xC7
0x80
0x01
0x81
0x7A
0x02 0x1C 0x03 0x2B 0x7E
0x81
0x02
0x82
0x79
0x17 0x28 0x35 0x33 0x36 0x4D 0x62 0x29 0x00 0x00 0x00 0x00 0x53 0x2D 0x44 0x4F 0x53 0x5F 0x36 0x00 0x00 0x00 0x00 0x00 0x78 0xF4
0x82
0x03
0xFE
Ping
Pong
0xFE
0xFE
Ping
Pong
0xFE
0xFE
Ping
Pong
0xFE
|
The grey boxes are my annotations for what I believe is occurring. More will be added as I work it all out.
DOSBox – Serial INTERLINK to Another PC
So, I recently had Interlink running between two REAL machines. It occurred to me though: Wouldn't it be cool if we could use a USB-Serial adapter on a newer machine and use Interlink from DOSBox to transfer out files? You could then copy anything into the DOSBox HD and get it onto your vintage unit. Great if you have no network, CD or are just sick of unstable floppy disks!
The requirements
DOSbox happily talks to real COM Ports. We'll want DOSbox running real DOS, so follow a guide like Transmission Zero has here to install DOS to a read HDD image. Firstly, download an SVN build of DOSbox. Then download the 256mb image and get your DOS disk images here. After copying everything into the dosbox folder, grab the dosbox configuration from your user profile (you might have to boot DOSbox up once first!) and bring it over as well. I renamed the disk images to make it easier and then edited the configuration as follows:
[autoexec] imgmount 2 "hdd-256mb.img" -size 512,63,16,520 -fs none boot .\D1.IMA .\D2.IMA .\D3.IMA
Run DOSbox and you should be presented with the DOS installation screen. Use CTRL-F4 to rotate through disks. Finally, you should be at the DOS prompt!
Serial Ports
Now for the serial configuration. First up, I'm going to show you a neat trick to get everything tested and working. We're going to use a virtual serial port between two instances of DOSbox to prove that Interlink works in the emulated environment. There's a plethora of virtual com ports available for Windows and they all vary greatly... officially I want data to flow from one COM port to another virtual COM port, so I'll need software that'll do this; you'll find that a lot just want to send data over a network. If you have Windows XP or lower (Windows 7 might still work also), then use com0com. Otherwise, if you need signed drivers then Eltima's Virtual Serial Port Driver is pure magic... but expensive. You get a 14-day trial with the standard version, so plan ahead and use it as much as possible! I've actually sent out a plea for help, asking for a cheaper license for just a single 'null-modem' serial port.
So, you've installed a pair as the above picture. To get here you simply installed the VPSD and chose all default values. You now have a COM1 and COM2... or maybe you have COM20 and COM21... (my laptop has no REAL comports, so COM1 and COM2 were available) regardless, we need to edit the configuration (as per the DOSbox manual) of your DOSbox instance and update the serial1 line to:
serial1=directserial realport:com1
Save it, close it and run dosbox. You should see one connection on one of the virtual ports in the port configuration application...
Whilst DOSbox is running, edit CONFIG.SYS and add the line DEVICE=C:\DOS\INTERLNK.EXE to the bottom. Once this is done, close DOSbox and copy the entire folder to a new folder. Rename this to server, or somesuch. Go in and edit this configuration to point to the second comport of your virtual two.
From here, you can boot up both DOSbox's and see that they connect to either side of the virtual com ports. You can then run INTERSVR from the prompt of one node and INTERLNK from the prompt of the other and you'll then connected! Totally pointless... but we've proven that Interlink via serial port works in DOSbox!
Intercepting data...
Just in-case I wanted to spy on the data, I thought I'd try something quickly with C# and the SerialPort class. I set up two pairs of com ports, connected DOSbox #1 to COM1, DOSBox #2 to COM4 and limited their speeds to 9600. I then used the following code to write a quick WPF app to see if I could get the data to traverse...
<Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBox Grid.Column="0" Name="FromText" TextWrapping="WrapWithOverflow"></TextBox> <TextBox Grid.Column="1" Name="ToText" TextWrapping="WrapWithOverflow"></TextBox> </Grid>
That's the WPF, just two text fields to see the data... then the c# to hook it altogether...
public string FromData { get; set; } public string ToData { get; set; } private SerialPort port1 = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One); private SerialPort port2 = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One); public MainWindow() { InitializeComponent(); port1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); port1.Open(); port2.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); port2.Open(); } private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) { var port = ((SerialPort)sender); byte[] data = new byte[port.BytesToRead]; for (int b = 0; b < port.BytesToRead; b++) { int fromPort = port.ReadByte(); data[b] = (byte)fromPort; } if (sender == port1) { port2.Write(data, 0, data.Count()); Dispatcher.BeginInvoke((Action)(() => { FromData += " " + BitConverter.ToString(data).Replace("-", ""); FromText.Text = FromData; })); } else { port1.Write(data, 0, data.Count()); Dispatcher.BeginInvoke((Action)(() => { ToData += " " + BitConverter.ToString(data).Replace("-", ""); ToText.Text = ToData; })); } }
Starting the app saw the relevant COM ports fire up in the port configurator... then I booted DOSbox:
Hahaha... it's 99% working. I wonder how hard it'd be to disect the entire chat and build an emulator. I had to limit everything to 9600 as my code doesn't auto-negotiate the speed. Without the limits, the client Interlink was speeding up to 115200 BAUD and the server had no idea what was going on.
I'll dig into those bytes in another post... the data looks pretty simple and might be easy to emulate... anyway... what was the point of this post? Oh yeah!
Talking to real metal
Back to that 286 from the previous post about Interlink. Let's talk to it! This time, instead of virtual ports, we're going to talk to real ports. I've got a USB Serial port which will help out a lot here.
I used this recently when talking to the Apple II. It's always good to know that things work before mucking around with them. I also ended up using the real serial port on my main desktop. Either way, any serial port will work.
Install your COM port and make sure your DOSbox configuration is correct as per the hardware port number. Mine is COM1 on this main desktop.
serial1=directserial realport:com1
Then simply boot up as you've done before with DOSbox. This time the client (or server) will be over the real wire.
Crikey! It just-worked(tm). The laptop happily saw the data in DOSbox. Easy file transfers! I wonder if I can make a Windows app that'll just let you share a drive?!
DOS – Serial File Transfers
This was meant to be easy... I was building a 386 for sale on eBay and had a spare 286 laptop hanging around. I was also selling a 4-metre NULL-MODEM cable which I wanted to list as 'tested'.
First, a warning: Don't let the magic smoke out
There's an age-old notion of magic smoke. This smoke is contained in electronic components and, most importantly, needs to stay inside them. Usually the mistakes of an impulsive, rash, impatient user will cause the smoke to escape. Once it has, there's usually no going back... or if there is, then you'll be spending a lot of time/money trying to get back to the spot you were at prior to the damage.
In this case, I did it to the old 286 laptop used below. On the back of the machine, there's two female DB-25 ports. They're not labeled and I thought I was simply in luck! They've already put a correctly oriented serial port (COM2) on there for me!
Turns out not... turns out one is the printer port (duh!?) and the other is for an external floppy drive. Regardless, I plugged my null-modem cable into the printer port and one electrolytic capacitor started cooking. I turned everything off quickly and inspected the damage. Yup, just one black capacitor (it was meant to be orange!) Unfortunately, when I powered the unit up, the capacitor kept cooking! Currently I've just disconnected it... could just be that that cap was shorted or reverse-polarised and fried... could also be that the whole LPT1 port is dead... gonna be hard to test.
Anwyay... I later found the part that labeled the ports... DOH! Where were we?...
InterLink
Would you believe that DOS 6.0+ came with serial transfers as standard? There's an application in-built known as INTERLINK. From here you just set one machine as the server with INTERSVR.EXE and the other as the client with the INTERLNK.EXE application itself.
The basic idea is to load the INTERLNK.EXE as a driver first, in CONFIG.SYS. You can configure extra options here, but if your connection is correct then it should just-work(tm).
Cabling
The best method is to use a specific printer cable, affectionately known as a LapLink cable. This is a cross-over cable for printer ports and is only used for transferring of files. The next best bet is a null-modem cable which does the same thing, but via the serial port, and supposedly slower as there are less data lines.
We're going to use a null-modem serial cable today and you'll find any number of methods for creating one. You can get adapters that'll convert a standard serial cable, entire cables that are 'null-modem' or you can just create your own.
I had actually picked up a 4-metre 'null-modem' cable from a misc eBay auction and wanted to try it out. This had a male plug on one end and a female on the other and didn't quite make any sense. Hence it allowed me to plug it into the wrong port on the laptop (as mentioned above) and wreak havoc. After that little mishap, I decided to just use other spare parts and rig up my own.
I've spoken a bit about serial cables before, but the basic idea is that there's a DTE and DCE end. It's a standard client-server relationship. In our case, our servers need to talk to eachother, so we need to adapt then of of a cable to allow it to connect. The goal is to cross over the transmit and receive lines to have data transfer correctly. There's also some supporting wires to allow data-handling negotiations to take place. You'll find all the wiring methods on the Wiki page.
Somehow, I found both a female DB-9 and DB-25 in the junk box and followed the first diagram on the wikipedia page. It was only three wires, GND from 5-7, RX from 2-3 and RX from 3-2.
For the life of me, I couldn't get this to work. Interlink just wouldn't see the other end of the cable. I then tested both ports (just to see if I'd fried more parts in the laptop) with a serial mouse and everything worked fine. From here, it must be the cable, right? Maybe it needs to be more fully-fledged with the other data/signal lines linked up. This site seems to indicate further handshaking is required.
I browsed back to the null-modem page on Wikipedia to work out the other wires to hack together. Something then occurred to me... the DB-29 port has RX and TX the other way around! Why would they do this? Regardless, I simply disconnected my taped and twisted wires and ran 2-2 and 3-3 through directly.... the result? Success!
Configuring Interlink
Before you even think of entertaining this idea, make sure your ports are tested functional with a mouse and that you've gone over your wiring 16 times prior. Make sure you've re-read your serial port pinouts and that you have traced each wire. As mentioned above, the DB-25 RX and TX lines are swapped when compared to the DB-9 pinouts!
Once you're feeling game, edit CONFIG.SYS on both your machines and add the line DEVICE=C:\DOS\INTERLNK.EXE on BOTH server and client! At this stage, you can reboot the server. It'll boot up and will spit out a little 4 line message indicating that it's loaded the driver, what disks are mapped and what printer ports are mapped. It'll also tell you that no connection is available. Once at your command prompt, run INTERSVR.EXE. You'll be presented with a pretty boring screen indicating the current activity.
Now, return to the client and reboot it after saving changes to CONFIG.SYS. When this one boots up, you'll hope to see that it's connected. Initially I didn't and it just tells you in CAPS that no connection is available. At this point, it's actually checked all of your ports for a server. This is both your printer and COM ports, so it actually really means that it couldn't find a server! I had this a lot at the start and began fine-tuning the configuration, attempting to limit it to a single com-port with /COM:2 switches... but it ended up being my cable!
Once you're up though, it's all easy! As per below, you'll be told what drives/ports are mapped and it really is as easy as just switching to that drive and listing directory contents, or copying from them!
I pulled over A-Train (quite quickly, actually!) and tried to run it on the 286 Laptop... it's not VGA, so we didn't get far at all. But it's a 286 without VGA, what was I expecting? Might need to try Railroad Tycoon... I wonder if I can Interlink that over from DOSbox?
Of Pin Straightening and CMOS Batteries
Whilst rebuilding a motherboards thought long dead, I have been required to perform a myriad of tasks. These have been related to anything from re-building PCB traces to fabricating batteries to straightening IC pins. Honestly, there's nothing quite like a good challenge and, recently, there's been nothing short of serious challenges appearing on my workbench!
CMOS Batteries
Some older motherboards have the batteries soldered on... or worse... incorporated into the freaking CMOS RAM chips! Luckily, this latest motherboard had no provisions for an on-board battery. Instead, it just had the usual 4-pin header for an external battery. Of the four pins, the two next to eachother are ground and the single pin to the side is positive. Don't be fooled by the CON1 label thinking that anything with a 1 should be positive!
I ended up at the usual Jaycar franchise and purchased a coin-cell holder and plug socket. It's a little chunkier than a standard header, but it is so much easier to work with!
Solder everything up and determine which way is positive. Note that, for coin-cells, the positive side is the 'bottom'. I had always assumed it'd be the 'inner-ring' (as per AA and AAA and all other batteries)... but it ain't. So be careful!
Once rigged together... install!
Yosh! Worked like a charm. If only all motherboards came with external batteries... the next mobo on the shelf has so much corrosion that I just feel like throwing it out.
Pin Straightening
Whilst doing the previous Recycle-Shopping-Tour-Of-Kumamoto, I stumbling across this 100-yen dream. It's a 386/486 era CPU with an alloy heatsink to obscure its actual identity!
I spent no extra effort breaking it out of the bag... and probably bent more pins... I wonder if works? Or what spec it is?
First step... pop that heatsink off. This required a fair amount of jimmy'ing...
Ooooo! It's a 486 DX2/66. This is seriously my favourite 486 CPU. So much natsukashiiii.
Will have to find a motherboard to slap it into... but before I even have a chance to do that, it's time to break out the tweezers. Actually, I discovered a better method this time around. Use a credit-card/transport-card/library-card to align an entire row of pins at the same time!
Nothing like being an adult and using adult tools!
Mixing and matching Xeon Processors?
So I recently came to acquire this beast. It's a beautiful 13-year-old IBM Intellistation Z 6221 with a 3.2ghz Xeon processor. I really dig the IBM styling... it's also ridiculously modular, not even requiring a screwdriver to rearrange drives. Unfortunately, due to its age, it's only 32-bit. In fact, it came with one (supports two) of the fastest and final 32-bit CPUs of the Xeon family.
The first step was to find extra ram to fill the 4 slots. This would only ever max to 8gb, so I needed 4 2gb DDR PC2100 dimms. Not so easy to find any more and prices are going up... either way they were sourced from eBay. I also, now that I think of it, accidentally sold the black floppy drive because a collector wanted it. It's now silver... and doesn't look too bad... but I'm on the hunt to fix that... Or maybe I'll put a zip drive in there...
Next step was to fill the second CPU slot... Thanks to the modular case, no screws were harmed during the dismantling of this product. As you can see below, the naked socket is neatly protected by a plastic shield that plugs into the heat-sink socket. There is, of course, no heat-sink; as there is no CPU in that second slot by default. You could choose this as an option when purchasing the unit.
It turns out that I had another Xeon desktop, in the form of an HP MLxxx. Although this was only a Xeon 2.7ghz, I'd read online that you may well be able to mix CPU speeds? First thing was to remove the CPU from the HP. This turned out to be very easy as its case was also very modular.
Instantly you can see that the heat-sink is different... the IBM used case-mounted fans with passive CPU-mounted heat-sinks, whereas the HP used heat-sink-mounted-fans. I inserted the CPU into the slot on the IBM's motherboard, but the heat-sink shape was different to the bracket mounted on the IBM motherboard. The heat-sink from the HP would not fit in directly!
I quickly tried to remove the bracket from the HP motherboard, with the intent on transplanting it into the IBM. After a lot of effort, it came off (the screws HP used were nearly torqued in!), but then it wouldn't fit in the IBM! It was too wide and long and actually wouldn't fit between the rows of capacitors. So much for industry standards!?
Ok... whatever... I mean how quickly can these things heat up? I'll just hold it in place for a quick test... before I mangle the heatsink to fit. Nope. Turns out the IBM wont even power up with this CPU in the second slot. Is this a fail-safe mechanism because the CPUs aren't matched? Is this CPU a dud? (I hadn't tried it prior...) Dunno.
Make sure the CPUs match!
Off to eBay, I found an identical SL72Y processor in England. It took a few weeks, but it arrived. Again, prior to hacking up the heatsink to fit, I thought I would install the CPU quickly as a test to see if the machine would POST.
Oh wait... it wouldn't just slot in... oh wait... look at those bent pins! I still don't know if it was the beer or the fact that it came off its little foam pad already-bent, but it required about 30 minutes of pain-staking twiddling with a pair of tweezers to get the damn thing in. DO NOT RUSH THIS PROCESS. At one point I thought all was lost as it just wouldn't mount... but after a lot of adjusting it went in.
A bit of hacking was then required to fit the HP heat-sink. I had to hack pieces out of the braces that screw down to the motherboard. I then had to bend a few fins on the actual heat-sink so they wouldn't ground-on or damage the rows of capacitors placed so nice-and-close to the CPUs. And then... it just freakin' worked... and the machine finally loaded Chrome at a proper speed on Linux Mate 18. Now to find a more-appropriate OS to run on this slightly ancient hardware!
Modding an original PlayStation
I hadn't played one of these since... maybe... 1996 when my neighbour and I got Abe through his quest. I found this unit at an op-shop recently for AUD$40 and couldn't resist.
The first thing to do was a tear-down + clean. Of course, a friend then told me he had a spare modchip for it.. so... why not do a proper job whilst the unit was still open.
In true Sony-style, the units disassemble perfectly easily and are neat and tidy inside.
Once you're down to the motherboard, it's simply a matter of determining where to wire the chip. To do this, you'll need to know which chip you have and which model motherboard. Mine was a Multi-Mode 3 and I installed it onto a PU-23 motherboard. I followed the instructions here.
Flatten the chip so that you can glue it on top of an IC later.
Then just run all the wires with as-little-slack-as-possible. This just means you wont have any issues with wires getting in the way of screws later.
Test when the case is open, test when the case is closed and test again later. When testing, the CD tray mechanism requires the case to be held firmly together so that spacing is correct for laser alignment.
Last time I was in BKK, I purchased a selection of random Japanese games. Pachinko, Abe's A'go go(Odyssey), Myst and Tekken 3. Turns out they all work perfectly.
Abe's A Go Go is actually a random text-replacement version of the english version. The cutscenes are still in english with subtitles.
And then you get a random ticker at the top with instructions for non-english speakers... Anyway... time to go and play the rest.
Amstrad CPC464 Restoration
I was hoping this would be a plug-and-play, but a machine this old was always going to be a challenge. I received this unit as part of a lot with the other 6128s and have finally received a tape to test on it.
From the outside, the item was a little dusty. That white piece, which looks like a pivot of some sort, fell out when I rotated the unit to see underneath. Never a good sign... Either way, I plugged in the unit and power it up (it happily uses the same RGB and power setup as per the 6128). To my surprise, I got straight to the main BASIC screen! To try my luck further, I loaded my demo tape and typed RUN"...
All good so far... then I noticed that only the left spindle was spinning on the tape player. The right wasn't collecting any of the read tape... I had a hunch where it was going......... yep.
Time to pop it open.
Dusty... OK... I can handle that... what I can't handle is a spring (from somewhere?) magnetised to the speaker. The ad-hoc shotty taping-and-soldering was also a little bit of a surprise.
Regardless, looking at the tape player mechanism I quickly found two dead rubber components. The band to the tape counter had perished...
So had the rubber ring that drives the right spindle. This makes perfect sense and explains why the machine tried to consume my tape.
Finding spares
There's a few options online for spare parts. eBay was my first choice and I have the two main belts on the way from Germany. This'll take a while. I actually really only need the band for the tape counter, but it won't hurt to replace the main drive belt also.
The second part is a concern. It's a tight ring and my initial searching has come up with zero results. Might have to head to the hobby shop today and find a car tyre or o-ring. Meanwhile, did someome say o-ring?
Drive 'wheel'
Not having much luck with o-rings, I went to my local hobby store and bought some Fleischmann HS Scale traction tyres (00544001) (actual picture here). I bought 4 in total and just layered them up on the wheel. I was a little worried about alignment as any friction would cause the tape speed to change.
It has seemed to have worked.. but now the main drive belt is slipping. I'm going to assume it's loose and therefore not getting the required amount of traction. More waiting until the next set of spares arrives!
Drive and Counter belts
The set was ordered from eBay and arrived from the UK in good time. As expected, two belts in a bag. Much stronger and more flexible than the belts they were to replace.
There's one screw underneath to remove and then you just slide the belt over the wheels. Make sure you not twist the belt when installing. It's not 'extremely' tight, so it's pretty easy to install.
Read Errors
Back to testing. The tape drive started operating perfectly, so I attempted to load the cassette once more.
Yosh! We're getting somewhere... but then...
Read Error Codes indicate failures whilst reading from tapes. Sometimes this is a dirty head, other times the head is out of alignment. I wiped down the head with an alcohol swab and then started to attempt alignment. Not really knowing what I was doing, I hooked up the audio to 'listen' to the data and twisted the alignment screw until the audio was loudest and clearest.
After a lot of errors, I seemed to have it stable, so I restarted the machine and tried again. It got all the way to Block 11! Then it just wouldn't continue. I hung around until I could make it say 'abba'.
Was the tape dead? All of a sudden I had a hunch it could be the power supply... so I swapped to an old AT power supply... but it didn't seem to be able to provide enough current...
And then I accidently plugged in 12v...
Take your time when playing with old electronics... I've now received the dreaded Grey Screen of Death and that means any of the internal ICs could be toast. I might muck around and try and swap the socketed ones between the 6128... but otherwise... I might have just lost the battle. $%$#%#$%#%.
There's a lot of good information here on over-voltage. Seems I've cooked the lot.
Chips on the board
I'm putting this here in case I ever feel game enough to do a full board chip replacement.
Chip | Purpose | Quantity | Status |
---|---|---|---|
AY-3-8912 | Sound | 1 | |
AMSTRAD 40009 | 32K ROM; O/S and BASIC | 1 | |
74LS145P | BCD-to-Decimal Decoder | 1 | |
74HC153P | Dual 4-input multiplexer | 4 | Found, not ordered. |
HD46505SP | Video PPI | 1 | |
D8255AC-5 | CRTC | 1 | |
74HC273P | D FLIP-FLOP | 1 | Found, not ordered. |
Z8400AB1 | Z80A 4Mhz CPU | 1 | Found, not ordered. |
74HC32P | Quad 2-input OR gate | 1 | |
74HC244P | Octal buffer/line driver; 3-state | 1 | Found, not ordered. |
74HC373P | 8-BIT DRIVER | 1 | Found, not ordered. |
M3764-20RS (Or 4614?) | RAM | 8 | Found, not ordered. |
74HCU04 | Hex unbuffered inverter | 1 | |
AMSTRAD 40010/40007 | Gate-Array | 1 |
Barcode Scanner: Cheating in Style.
I picked up a random hand-held barcode scanner from the markets a few months back and it's been sitting on the shelf waiting for a proper reason to exist. Whilst playing a marathon game of Bubble Bobble on the MSX (and losing, we just couldn't beat the boss), I google'd for cheats. They were all enterable via the keyboard on the main screen... but then it occurred to me... A barcode scanner on a PC would be the best way to quickly type in cheats for your game of choice.
The Scanner
This thing is a hand-held model with stand. It's a DataLogic QuickScan QD2100 and the drivers can be found here.
Note that the device will install perfectly well on windows and show up as a HID Compliant Keyboard.
Once installed, any barcodes scanned will be input via a virtual keyboard, along with a carriage return! To fix this, I'd assumed we'd install drivers and configure the device via software. It turns out instead that we'll need to directly configure the scanner itself via programming barcodes. Grab the manual here and browse to page 90. Read the instructions that they've mentioned:
- Go to page 91 and scan the top programming code.
- Scan the Set Global Suffix code
- Scroll all the way to page 291 and scan the 0 code twice
- Scroll all the way back up and scan the programming code again to exit
Making Barcodes
There's a ton of online sites that'll do this for you. My first hit was Barcodes Inc's online barcode generator. From here, even from the screen, you can zap the codes and test the device. It should all work pretty flawlessly.
Doom
I must admit, as soon as this idea came to mind, this was the game that I thought of first. Yes, it's dos-based and this scanner isn't... but that doesn't stop me from using it under DosBox.
GOD Mode |
All Guns/Keys/Ammo/Armor |
Show location details |
Temporary automap |
Temporary radiation suit |
Temporary light |
Temporary invisibility |
Temporary invulnerability |
Temporary berserk |
Change map detail |
Chainsaw |
Walk through walls |
All Guns/Ammo/Armor |
What's Next?
You could use this to automate processes: Run-through an entire game maybe? Play music? Probably nothing at-all worthwhile... but nonetheless still fun!