MSX – Arduino as Tape Drive (CASDuino)
As usual, no vintage equipment is complete until you've maxxed it out with all possible peripherals! I had previously made an old 'Datasette' drive work for a Commodore 64 and so started searching for an appropriate tape player for my MSX. It turns out that you either pay big dollars for a specific data recorder, or you use an off-the-shelf tape player and hope-it-works.
I then stumbled across Arduitape (aka TZXDuino). The slogan says it all: 'ARDUITAPE MARK II - THE TAPE PLAYER REPLACEMENT SD CARD SYTEM FOR 8-BIT COMPUTERS'. After a lot of digging on the blog, the instructions presented themselves. As you can see, the instructions aren't as clear as they could be and so I henceforth present the complete construction and usage of an Arduino as a fake Tape Recorder for an MSX.
Update: Current link to TZDuino 1.8 is here. Seems the links above are now dead :(
Ingredients
I ended up testing out multiple components during this build. I initially started with a 128x128 LCD but found that the libraries required to run it used too much memory and therefore the whole project was useless on a UNO/Leonardo. Instead I switched back to a 16x2 LCD.
Component | Substitute | Comments |
---|---|---|
Arduino Nano | Arduino Leonardo r3 | This Leonardo r3 from Jaycar worked fine, or a UNO. |
16x2 Character LCD | Find any 16x2 I2C LCD from eBay. | |
SD Card Shield | SD Card Module | Jaycar also has a full shield for SD Card reading, but we don't need that much infrastructure. |
AMP Shield | Arduino Compatible 2 X 3W Amplifier Module | Different, but with two channels, we can use one for input. |
4 x 4.7k resistors | Filter Board | |
3 x 4.7nF Capacitors | Filter Board | |
1 x 100nF Capacitor | Filter Board | |
2 x 3.5 mm Female Jack | PS0122 | (One is for recording... can we get it to work?) |
1 x 2.5 mm Female Jack | PS0105 | |
5 pushbuttons | SP0711 | |
Some kind of box to put it all in. |
From here, I'll describe how to hook up and test each component to make sure that you build up a stable base for troubleshooting!
The Circuit
Here's an overview of what we're building. It's really just a rigging of off-the-shelf components, apart from the filter board.
Note that the buttons aren't in the exact order. You can customise which button does what below.
Arduino
I used both a Uno and a Leonardo whilst constructing this. I bought the Leonardo as I thought it had more RAM than the Uno. Turns out it doesn't and so I switched from the 128x128 memory-expensive LCD to a simple 16x2 LCD. Either way, grab an Arduino and a nice case to house it in.
Punch holes where required and mount it all in place with hot glue.
LCD
This was a quick solder and plug-in. VCC and GND to the Arduino. SDA and SDL to analog pins A4 and A5. Make sure you have the daughterboard on the correct way around. It's on backwards in the first picture below. In the second and third pictures you'll see that you can't see the daughterboard as it's aligned behind the LCD.
If you get a single bar of black blocks, then chances are you have the I2C daughterboard on backwards. There's something that looks like a 'pin 1' designation on the board, but this only worked once I plugged it onto pin 16! I have it on BACKWARDS on the first shot above!.
SD Card
This is another I2C device which means it just needs to be wired into the bus. Again, hook VCC and GND to the Arduino. Then hook up CS to D10, SCK to D13, MOSI to D11 and finally MISO to D12.
You now should get a new message showing the first file/folder in the root directory. Go test out your google-fu to find CAS files for the MSX. You'll need one to test with.
You'll want to start showing-all-files-and-folders in Windows to get rid of the hidden items that'll now show up on this device. There's no filter in the card to disregard the kludge that OS' keep hidden on disks.
Buttons
These are easy enough... they just need a common ground and then 5 wires to the specified digital inputs. You can customise the order of your buttons, but in the end make sure you have then connected to the associated inputs of btnPlay, btnStop, btnUp, btnDown and btnMselect.
Not a TZXTape? Come again? Oh right, we're meant to be using CASDuino, not TZXDuino!
Filter and Amp
UPDATE: You can skip this circuit... just wire the the audio out straight into the amp board.
This little board is pretty straight-forward. I built it up as per the instructions.
You then need to provide GND and Audio In (Digital Pin 9) from the Arduino. Audio Out is fed into your Amplifier, which happens to be R-In on my tiny board from Jaycar. Yes, I'm using a RED wire for GND on the filter board, running to GND on the button row. It's a really good idea to tie ALL GNDs together wherever possible.
Disregard my colour-coding... that blue is actually GND and is using the GND rail from the LCD panel. Black is audio-out from the filter board to Audio-in on the amp. The amp then also needed VCC and all GND pins joined. From there, add on the 3.5mm headphone socket.
At this point I actually plugged the output into my stereo. An awful noise, to the tune of the data loading of the Commodore 64 (or even a modem dialing up), played loudly! Data!
Finally hook up the little 2.5mm socket to GND and D6. This will allow the MSX to tell the player when to play/pause.
Loading a game
With everything hooked up, I turned the device on. I then powered up the MSX, with no cartridges installed. At the BASIC prompt, my CASDuino started flickering between play/pause. It looked like the remote-control signal was floating instead of being pulled high or low. Regardless, I typed in the magic command: RUN"CAS:" (yes, double-quotes and all)
The CASDuino settled on PLAYING and I heard interference through the TV Audio!
Found:TURTLE appeared... but then it crashed?
Turns out you can set the BAUD rate of the tape playback. Default is 3600, but this was too high for my construction skills, or maybe even my MSX.
Setting this to 1200 or 2400 saw the game (slowly) load!
Teenage Mutant Hero Turtles
Did you know that UK/Ireland preferred Heroes over Ninjas? Supposedly Ninjas were too thought-provokingly violent. Either way, the game loaded. If you want to play with the keyboard, keys Q and A are UP/DOWN and keys O and P are LEFT/RIGHT.
Final Notes
Grab your glue gun and secure everything. This will hold it in place and also insulate any floating components.
Then mount the headphone plugs and close the box... it'll look much neater :) I ended up mounting a socket for the recording plug also... although it's not currently connected to anything. Might try and play with that in the future!
..and don't forget to clean up..
MSX – Using Sega Controllers
The MSX uses the same port as many older consoles, so one might be mistaken for thinking that any controller will work. Unfortunately, regardless of the fact that they are all DB-9 ports, the wiring is often different. Below I'll show how to build an adapter to hook up both a Megadrive and Master System controller to your MSX.
Sega Megadrive Button mapping
Standard Megadrive controllers have 3 action buttons. MSX only needs two, so we'll use B and C for buttons 1 and 2 respectively; the reason for this is a little complex. The Megadrive controllers have 4 buttons but only 3 wires to read the state. This means that one wire acts as the switch to read either A/Start as a pair or B/C. As that we can't switch between these without more work, we'll just use the second state and read B and C independently. There's further reading here for anyone who wants to know more.
Megadrive Pin | Description | Mapped to MSX pin |
---|---|---|
1 | Up | 1 |
2 | Down | 2 |
3 | Left | 3 |
4 | Right | 4 |
5 | +5 V | 5 |
6 | TL (A/B) | 6 |
7 | TH (Select) | 5 |
8 | Ground | |
9 | TR (Start/C) | 7 |
Wiring up a Megadrive adapter
A quick note: If you have no requirement to use the Megadrive controller in a real megadrive again, follow the instructions here instead. Otherwise you'll need a male DB-9 plug, female DB-9 socket and some wire. The shorter you make the wires, the better. Too much play, without securing everything with glue or in a case, will cause instability and/or break your solder connections.
For the most part, all wires are straight through. The only exception is to wire Pin 9 of the male plug to pin 7 of the female plug. This routes button B on the megadrive controller to button 2 on the MSX.
I cheated and hot-glue-gunned them for stability. A better method would be to buy DB-9 plugs and sockets with housings. Or find two long and thin bolts to create a frame between the two.
Sega Master System Controller
The pinout of these controllers is slightly different (see here for a diagram); the buttons are actually backwards compared to B and C on the megadrive. Therefore we're going to build the same adapter above but route (from male to female) 9 to 6 and 6 to 7.
Sega Master System Pin | Description | Mapped to MSX pin |
---|---|---|
1 | Up | 1 |
2 | Down | 2 |
3 | Left | 3 |
4 | Right | 4 |
5 | +5 V | 5 |
6 | Button 2 | 7 |
7 | ||
8 | Ground | 8 |
9 | Button 1 | 6 |
The result
The blobs rotate the right way when playing Puyo Puyo... that's all that matters!
Next... How to use that RGB port... Composite is terrible.
Roland Sound Canvas SC-55
Back in the day, my MIDI setting of choice was either Adlib, OPL3 or Sound Blaster FM. I only ever had a Sound Blaster 16 card and so never experienced any of the Sound Blaster 32/64/Awe Cards or external MIDI devices. Over the years since, I've learnt about MT-32 and wanted to try and find a real device. Unfortunately, they're neither cheap nor easy to find! A friend had also told me about the Roland Sound Canvas range and it seemed that these may be easier to find as there were more models released.
Stumbling across one...
I happened to be in Japan for a friend's wedding and, whilst travelling the countryside, scoured any recycle shops that I ventured past. It finally happened that, in one of the last shops in Kumamoto, I found a Roland Sound Canvas SC-55. It was 950 yen and was in the "Junk Corner".
I packed it into my suitcase, but researched it for the rest of the trip. One tidbit that I came across indicated that the internal battery had leakage issues (I anxiously wanted to check this, but didn't have the tools or the time.) The Sound Canvas Wikipedia page also pointed out that: "units without GM logo technically not GM compatible." Turns out mine didn't have the logo! Must be one of the first off the production line? I wonder if I'd even be able to play general games or only Sound Canvas games?
I then started getting lost in further articles describing the differences between the revisions of the SC-55. Nerdly Pleasures had a great article on the nuances here: First Generation Roland Sound Canvas Devices, which then lead to the Vogons forum: Apparently not all GS-only sc-55s are the same, some are GM. One poster noted that if you have an SC-55, you wont be disappointed as, regardless of the nuances, you'll still get quality music and games suited for the device will sound amazing.
Moisture Damage?
I noticed, when I first picked it up off the shelf, that the rear plugs were slightly oxidised. The top shell also had rust along the front edge. Opening it up saw that there was no physical damage on the board. Powering it up saw that the front panel buttons only wanted to work every-so-often. The first thing I did was find replacement microswitches from Jaycar who had a suitable (and really clicky!) substitute. Note that the replacement is half-width! Jaycar also had the full-square-shape types, but these had 4 pins and didn't match the PCB holes.
You can see above that column 3, row 4 had damage. I removed it and replaced it with the new slimline switch. Worked perfectly.
I ended up purchasing 16 of the half-width switches to replace all on the front panel.
Battery Leakage
Yup, coin-cell batteries leak too. When I first opened the box I saw that the battery was jammed in and corroding. This battery provides a trickle of power to persist storage of the current device configuration (panning, levels, key offsets, etc...) which is great if you're composing... but really, you want it to reset each time when playing games, so I was very happy to remove it.
You'll get a notice when the device powers on, but it's easily ignored.
Power Supply
The unit wants a standard DC jack with 9v at 500mA. Note that the polarity is the typical Japanese reverse! Positive on the outside.
Jaycar to the rescue yet again: The power supply had enough amps and a reversible plug on the end. I didn't even have to re-wire it. I am concerned though.. these adapters make it REALLY easy to plug in the power in the wrong way around!
Resetting/Testing
Before even trying composition software or games, I wanted to ensure that the device actually worked. 900 yen (along with the "not tested" label) meant that I could be in for a sad surprise when it chose to produce no sound. There is a demo mode on the device that plays two stored songs, so I attempted to get into this, after resetting the device.
To reset and enter GS mode, hold the left Instrument button and then hit power. Hold the right to reset (and enter) MT-32 emulation mode. Hold both to reset totally and return to GS.
The two sample songs only work in GS mode, so if you're in MT-32 mode, it'll first ask if you want to reset back to GS. This slightly confused me at the start as I thought the buttons were more damaged than first seemed; the Instrument buttons were meant to reset settings, not the Part buttons.
Anyway, to play the demo songs, hold down both Part buttons then power on the unit. You can select the song via either Part arrow and then hit the All button to play.
Using a MIDI keyboard
This 'just worked'. I'd received a midi cable with this keyboard and it was plugged from the 'out' of the keyboard to the 'in' on the front of the SC-55. Everything just worked, including all the controls on the keyboard. The keys are also perfectly pressure-sensitive... so whacking them harder really tested out the speakers!
MIDI Out via AWE64 Value
Now the fun was to begin. I pulled out the old PII-500 with an AWE64 Value sound card. The card has a whole lot of extra software and soft-synths to help with MIDI playback. This means that there's extra configuration required to get the MIDI-Out to actually work. By default, midi is routed into the AWE64 driver's 'soft synth switch' which then redirects and modifies the midi signals as configured.
I wanted none of this and set the output straight to the port. With the cables connected, I heard absolutely nothing. I mucked around with further settings... but had zero success. This 'SC-55 Howto' at Vogons indicates that output 'should just work'... not for me!
MIDI Out via SB32 PNP
This time I booted up my old 486 DX 2/66. Screamer has a nice audio setup application and allows you to test your configuration very quickly. Unfortunately, I couldn't get any midi-out at all. Is it my cable?
MIDI Out via Edirol UM-1EX
This device came with the keyboard and I'd forgotten I had it. A friend had told me they used their external midi devices in DOSBOX on new hardware, so I thought I'd give it a go. After switching off Windows 10 driver signing, I was able to get this installed on my main laptop. I then set DOSBOX to use the 'UM-1' device and loaded up Transport Tycoon.
Success! The audio sounded terrific! Of course, DOSBOX is emulation, so multi-tasking made the music slow down and sound hilarious... actually, that might just have been because the laptop was in power-saving mode and didn't want to spend all cycles on DOS emulation.
Joystick port on ISA controller card?
Nope, don't bother... it won't work! That joystick port is hardly good for one joystick with two buttons. You'll need a real soundcard with a standard gameport as they have the correct pins wired up.
MIDI-Out Cables
Back to the old PCs, it was time to work out why the MIDI wasn't sending out. The Edirol device above has nice lights on it to show that data is flowing, so I thought I'd try and add the same to my midi cable. There's a great diagram here that shows where the LEDs should be placed. Turns out they're just on the ground lines for each MIDI in and out.
Following the diagrams also available on Vogons, I realised that the resistors on the MIDI-OUT lines were way too high. 1.2kOhm vs the 220ohm listed in all diagrams I'd found. I quickly replaced these.
And then...
Well shit... Screamer Sound Setup just started sounding perfectly on port 330! Who would've thought you'd have to replace resistors inside a plug housing to get vintage midi signals to flow?
The Settlers intro sounded perfect as well.
What a steal for 900yen!
Sony HIT BIT HB-F1XD
I've recently been playing the original A-Train on an MSX emulator and wanted to know more about the MSX world. I quickly fell in love with the Sony line of MSX products and vowed to track one down in Japan. I was successful on my most recent trip!
The hunt for retro gaming goods started in Recycle Shops in Kyushu, but there were no MSXs to be found. I actually stumbled across a Famicom Disk System for 5000yen, but stupidly passed on the offer! Once in Osaka, Den Den Town was going to be the best bet and it didn't disappoint. I'd known there was a Super Potato on the main road down the far end near Shinsekai, but upon arriving we found the sign still there but the building vacant.
Retro TV Game Revival
Fortunately, across the road, next to Burger King, was Retro TV Game Revival. Here I was to meet my first pile of MSX consoles.
There were even Sony HIT BITs! But they started at AUD$400. I noted that they had the consoles that I was looking for, and vowed to return as a last resort. The asking price was a little too high, regardless of the fully-working status.
Super Potato
If you haven't heard of this store, then you're missing out. Super Potato has stores all over Japan and is famous for selling second hand (and vintage) gaming products. Thanks to mobile international data sims, we tracked down the shop. It had moved to the following location...
Once inside, a Sony Hit Bit HB-F1XD was quickly found for the handsome sum of AUD$180. This was purchased on the spot, along with the classic 1942.
It had a sticker on it declaring that the floppy drive didn't work. Another point to note was that, on checkout, the clerk handed over a laminated A4 page that declared that this machine would not function on LCD TVs. I didn't feel like explaining that it would indeed work, but just ... not ... retro-esque. It is good of them to avoid disappointment though. They could easily get customers coming back who just expected 30-year-old tech to work fine.
From here, I didn't have anything to plug this in to whilst in Japan. No places I stayed at had TVs, let alone CRTs!
Welcome to Australia, MSX-2
I purchased extra luggage. I didn't want Jetstar raping me at the check-in counter ... I'd worked out the math that extra luggage (purchase online, prior to check-in!) was still cheaper than posting this bad boy, and the Famicom (just a regular Famicom, from another retro store), that were obesifying my suitcase.
In the end, all made it back to Oz safely and everything was quickly checked for in-transit damage. Safe!
Thanks to the creepy Japanese Massage Chair that I previously acquired, I had a nicely capable step-down transformer ready to go for this MSX. Of course, in the heat of the moment I accidently plugged the MSX straight in to 240v! It made a lovely humming noise; the transformer was trying to deal with cycles/current that it just wasn't meant to. I quickly corrected this mistake and all powered up perfectly well. It even worked on my crappy AUD$10 Samsung LCD TV!
I'll post again shortly on how to use this thing, the best way to hook it up to an LCD TV and flash cartridges.
DEC 4000 AXP – Initialisation and OS Installation
I was finally able to see init screens and boot diagnostics after getting my newly acquired DEC 4000 AXP to talk over serial. PuTTY could be configured into DEC ANSI and displayed everything perfectly.
VMS PALcode V5.56A, OSF PALcode V1.45A +------------------------------------------------------------------------------+ ¦ 13:26:22 January 9, 2061 ¦ ¦ ¦ ¦ Digital Equipment Corporation ¦ ¦ ¦ ¦ DEC 4000 AXP (tm) ¦ ¦ ¦ ¦ +------------------------------------+ ¦ ¦ ¦ | Executing Power Up Diagnostics ¦ ¦ ¦ +------------------------------------+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ CPU Memory Storage Net Futurebus+ ¦ ¦ 0 1 0 1 2 3 A B C D E 0 1 1 2 3 4 5 6 ¦ ¦ +-----------------------------------------------+ ¦ ¦ ¦ P - - - P P ? ? ? ? ? ? ? ? ? ? ? ? ? ¦ ¦ ¦ +-----------------------------------------------+ ¦ ¦ ¦ +------------------------------------------------------------------------------¦ ¦ * Test in progress P Pass F Fail - Not Present ? Sizing ¦ +------------------------------------------------------------------------------+ Diagnostic Name ID Device Pass Test Hard/Soft 9-JAN-2061 io_test 0000003e scsi_low_con 1 1 0 1 13:26:29 Expected value:fc Received value: fffffffd Failing addr: 0 *** End of Error *** *** Soft Error - Error #11 - TOY Clock Valid bit not set Diagnostic Name ID Device Pass Test Hard/Soft 9-JAN-2061 io_test 0000003e toy 1 2 0 2 13:26:29 Expected value:80 Received value: 0 Failing addr: d *** End of Error *** *** Error (eza0), Mop loop message timed out from: 08-00-2b-3d-df-18 *** List index: 0 received count: 0 expected count 1 +------------------------------------------------------------------------------+ ¦ Console V4.0-1 VMS PALcode V5.56A, OSF PALcode V1.45A ¦ ¦ ¦ ¦ CPU 0 P B2001-BA DECchip (tm) 21064-3 ¦ ¦ CPU 1 - ¦ ¦ Memory 0 - ¦ ¦ Memory 1 - ¦ ¦ Memory 2 P B2002-DA 128 MB ¦ ¦ Memory 3 P B2002-DA 128 MB ¦ ¦ Ethernet 0 P 08-00-2B-3D-DF-18 ¦ ¦ Ethernet 1 P 08-00-2B-3D-DF-17 ¦ ¦ ¦ ¦ ID 0 ID 1 ID 2 ID 3 ID 4 ID 5 ID 6 ID 7 ¦ ¦ A SCSI P RZ28 RZ28 RZ28 RZ28 MATSHI Host ¦ ¦ B P ¦ ¦ C P ¦ ¦ D P ¦ ¦ E F ¦ ¦ Futurebus+ P ¦ ¦ ¦ ¦ System Status Fail Type 'cat el' to see errors ¦ +------------------------------------------------------------------------------+ DEC 4000 AXP (tm) console V4.0-1, built on Apr 13 1998 at 16:21:03 >>>
Initialisation indicated 3 errors: SCSI device, TOY and MOR. The SCSI can probably be attributed to the fact that I removed the whole 'B' drive chassis. TOY is the Time Of Year clock and I'm going to assume that the battery is dead. MOR is pointing to Ethernet port 0.. Nothing is plugged in.
Time Of Year
To fix this error, we needed to remove the KFA40 I/O Module. This is located in the right-most slot on the back of the machine. Extricating the board turned out to be a challenge in itself. It looks like someone had already snapped the brackets that hold the face-plate from the main board. This face-plate includes the levers which 'jimmy' the board out of the rear sockets, and so they no longer successfully applied pressure where required. Instead they just further wrecked the face-plate!
To get the board out, I first tried a hand each on the network BNC sockets, but this was also a dangerous idea as they would only be soldered on. I ended up cutting a coat-hanger and slotting it in at the back of the board, between the two plugs where the board plugs into the back-plane. A slight amount of pressure saw the whole board pop out.
I had a quick glance over it and found nothing that looked like a cell battery. I then went back to the diagram of the board in the Technical Manual and freaked out.
It's a bloody DS1287! This is the same as the Compaq Deskpro 386/20n. Total nightmare.
I tried to de-solder it, but I'm really not talented in that department. I therefore decided to perform open-chip-surgery on the unit whilst still on the board. If I failed, then I'd hack the thing off entirely and replace it... if I succeeded, then I'd have a coin-cell slot on top for anyone to replace!
Once this was in place... the machine started differently?
VMS PALcode V5.56A, OSF PALcode V1.45A Lbus & Fbus have been reset and Lbus enabled initializing timer data structures lowering IPL counted 15741191 cycles in 100 ticks CPU 0 speed is 6.20 ns (161 MHz) entering idle loop Starting Memory Diagnostics Leaving back-to-back transactions turned off Testing CMIC on Memory Module 2 Turning off the stream buffers Testing CMIC on Memory Module 3 Turning on the stream buffers Testing 1st 2MB(s) on memory module 3 Testing all memory banks in parallel Testing Memory bank 0 Testing Memory bank 1 Testing Memory bank 2 Testing Memory bank 3 Module Size Base Addr Intlv Mode Intlv Unit ------ ----- --------- ---------- ---------- 0 Not Installed 1 Not Installed 2 128MB 00000000 1-Way 0 3 128MB 08000000 1-Way 0 Configured memory size = 10000000 Memory Diagnostics completed access NVRAM test Script RAM enable ncr4 ACK test Storage Bus E Initializing driver eza0.0.0.6.0. Driver eza0.0.0.6.0 initialized. Initializing driver ezb0.0.0.7.0. enable ncr0 ACK test Storage Bus A Driver ezb0.0.0.7.0 initialized. enable Fbus Start of FBUS sizer Fbus sizer completed environment variable etherneta created environment variable ethernetb created enable ncr1 ACK test Storage Bus B *** Soft Error - Error #1 - Lower SCSI Continuity Card Missing (connector J7) Diagnostic Name ID Device Pass Test Hard/Soft 153- -2053 io_test 0000003d scsi_low_con 1 1 0 1 25:153:4 Expected value:fc Received value: fffffffd Failing addr: 0 *** End of Error *** environment variable aa_lp_cnt00000040 created environment variable aa_value_bcc created environment variable aa_2x_cache_size created Warning: ncr1, loopback connector attached OR SCSI bus failure, could not acquire bus; Control Lines:ff Data lines:ff Warning: ncr1 not tested enable ncr2 ACK test Storage Bus C enable ncr3 ACK test Storage Bus D DEC 4000 AXP (tm) console V4.0-1, built on Apr 13 1998 at 16:21:03 >>>
From here I started digging for firmware updates as it seemed that I'd taken the system backwards? I randomly landed on Firmware Update Release Notes for v4.0, but calling show config seems to indicate that I already have that version.
>>>show config Console V4.0-1 VMS PALcode V5.56A, OSF PALcode V1.45A CPU 0 P B2001-BA DECchip (tm) 21064-3 CPU 1 - Memory 0 - Memory 1 - Memory 2 P B2002-DA 128 MB Memory 3 P B2002-DA 128 MB Ethernet 0 P 08-00-2B-3D-DF-18 Ethernet 1 P 08-00-2B-3D-DF-17 ID 0 ID 1 ID 2 ID 3 ID 4 ID 5 ID 6 ID 7 A SCSI P RZ28 RZ28 RZ28 RZ28 MATSHI Host B P C P D P E F Futurebus+ P System Status Fail Type 'cat el' to see errors
Reading the documentation... v4.0 of the firmware is only good to support up to 4.0D of Tru64 UNIX (well, DIGITAL UNIX.) That can be obtained from here, so let's try that.
...actually... let's get the hardware correct first.
SCSI Drive Bay B
This has always been in the init error logs. I previously removed the actual drive bay chassis to prevent the hard error... but the soft error remained. I initially tried to swap the working disk set into slot B, but it still threw the same error meaning that it was the socket or the back-plane... or the connection through to the IO board. This, of course meant that it was time to pull the thing to bits.
The modularity of the case made tearing it down easy enough to try and diagnose the problem. The machine was apart in no time! Unfortunately nothing obvious came up. This was all the nether-regions of the system that wouldn't have been touched for 25 years. I re-seated a few plugs, but that was about it. Meanwhile, putting it back together took a little longer. It seems that jiggling the cables did the trick though! Upon power up there was no more error B and the power light stayed on! I then reassembled the drives and slapped it all in.
>>>show config Console V4.0-1 VMS PALcode V5.56A, OSF PALcode V1.45A CPU 0 P B2001-BA DECchip (tm) 21064-3 CPU 1 - Memory 0 P B2002-DA 128 MB Memory 1 - Memory 2 - Memory 3 - Ethernet 0 P 08-00-2B-3D-DF-18 Ethernet 1 P 08-00-2B-3D-DF-17 ID 0 ID 1 ID 2 ID 3 ID 4 ID 5 ID 6 ID 7 A SCSI P RZ28 RZ28 RZ28 RZ28 Host B SCSI P RZ28 RZ28 RZ28M RZ28 Host C P D P E SCSI P MATSHI Host Futurebus+ P System Status Pass Type b to boot dkb0.0.0.1.0
Wait, what's that last line? We now have a bootable partition?
>>>b FMBPR and Fbus devices have been reset (boot dkb0.0.0.1.0 -flags 0) block 0 of dkb0.0.0.1.0 is a valid boot block reading 16 blocks from dkb0.0.0.1.0 bootstrap code read in base = 1f4000, image_start = 0, image_bytes = 2000 initializing HWRPB at 2000 initializing page table at 1e6000 initializing machine state setting affinity to the primary CPU jumping to bootstrap code can't open osf_boot halted CPU 0 halt code = 5 HALT instruction executed PC = 20000030 >>>
Sure, it's got the boot block... but it's missing files. Back to trying to boot off CD.
Digital UNIX 4.0D
>>>b dka6 (boot dka600.6.0.0.0 -flags 0) block 0 of dka600.6.0.0.0 is a valid boot block reading 16 blocks from dka600.6.0.0.0 bootstrap code read in base = 1f4000, image_start = 0, image_bytes = 2000 initializing HWRPB at 2000 initializing page table at 1e6000 initializing machine state setting affinity to the primary CPU jumping to bootstrap code Digital UNIX boot - Mon Dec 29 18:50:44 EST 1997 Loading vmunix ... Loading at fffffc0000230000 Current PAL Revision <0x2000000010538> Switching to OSF PALcode Succeeded New PAL Revision <0x200000002012d> Sizes: text = 4961776 data = 1324288 bss = 2884976 Starting at 0xfffffc000042d420 Alpha boot: available memory from 0xf08000 to 0xfffe000 Digital UNIX V4.0D (Rev halted CPU 0 halt code = 1 operator initiated halt PC = fffffc00004351a4 >>>
Tru64 UNIX 5.0
>>>b dka6 (boot dka600.6.0.0.0 -flags A) block 0 of dka600.6.0.0.0 is a valid boot block reading 16 blocks from dka600.6.0.0.0 bootstrap code read in base = 1f4000, image_start = 0, image_bytes = 2000 initializing HWRPB at 2000 initializing page table at 1e6000 initializing machine state setting affinity to the primary CPU jumping to bootstrap code UNIX boot - Tue Jul 20 21:02:13 EDT 1999 Loading vmunix ... Loading at 0xffffffff00000000 Mapping Image Address Space: Complete Sizes: text = 6284160 data = 1728208 bss = 1934480 Starting at 0xffffffff00242230 Alpha boot: available memory from 0x121a000 to 0xfffe000 Digital UNIX V5.0 (Rev. 910); Tue Jul 20 22:13:21 EDT 1999 physical memory = 256.00 megabytes. available memory = 239.99 megabytes. using 325 buffers containing 2.53 megabytes of memory emx: dynamic addressing enabled Firmware revision: 4.0 PALcode: UNIX version 1.45 DEC 4000 Mod halted CPU 0 halt code = 1 operator initiated halt PC = ffffffff0024cfa4
Tek Tips has a forum post here on trying to get Tru64 booted. They indicate that you might need to set some parameters first for Unix to boot.
set os_type unix set auto_action halt set bootdef_dev "" set boot_osflags 0 set eia0_mode fastfd init
Tru64 UNIX 5.1B
>>>b dka6 (boot dka600.6.0.0.0 -flags A) block 0 of dka600.6.0.0.0 is a valid boot block reading 15 blocks from dka600.6.0.0.0 bootstrap code read in base = 1f4000, image_start = 0, image_bytes = 1e00 initializing HWRPB at 2000 initializing page table at 1e6000 initializing machine state setting affinity to the primary CPU jumping to bootstrap code UNIX boot - Wednesday October 16, 2002 Loading vmunix ... Loading at 0xffffffff00000000 Sizes: text = 7922752 data = 2044560 bss = 2433008 Starting at 0xffffffff00011d70 bcm: DEGXA driver V1.0.6 NUMA lanlog failed configuring ev7_ocla subsystem Alpha boot: available memory from 0x1670000 to 0xfffe000 Compaq Tru64 UNIX V5.1B (Rev. 2650); Wed Oct 16 17:45:54 EDT 2002 physical memory = 256.00 megabytes. available memory = 233.55 megabytes. using 307 buffers containing 2.39 megabytes of memory panic (cpu 0): platform not supported by this kernel configuration DUMP: Warning: no disk available for dump. DUMP: first crash dump failed: attempting memory dump... DUMP: compressing 19536KB into 215807KB memory... DUMP: Starting Address E halted CPU 0 halt code = 1 operator initiated halt PC = ffffffff800e6be0 >>>
Right, the kernel on the CD is not built for my hardware!
Does this need NHD-7? Seems there's 'New Hardware Delivery' disks that provide additional hardware support... although this doesn't make sense, as 5.1B was released AFTER this hardware came into existence.
Wait... WinWorld has the NHD cds and firmware updates! I'll try these at some point.
OpenVMS 8.4
>>>b dka6 (boot dka600.6.0.0.0 -flags A) block 0 of dka600.6.0.0.0 is a valid boot block reading 1230 blocks from dka600.6.0.0.0 bootstrap code read in base = 1f4000, image_start = 0, image_bytes = 99c00 initializing HWRPB at 2000 initializing page table at 1e6000 initializing machine state setting affinity to the primary CPU jumping to bootstrap code Op halted CPU 0 halt code = 1 operator initiated halt PC = ffffffff83188df4 >>>
Arrghhhhh... There's an underlying trend here! It seems that every OS, whilst trying to boot, is failing even trying to print out its own name! I bet that Op above is meant to be the start of 'OpenVMS' and, like all the other attempts above, it's throwing a CPU fault whilst initialising the CPU?
I wonder if the CPU is actually faulty? Or the Memory boards?
Ethernet and Boot Server
This forum post has information on updating firmware via the network. Seems that I need a *NIX server with mopd running. The firmware then just needs to be the MAC address of the machine in question with the '.SYS' extension. I used a VM that I still had available running A2SERVER. mopd was installed via apt-get and all was well.
Running this inside a VM on a windows machine has proved problematic before. When I was trying to network boot the 386, the installer from the floppy couldn't see the NFS server in A2SERVER on my other windows PC. I therefore built a real physical Linux box hard-wired into the network. I've chosen to do this again with my Let's Note CF-Y7 Toughbook that's been gathering dust for quite some time.
I installed Linux Mint 18.1 only to find out that 'mopd' wasn't in the package repository. Googling for it, I found that it was last included back at Trusty Tahr. Fortunately, we can work around this. Download the mopd package directly from here (or here if you're running i386) and then also get libelfg0, as this isn't in the newest repo either.
From here, run sudo dpkg -i libelfg0_0.8.13-5_amd64.deb and then sudo dpkg -i mopd_2.5.3-21_amd64.deb. This'll get mopd installed. Run man mopd to see where it expects its server directory to be; in this case /srv/tftp/mopd. Create this directory, grab the firmware file from here and copy it in.
Based on the forum post instructions above, we need the file to be mac_address.SYS. We can get this from the intialisation log: 08-00-2B-3D-DF-18. I therefore ran cp cfw_v40_updp3.sys 08002b3ddf18.SYS. Yes, use lowercase for the address and uppercase for the extension.
steven@letsnote-y7 /srv/tftp/mop $ wget https://modelrail.otenko.com/assets/dec4000axp/cfw_v40_updp3.sys --2017-05-19 18:37:37-- https://modelrail.otenko.com/assets/dec4000axp/cfw_v40_updp3.sys Resolving modelrail.otenko.com (modelrail.otenko.com)... 119.15.98.75 Connecting to modelrail.otenko.com (modelrail.otenko.com)|119.15.98.75|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 1915904 (1.8M) [application/octet-stream] Saving to: 'cfw_v40_updp3.sys’ cfw_v40_updp3.sys 100%[===================>] 1.83M 1.21MB/s in 1.5s 2017-05-19 18:37:39 (1.21 MB/s) - 'cfw_v40_updp3.sys’ saved [1915904/1915904] steven@letsnote-y7 /srv/tftp/mop $ cp cfw_v40_updp3.sys 08002b3ddf18.SYS steven@letsnote-y7 /srv/tftp/mop $ sudo mopd -a -d mopd: not running as daemon, -d given. MOP DL 802.3 8:0:2b:3d:df:18 > ab:0:0:1:0:0 len 71 code 08 RPR My address is 00:13:e8:2d:c0:b1 MOP DL 802.3 0:13:e8:2d:c0:b1 > 8:0:2b:3d:df:18 len 9 code 03 ASV MOP DL 802.3 8:0:2b:3d:df:18 > ab:0:0:1:0:0 len 71 code 08 RPR My address is 00:13:e8:2d:c0:b1 MOP DL 802.3 0:13:e8:2d:c0:b1 > 8:0:2b:3d:df:18 len 9 code 03 ASV MOP DL 802.3 8:0:2b:3d:df:18 > 0:13:e8:2d:c0:b1 len 71 code 08 RPR MOP DL 802.3 0:13:e8:2d:c0:b1 > 8:0:2b:3d:df:18 len 1492 code 02 MLD MOP DL 802.3 8:0:2b:3d:df:18 > 0:13:e8:2d:c0:b1 len 71 code 08 RPR MOP DL 802.3 0:13:e8:2d:c0:b1 > 8:0:2b:3d:df:18 len 1492 code 02 MLD MOP DL 802.3 8:0:2b:3d:df:18 > 0:13:e8:2d:c0:b1 len 46 code 0a RML MOP DL 802.3 0:13:e8:2d:c0:b1 > 8:0:2b:3d:df:18 len 1492 code 02 MLD MOP DL 802.3 8:0:2b:3d:df:18 > 0:13:e8:2d:c0:b1 len 46 code 0a RML MOP DL 802.3 8:0:2b:3d:df:18 > 0:13:e8:2d:c0:b1 len 46 code 0a RML MOP DL 802.3 0:13:e8:2d:c0:b1 > 8:0:2b:3d:df:18 len 1492 code 02 MLD ...
And that was the unit actually accepting the firmware and running the update utility!
>>>b eza0 (boot eza0.0.0.6.0 -flags 0) Trying MOP boot. ................................. Network load complete. Host name: ipc Host address: 00-13-e8-2d-c0-b1 bootstrap code read in base = 1f4000, image_start = 0, image_bytes = 1d3a00 initializing HWRPB at 2000 initializing page table at 1e6000 initializing machine state setting affinity to the primary CPU jumping to bootstrap code VMS PALcode V5.56A, OSF PALcode V1.45A Lbus & Fbus have been reset and Lbus enabled initializing timer data structures lowering IPL counted 15626232 cycles in 100 ticks CPU 0 speed is 6.25 ns (160 MHz) entering idle loop Starting Memory Diagnostics Leaving back-to-back transactions turned off Testing CMIC on Memory Module 0 Turning on the stream buffers Testing all memory banks in parallel Testing Memory bank 0 Testing Memory bank 1 Testing Memory bank 2 Testing Memory bank 3 Memory size = 8000000 * Warning * Console image larger than Bcache Memory Configuration skipped Memory Diagnostics completed access NVRAM test Script RAM enable ncr4 ACK test Storage Bus E Initializing driver eza0.0.0.6.0. Driver eza0.0.0.6.0 initialized. Initializing driver ezb0.0.0.7.0. enable ncr0 ACK test Storage Bus A Driver ezb0.0.0.7.0 initialized. enable Fbus Start of FBUS sizer Fbus sizer completed enable ncr1 ACK test Storage Bus B enable ncr2 ACK test Storage Bus C ***** Loadable Firmware Update Utility ***** ------------------------------------------------------------------------------ Function Description ------------------------------------------------------------------------------ Display Displays the system's configuration table. Exit Done exit LFU (reset). List Lists the device, revision, firmware name and if found by LFU. Update Replaces current firmware with loadable data image. Verify Compares loadable and hardware images. ? or Help Scrolls this function table. ------------------------------------------------------------------------------ Type Helpfor additional information UPD> help update Update a particular device with LFU's firmware. The command format is: UPDATE [-PATH ] For example: update * Will update all LFU supported devices found in this system update io Will update the device named IO Use the LIST command to see the supported LFU devices You can optionally update a device with different firmware than defaulted to by LFU, by using the -PATH switch. For example: update io -path mopdl:new_firm/eza0 Will update the device named IO with firmware NEW_FIRM from the network. UPD> update * Confirm update on: io [Y/(N)]y WARNING: updates may take several minutes to complete for each device. DO NOT ABORT! io Updating to 4.0... Verifying 4.0... PASSED. UPD> list device FW Rev Filename Found io 4.0 cfw_e43 Y UPD> display Rev Events logged Slot Option Part# Hw Sw Serial# SDD TDD 1 IO B2101-AA J2 34 AY34507889 00 00 2 3 CPU0 B2001-BA B2 34 AY33479304 00 01 4 MEM0 B2002-DA C1 0 GA33306138 00 00 5 6 7 Futurebus+ Nodes Rev Slot Option Part# Hw Fw Serial# Description 1 2 3 4 5 6 UPD>
Rebooting showed no changes and CDs still failed when trying to print out their OS names...
Operator Initiated Halt (Update: 19/01/2021)
Ahhh crap. I've just done a 'proper' google for the error message I was getting above: operator initiated halt. It turns out that, one of the first hits is a really cool forum post on community.hpe.com that describes the reason for that error! It seems my actual front-panel HALT button may have been faulty! This hindsight makes me sad... it would've been fun to get the unit up and running and serve a text file to my network... whilst draining the apartment block's power. Such is life.
DEC 4000 AXP
I promised myself not to spend further money on junk. I promised myself to keep away from the Vintage Computers column on eBay. I tried my hardest... I really did... until I saw a DEC 4000 AXP going for ~AUD$100. Probably too much to pay... I really didn't even know what it was... but then, whilst browsing through the photos, I saw that it had somewhere around 8 SCSI disks in it and new that I could part it out if the need arose.
Whilst investigating the machine, I read a tag line on a brochure: The DEC 4000 AXP system is a high-performance superserver for multi-user environments. 'Superserver'? Take. My. Money! After purchasing it, I looked at the photos again and realised how large the machine actually was... would it even fit in my car?
Here it was, waiting for me (under a very nice paperweight!) in the corner of an industrial yard.
Back to that question: Would it fit in my car? No way. Fortunately, nearby the pickup point was an Avis rental shop. I picked up a Triton for a cheap daily rate and managed to get the unit onto the back of it. It was heavy enough to nearly pop a vertebrae; therefore also heavy enough to stay where it was placed in the tray. Another disc was nearly popped getting it back off the tray in the car park under my building.
It stayed down there for 12 hours whilst I regretted my purchase and I decided to just chop it up and part it out down there. Fortunately the MR2 happily fit with it in the car park. After a few beers, I'd decided it was worth the gamble and drove it up to the apartment. I paused for a few seconds next to my car just to compare the size!
And then in the lift...
And it looked great in the corridor...
Power cables and requirements
This machine is rated at 8 Amps, 1920W. Due to this, they've manufactured it with a 15A power cable that requires an associated 15A wall socket. It's known as an IEC C19 and I was able to purchase the cable from Jaycar. I also purchased a standard Australian power plug.. with the idea to swap them over so I could use my normal power points.
WARNING: This machine is just within the limits of a standard 10A wall socket. Hence why, after asking a few professionals in the industry, I had decided to actually plug it into a home electrical socket. If you don't own your house, you don't pay the power bill or you don't have insurance... then don't plug something like this in!
First things first, I pulled the power supply unit out of the machine and opened it up. You really know you're playing with real industrial-level hardware when you see the scale and quality of the components. I quickly realised that replacing the power socket in the PSU was not going to happen... it was happily housed in a sealed and riveted box.
I was about to start hacking the new cable when I thought of something. Those shitty international power adapters with the one-size-fits-all socket on the female side would probably accept this plug... and well, I just happened to have one that would!
From here, life was easy... plug it in and switch it on. I was on tippie-toes when doing this... all internal self-preservation systems were on high-alert knowing that I was going to plug a machine that needed a lot of power into a wall socket that might not be able to cope. Then I realised that the wall socket was on a 10A breaker and that'd go first. Of course, that'd only go if the machine actually drew the current it suggested. Chances are that on startup and idle it consumed a lot less!
I had another beer and then flicked the wall switch. Not much yet... so I hit the main 'breaker' at the rear-left of the unit. AC light! The box to the right of the power supply then started doing it's initialisation. This resulted with a Fan Failure and Error Code 9. The Owner’s Guide told me that the number indicated the number of the fan which had failed. There's only 4 fans though, so what would 9 be? Is it binary and do I therefore have a multitude of dead fans? The Service Guide came in much handier!
Fan, LDC, and Temperature Faults | ||
---|---|---|
1 + Fan Failure LED on | Fan 1 failed | Fan 1 |
2 + Fan Failure LED on | Fan 2 failed | Fan 2 |
3 + Fan Failure LED on | Fan 3 failed | Fan 3 |
4 + Fan Failure LED on | Fan 4 failed | Fan 4 |
9 + Fan Failure LED On | Cable guide is not secured or 2 fans failed | |
A + Disk Power Failure LED on | LDC A failed | LDC A |
B + Disk Power Failure LED on | LDC B failed | LDC B |
C + Disk Power Failure LED on | LDC C failed | LDC C |
D + Disk Power Failure LED on | LDC D failed | LDC D |
7 + PSC Failure LED on | Temperature sensor bad—low reading | PSC |
8 + PSC Failure LED on | Temperature sensor bad—high reading | PSC |
0 + Overtemperature shutdown LED on | System temperature in red zone |
Turns out that, yes, '9' either means multiple fan failure or a missing cable guide. What's a cable guide? Oh right, it's that metal plate lying on the floor which I had unscrewed as I was inspecting the machine. Somehow it has a sensor to know if that plate is installed or not and ... well ... it wasn't, so the error was legit.
The cable guide was screwed back on and the rear of the unit powered up green. What's next? The 'DC' side on the front. Hitting this switch saw the second-stage initialisation begin. Hard disks started blinking and you could even hear the disks searching. After a short while... there was nothing. Looking back at the rear of the machine showed the 'Disk Power Failure' light on now, with error code 'B'. Back to the front of the machine, this error indicates that there is something wrong with the disk power supply in the second drawer.
I power-cycled the machine again and saw that, during the initialisation of the second drawer, the second-left LEDs did not light! Damn. There's a PCB on the inner-right of these drawers that converts the supplied power to your standard 12v/5v HDD power plug. It seems that drive 2's power supply was rubbish. Time to pull the thing to bits!
Just to quote Sesame Street: One of these things is not like the others. Usually I don't discriminate, but someone has actually put a foreign Seagate SCSI HDD in here and therefore the display/ID cable does not plug in! They've just jumpered the ID on the drive itself. Makes sense... but stops the front LEDs from working. Might have to make an adapter in the future... or find a proper DEC drive.
Either way, this meant that it really was the power board at fault. There's a little metal tab (see above, just above the '1' sticker) at the front of the drive bay chassis that, once pulled up, allows you to wrench out the entire mechanism. This gave me better access to the power board. I brought the whole drive chassis over to the workbench... but I had a hunch: Is this drive bay actually needed to get the machine to power up?
I returned to the machine and threw the power switch without drive-bay B installed. The machine initialised without error! I'll return to this drive bay later. At this point I could see it systematically checking the disks... probably for a boot partition?
Talking to it...
The console port on this machine uses a DEC Modified Modular Jack type plug and socket. This is very similar to standard phone sockets, but with all 6 pins used. The 'tab' is also aligned to the side to prevent incorrect cables from being plugged in. The serial protocol is similar to RS-324 and can be translated to RS-232 by bridging the TX and RX signal ground wires. There's a lot of great information on MMJ here.
I purchased a 6P6C 5m cable from Jaycar and cut down the tab to make the plug fit. From there, it was a simple follow-the-instructions above to get the other end of the cable wired in to a standard DB-9 serial port.
Following the diagram here (UPDATE: The diagram in that link is wrong, use the wiring diagram here for the null-modem cable) was easy enough and a cable was created. Don't look too closely at the soldering.. the wires in the phone cable weren't single-core and stripping them wasn't easy. The plastic insulation also melted as soon as it came anywhere near a heat source.
Once hooked up, I dragged my 486 DX2/66 over as it was the closest serial port I could source. Windows for Workgroups 3.11 was booted and Terminal was executed from the Accessories folder. After setting the expected settings (9600-8-n-1), the following was received...
At least something is being transmitted! Rubbish data usually means an incorrect baud rate, so I returned to the Service Guide. Turns out that the baud rate can be configured! There's either a hardware switch behind the panel, or a software configuration option. I assumed that the software setting wasn't in-play yet as there was no real software installed. Therefore I pulled another part off the machine to see what the configuration was.
Further com port setting adjustments resulted in more rubbish. I then stumbled across this site. It seems to indicate that the wiring is the other way around? I re-wired the port and had no luck on Windows 3.11 with Terminal. So I booted another machine with Putty and connected it to COM1. Holy shit...
VMS PALcode V5.56A, OSF PALcode V1.45A lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x 11:45:34 January 9, 2061 x x x x Digital Equipment Corporation x x x x DEC 4000 AXP (tm) x x x x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x x x Powerup Diagnostics Finished x x x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x x x x x x x x CPU Memory Storage Net Futurebus+ x x 0 1 0 1 2 3 A B C D E 0 1 1 2 3 4 5 6 x x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x x x P - - - P P P P P P P P P - - - - - - x x x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x x x tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu x * Test in progress P Pass F Fail - Not Present ? Sizing x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x Console V4.0-1 VMS PALcode V5.56A, OSF PALcode V1.45A x x x x CPU 0 P B2001-BA DECchip (tm) 21064-3 x x CPU 1 - x x Memory 0 - x x Memory 1 - x x Memory 2 P B2002-DA 128 MB x x Memory 3 P B2002-DA 128 MB x x Ethernet 0 P 08-00-2B-3D-DF-18 x x Ethernet 1 P 08-00-2B-3D-DF-17 x x x x ID 0 ID 1 ID 2 ID 3 ID 4 ID 5 ID 6 ID 7 x x A SCSI P RZ28 RZ28 RZ28 RZ28 Host x x B P x x C P x x D P x x E SCSI P MATSHI Host x x Futurebus+ P x x x x System Status Pass Type b to boot dkb0.0.0.1.0 x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj DEC 4000 AXP (tm) console V4.0-1, built on Apr 13 1998 at 16:21:03 >>>b (boot dkb0.0.0.1.0 -flags A) failed to open dkb0.0.0.1.0
Probably the wrong character set chosen, but we're in!
Installing an optical drive
All pictures of this machine on the web show it with a tape and CD drive in the front-bottom-right slot. Mine came with that area gutted. Fortunately, the housing was still there. I just had to re-install using a SCSI drive I had lying around.
Yes. It's in backwards. I defaulted it to ID 0 and mounted it into the parts that had been lying around... by fluke I had some screws long enough to fit through the rubber suspension joints!
On a reboot, the machine showed the drive on BUS E. (Actually, I lie, I took this text after I'd moved the CD back to its external case, so it's actually on dke0.)
>>>show device dka0.0.0.0.0 DKA0 RZ28 D41C dka100.1.0.0.0 DKA100 RZ28 D41C dka200.2.0.0.0 DKA200 RZ28 D41C dka300.3.0.0.0 DKA300 RZ28 D41C dke0.0.0.4.0 DKE0 MATSHITA CD-ROM CR-504 ST23 eza0.0.0.6.0 EZA0 08-00-2B-3D-DF-18 ezb0.0.0.7.0 EZB0 08-00-2B-3D-DF-17 p_b0.7.0.1.0 Bus ID 7 p_c0.7.0.2.0 Bus ID 7 p_d0.7.0.3.0 Bus ID 7 pka0.7.0.0.0 PKA0 SCSI Bus ID 7 pke0.7.0.4.0 PKE0 SCSI Bus ID 7
Nice! The drive is there!
Operating System
This model can run either OpenVMS [Here's a whole bunch of ported software for OpenVMS] or Tru64 UNIX. I burnt a Tru64 Unix CD and tried to boot it with boot pke4. The drive seemed to have trouble reading the disc whilst vertically mounted (the drive didn't actually have the physical tabs on the tray to support this) and so it was returned to its external case and plugged into the SCSI port on the left of disk bay A. It then became 'dke0'.
>>>boot dke0 (boot dke0.0.0.4.0 -flags A) dke0.0.0.4.0 has no media present or is disabled via the RUN/STOP switch dke0.0.0.4.0 has no media present or is disabled via the RUN/STOP switch block 0 of dke0.0.0.4.0 is a valid boot block reading 15 blocks from dke0.0.0.4.0 bootstrap code read in base = 1f4000, image_start = 0, image_bytes = 1e00 initializing HWRPB at 2000 initializing page table at 1e6000 initializing machine state setting affinity to the primary CPU jumping to bootstrap code UNIX boot - Wednesday October 16, 2002 Loading vmunix ... Loading at 0xffffffff00000000 Sizes: text = 7922752
It then sat there for a REALLY long time.... but there was CD activity... well... it blinked around... but didn't seem to get anywhere. I let it go for an hour (there goes the power bill) but nothing happened. Maybe it's handed off console output at this stage to the 'Auxillary Console Port'. Urgh... do I need to interface with the DB25 socket on the back?
Then again, the service manual says the port is used for external devices, not console terminals. I wonder if the CD image is just crap or the drive can't handle the CD-R? I might try buy some new and more reliable CDs today... or try OpenVMS just to see if something else will boot further?
Stay tuned...
Ancient Fujitsu M2654ST 2.1gb SCSI HDD
Found this at trash and treasure for AUD$20. It's huge! This is a serious server hard disk, built in February 1994. Configuring this thing requires some form of rocket-science degree as nothing is clearly labelled and there are connections for monitoring hardware as well? A little research found this document that has sparse information on this drive.
I installed this into my external SCSI enclosure and initially it just went click... click. I had the internal SCSI cable plugged in and the terminator was on the external SCSI housing's 'out' port. I'd given it up for trash (as opposed to treasure) and was about to print out the manual to check if the jumper settings would help.
Later on, I thought I'd try a separate power supply. It was an ATX power supply with an AT converter (see more information here) and the drive sat there clicking at a different rate to the previous attempt. This indicated that the ATX wasn't happy with zero load on the motherboard wires and a LOT of load on the drive wires.
I decided to put the drive back in the external SCSI enclosure, for prosperity and safe-keeping, but hadn't plugged in the SCSI data cable. Upon hitting the power switch the drive powered up!
Holy moly. Listen to that jet engine! Turns out that the drive doesn't like a data cable connected. Well, it loves it, but you need to provide it a signal to spin up once the cable is connected. Based on this, removing the terminator at the back of the SCSI enclosure saw the drive happily spin up with the 50-pin SCSI cable connected.
OK.. so... I plugged everything together properly and hooked it to my old Windows 98 SE machine. Well shit... it spun up and was detected fine. It actually holds the SCSI card BIOS screen for ransom whilst the drive spins up. Not a quick process. Can only imagine what server rooms used to sound like with these babies all firing up at once.
Once in windows.. everything reported a very empty drive... I'll grab some parition restoration utilities and give this a scan before I use it for it's full 2gb of storage...
GParted to the rescue
Here I was thinking that Windows would list any partitions... turns out that Windows doesn't understand all types of partition tables. See below for the results from GParted and then what happened when I plugged the drive into my my Power Mac 7220. It was even bootable!
The drive has partition checking software... the disk checked out. I then quickly formatted it. Don't dig through other people's memories!
486DX266: S3 86C801/805 VLB
A motherboard with VLB slots meant a video card that made the most of the hardware available. I had an alert running on eBay and this card came up one evening with a totally affordable buy-it-now price tag. There are many other VLB cards on eBay, but the sellers are valuing them at prices much higher than I'm wishing to pay.
The card was easy to install and POST'd fine. (Here's the BIOS file if anyone is interested.)
Windows 3.11 had no default drivers, so I scoured the web and found a driver named 80x241.zip. This zip was extracted into a temporary folder and then installed via the Windows Setup application under the Main program group. SF is Small Fonts, with LF therefore standing for Large Fonts.
Note the max resolution above is 1280x1024 @ 256 colours. Not bad at all for a card of this vintage? Unfortuantely, selecting anything above 800x600 caused the following.
Ok, great, hard-coded refresh rates? Fortunately, in the driver folder is REFRESH.EXE. Note that when you're in Win3.11 and can't see a thing, just hit Alt-F4, Left Arrow and then press Enter. This will exit Program Manager back to DOS.
Choose the appropriate refresh rates as per your monitor. There's no save button... just hit Exit and it'll apply any changes. If you need to change the resolution in windows, run SETUP.EXE from the Windows folder.
And now, testing the huge resolution...
Resolution is delicious... screen artefacts not so much. From here I could only assume that the 'block' down below was the area where the 1mb 'option' should go. The card was expecting that the user had added the 1mb before using the resolution. Ok... how does one upgrade ram for an old card? Steal it from another!
Just to re-emphasize: The memory chips are the wrong way around in the middle photo below!
These RAM chips are awful! They have a dot on either corner and that makes it really hard to work out the orientation. Even better, the socket on the Trident board has a triangle chipped of it, but that is the opposite to the 'key' triangle on the S3 board. Of course, I got it wrong the first time, the machine didn't boot and the RAM chips got very hot. As James has mentioned in the comments, the middle photo above shows the chips inserted the wrong way around. Don't do this! I switched it off quickly and resocketed them. And then...
Winner! Ridiculous for Win 3.11 ... but still cool.
But the refresh rate doesn't stick...
Every reboot, the refresh rates need to be re-programmed. REFRESH.EXE gives you the following options.
You'll just need to add REFRESH.EXE 1280 3 or such to your autoexec.bat.
A quick note on MDI applications
The Multiple Document Interface is all about having sub-windows in your application. Cakewalk Audio has an issue where it thinks it's maximised when the application starts. You can't actually drag the the window bigger and it seems stuck.
Fortunately, the work-around is to Cascade all windows (from the Window menu) and then maximise it once more... it'll then take the whole screen.
486DX266: CMOS Battery and PC Speaker
After building this machine, I am finding that I am losing my BIOS settings each time I pull the plug at the wall. The original motherboard owner/restorer replaced the onboard battery with a coin cell socket, but it seems that the 3v cell I put in there isn't powerful enough to keep the charge!
PC Restorer has a great article on CMOS batteries and the best point to take form their site is that most BIOS' need 3.6-4.5v to keep their memory.
In the picture above, you'll see the 4-pin header for an external battery. Pin 2 is missing. On this motherboard, pin 1 is positive and pins 3 and 4 are ground.
Using a standard 4-pin header plug from Jaycar, I wired up a 4-cell AA battery pack, but only used 3 cells. This required soldering new wires to allow current to flow between only three of the batteries.
With this all soldered, a quick test with the multimeter saw ~4.89v on the pins... which was more than expected, but an acceptable value.
Installation was a breeze and testing proved that my BIOS settings finally held!
PC Speaker
The case I have installed this machine in didn't have a PC Speaker installed by default. Therefore I used the same 4-pin header to rig up an 8ohm speaker from Jaycar. There's no real need to worry about the polarity here as it's just mainly beeps and boops. Who cares which way the diaphragm shifts?
On first boot, the machine-gun noise of RAM counting up was music to my ears!!
486DX266: Rebuilding my childhood PC
I've been itching to do this for a while. There've been some nice 486 motherboards coming up on eBay, but I haven't been in the position to get them until now. A Hippo VL+ board appeared and, although it had suffered battery damaged (and been repaired!), it was a bargain for the price. I've always wanted to tinker with the VESA Local Bus and now was my chance. I did have a VLB board back in the day, but hardly knew what it meant.
Base Components
This was to be a completely build-it-yourself project. Each item was individually selected from whatever came on offer via eBay. First up was the motherboard with 4mb of RAM and that all-important exactly-what-I-wanted 486 DX2/66 processor.
You can see where the previous owner has repaired a leaking CMOS battery. The wiring has been well-done and is all hot-glue-gunned down. The coin cell slot is in its place, but I seem to still be getting CMOS battery low issues. It could be that the coin cell battery is only 3v when the CMOS needs 3.5v+.
Next up was the VLB controller card. These full-length half-height cards provide two IDE channels, two floppy drives (via one cable), 2 com ports, a game port and a printer port! The HDD activity LED is also attached to this card.
Finally, the all-important video card. I happened across a cheap S3 86C805i VLB card. It has expandable RAM of which I'll try and fill later on.
There are only three slots where these cards fit into. You'll also find that they are named as to their purpose! There are two 'master' slots and a 'slave'. For those playing at home, the 'master' slots allow cards that support bus mastering; where the card will receive direct information rather than data via the CPU, and have it's own processing power on-board. The slave slot is for cards that don't support bus mastering but want the additional bandwidth of the VLB.
A quick trial assembly then took place. Be really careful when doing this on a flat surface! The end plates have tabs that are meant to slot into the case when the board is mounted... when not, they will simply push into your desk/table and pressing further is strongly discouraged!
Housing
I picked up a AUD$1.00 ATX case from eBay. Yes. ATX. It'll never work, you say? I have previously already put a 386 in an ATX case, but that was whilst keeping its old AT power supply and having the power cord hanging out the side. Not very neat. This time around we're going to do things differently.
Meet the case, creepy photo, right? It's full ATX... soft buttons and all. It even has an ATX power supply.
How do we possibly use an ATX supply with an AT motherboard? With an adapter plug! This beauty was found on eBay for the handsome sum of AUD$5.00.
So, simple mounting of the board ensued. Turns out the back plane is riveted into the case; annoying as previous cases I've dealt with usually allow this panel to be removed for easier motherboard mounting. Either way, the motherboard was mounted in and the adapter was hooked to the power supply.
The other end was then slapped onto the board itself. Remember with AT plugs, keep the black wires together!
Great ... so ... now what? The front panel can be rudimentarily hooked up. Reset, Power LED, Turbo LED? and that's it.
The case was stood up, all cables checked and arranged neatly so as to not cause any shorting issues and then a monitor was connected. The power supply was then jump started. This is simple: simple join the 'dangling' green and black wires together.
It worked!
ATX case + power supply without an ATX motherboard
Here's the trick you've been waiting for. The power button on the front of the ATX is momentary. This means that when you press it, power is conducted for only the timespan until you let go. So, if we hooked this up directly to the green/black wires from the power supply, we'd need to hold/tape the button down until we were done with the computer... not very handy.
Because of this, we're going to use a relay to latch the required power supply wires. The basic idea is that we'll put the momentary button on the green and black wires from the power supply and then latch those down when power starts to flow. To do this, we'll use a drive power plug which will supply us with 12v/5v when we've pressed the power button. This power feed will then latch a relay that'll latch the power button. When we let go, the power will continue as the relay will emulate an extended press!
So, apologies for the crude diagram, but that's the basic idea above. The relay is a 12v single-pole-double-throw and therefore has power, common, normally-connected and normally-open terminals. Power is used to actually throw the relay and is fed from the 12v drive power. Normally-opened isn't used as we only care about the actuation of the relay. The normally-closed side is therefore put in parallel with the power switch. When the switch is pressed, the relay fires and reinforces the power button.
The best part? It worked perfectly! The machine came on and I played A-Train. The problem? Hitting Reset did as expected... it reset the machine, but I had no way of turning it off without yanking power cables! I originally hoped that reset would trip the drive power and reset the relay; alas it turns out that the 12v stays constant. We therefore have to amend the circuit to allow powering down the machine from the reset button.
Here, we've taken the reset switch off the motherboard and used it for an off switch. This means that the machine is power-for-on, reset-for-off. It makes sense... doing an actual reset will just mean hitting reset-and-then-power instead of just reset.
In the above diagram, we've used a second identical relay to interrupt the power supply of the first relay. To do this, we've fed one of the coil power feeds of the first relay through the normally-closed line of the second relay. This means that, when the second relay is not active, the current can flow through it to the first relay. Exactly as we want, as we don't want to do anything until the reset button is pressed.
When the reset button is pressed, it'll actuate the second relay and break the current to the first relay. This will, in turn, break the latch on the power switch and the ATX supply will shut off. Pressing the power switch again will re-latch the power and we'll be up and running again.
Actually building it
I used some crappy veroboard and a spare drive power plug that I had laying around. Hot glue then helped to insulate everything. Note that in my initial sketch, I was trying to be overly-tricky and had the 5v power fed through the other side of a DPDT really. This is redundant and really not needed!
The final product worked perfectly!