Subscribe via RSS
6May/153

Quadra 950: CPU/RAM Upgrades and Overclocking

When it comes to upgrades, the Quadra 950 has 16 SIMM RAM slots, 4 VRAM slots, a ROM SIMM slot, 5 Nubus slots and a PDS slot. RAM and CPU upgrades can be purchased via off-the-shelf means. Little is it known that you can also then overclock your CPU. Below lists some options for getting more horsepower out of your vintage Macintosh.

Apple PowerPC Upgrade Card

The previous owner already had the "Power Macintosh Card" Control Panel installed on the 7.6.1 system. After inserting the card, I went into the control panel and enabled the PPC Card. I was informed that a reboot was required and promptly did so. It rebooted.... Apple System Profiler indicated the same-old 68k processor? I had recalled online that one user had issues with the card, but then found that it wasn't seated properly. Trying this, I shut the machine down and then put the case on its side. A gentle downward press on the card from both top corners resulted in a rewarding click. Nothing sharp, but that feeling of success when you know something is now in the correct location.

I hit the power button and ... jeebuz.... what was that wretched chime? The 68k boot chime of the Quadra 950 is pleasant, if not downright triumphant. The chime that came from the PPC addon card was ... it sounded like a cheap knock-off MOD compared to an MP3. A dodgy, poorly-recorded sample. Either way... it worked. The screen then came on and I could actually see it drawing the background line-by-line as the grey pattern loaded. Then I saw it draw the MacOS central loading screen. I was running the Supermac Spectrum/24 PDQ+ at this point and that turned out to be the cause. It needs a software update. Meanwhile the onboard video performs much better.

DSC06143 DSC06145 DSC06145

Overall the UI seems much zippier with the PowerPC enabled. Placebo probably... I'll try and perform benchmarks once I have new HDDs and a fresh operating system. Maybe some more RAM too... In the meantime, here's some benchmarks done by Low end Mac.

I've read here at Apple Fool that you can actually remove the 68k CPU when running the PowerPC PDS card. Doing so also resolves graphics issues with other Quadra models. When overclocking (the only reason I found out that you could do this), removing the 68k CPU actually allows you to run the PPC upgrade at faster speeds!

Upgrade VRAM to 2mb

The Quadra 950 has 1mb of VRAM onboard. There are 4 slots in which 4 256kb SIMMs can be installed to extend the video memory to 2mb. This will allow 1152x870 @ 24-bit colour, which is comparable to any video card you can insert! Apple has a support page describing the options for each Macintosh model and you can see that the Quadra can only take 4 more SIMMs.

Four slots support 256k 80 ns VRAM SIMMs for a maximum total of as much as 2 MB of VRAM. 512k VRAM SIMMs can be installed, but four identical ones must be installed and the system can only use 256k of each SIMM.

ROM SIMM Slot

I initially thought that there was a cache slot next to the RAM slots on the logic board. If you look at the images below in the RAM upgrade topic, you'll see that, apart from the 16 SIMMs for system memory, there is another empty slot top-right. It's near the CPU, so cache made sense. It turns out it's a ROM SIMM slot, not a cache slot. In this slot you can put in a ROM that will override the on-board ROM.

Doug Brown makes ROM SIMM programmers that can write the SIMMs that'll fit into this slot. It doesn't seem that anyone, at all, on the internet has ever done this to a Quadra 950. I've been told that you can change the start-up tune and disable the memory check, if you want to... otherwise your options for profit from tinkering with the ROM are little. It would require some very low-level detailed hardware knowledge also!

But for fun, check out Doug's post where he changed his Macintosh IIci start-up tune to the Super Mario theme. If you do want to code ROM SIMMs, Doug has his ROM SIMM burner for sale here.

This slot does have me thinking... minimal OS on an 8mb chip... it'd be like loading from an SSD!

Cache Upgrades

Meanwhile, you can buy Nubus cards full of cache. These 'MicroMac Cache cards' come as PDS cards or 'slot-free', the latter being a device that is installed between your CPU and logic board. This piggy-back mechanism puts the cache right next to your CPU and keeps your PDS slot free for a PPC upgrade.

Upgrade System RAM to 256mb

This one was simple... purchase from seller in the US on eBay. Wait. Open package. Open Quadra 950. Remove old SIMMs. Install. Or so it should have been... quite the initial scare when, upon applying power, the machine didn't start. It powered, the CD-ROM was eject-able, but it just sat there! around 2 minutes later the grey screen came up. It seems that the machine is busy checking the RAM.

DSC06247 DSC06250 DSC06252 DSC06253 DSC06254

Further cold starts took just as long; it seems the RAM checks occur every time you boot after a shutdown.

Installing large amounts of RAM in 68k Macintosh computers causes VERY LONG BOOT TIMES. It seems the BIOS runs a memory check and the more RAM in there, the longer it takes. The Quadra 950 with 256mb of RAM now takes 5 minutes from chime to gray happy mac! Note that restarts are as quick as ever.

Now that I've got my RAM in there, it's time to use it with A/UX.

Power Supply Fan

Every now and then, the Quadra would start up and the fan would make terrible noises... It sounded like something was actually stuck in it, but I couldn't see anything. Either way, I managed to take a fin off the fan propeller during an attempt to stop it. I now had to replace it. It's a standard 120mm 12v fan and a replacement was easy to find.

As I pulled off the old fan, I found the cause of the previous noises! There was an unused cable-tie in there. It seems that it had either been sucked in, or someone had shoved it in there. It was not damaged and did not come from inside the power supply. Every now and then it'd make its way close enough to the fan blades to make a racket. Seems that a bump would make it quiet again, but it would've been entirely random!

DSC06258 DSC06259 DSC06260
DSC06261 DSC06263

Either way, the new fan was in place with some adjustments; it was around 10mm shallower. The previous fan was also powered by the socket on the power supply. I grafted the new fan onto the old fans plug. The system is now running 'cool' again and much quieter! I even get a pretty blue light inside the case.

DSC06361 DSC06362 DSC06368
DSC06370 DSC06373

Overclocking your Quadra 950

Lowend Mac has the downlow on this. With the PPC card installed, I could max my oscillator out at 80Mhz. The system would then run the 68040 at 40 MHz and the PPC card at 80 MHz. Note that there may be software incompatibilities once you upgrade. Check out Apple Fool's run-down of incompatibilities here. For further information, check out Mac Crystal Oscillator Speedup History 2.6. Note, you may not be here for the Quadra 950, check out the Apple Fool Machine Specifics page to see the recommended crystal for your machine.

Based on the modification options table at Apple Fool, the Quadra 950 can take option 1 or option 2. Option 1 sounds the easiest whereas option 2 the safest... either way you need a soldering iron and some guts to tinker with your vintage macintoshes logic board.

The oscillators are available on eBay for a few dollars. I purchased mine from a Hong Kong seller. I bought a 5pk just in case. The are a standard-size unit and have 4 pins. The existing components are soldered into the motherboard, so from here on in you're in for a challenge. The best bet is to unsolder the current crystal and solder in a socket. This will allow for easy replacement to the original crystal if problems are encountered.

It might be hard to find an exact socket for the crystal. Jaycar has 14-pin sockets but they have all pins when we only want the four corners. I've modified a full-size socket by pushing through the intermediate pins.

DSC06347 DSC06348 DSC06352

The sockets are a mongrel to manipulate. Firstly, break off the thin end of the pins to be removed. They only bend when you try to force them out, so remove them from the equation. Next, use pliers or find a surface with a suitable space to push the other side of the pin in to. You could use hammer and nail here, with the head of the nail on the pin. Tap them out gently, but be warned, they are in there solidly and will require a bit of work. I used pliers on them, at an angle, and squeezed them out; but not without minor damage to the housing.

DSC06354 DSC06356 DSC06358

Removing the logic board is straight forward. Remove all the cables from the rear, remove any Nubus cards or PDS PPC card installed. Remove the power supply and hard disks/floppies/cd-roms. Disconnect the speaker and the power switch cables. The debug and reset buttons 'pop out' and can hang half out the front of the case during the process (see pictures.) There is then a tab between the memory banks, to the left, that needs to be pushed down. Once down you just need to slide the whole logic board left and it'll fall into your hands.

DSC06380 DSC06381 DSC06382
DSC06384 DSC06386 DSC06387
DSC06388 DSC06391DSC06392

Once out, heat up your soldering iron. You'll find the 66.6mhz crystal directly above the 68040 CPU. There's four pins on the back that needs to be de-soldered. Your process will either be to (as I did) loosen them one at a time, jimmying the crystal off the board, or the smarter way: use a solder-sucker to remove all solder from the pins and hope that the crystal will just slide out.

DSC06374 DSC06377 DSC06397

Either way, it took me around 10 laps of the pins with a very gentle lever-action in between to remove the crystal. I then soldered my socket in, not doing the cleanest job!

DSC06397 DSC06399 DSC06404
DSC06407 DSC06408 DSC06410

powerpcI put the original crystal in the socket (keep the 'pointy' corner of the crystal in the top-right corner!) to test that the socket was good. Note that the original crystal will have very short legs! Make sure that it's in as-firmly-as-possible and that you don't bump the machine and dislodge it! Running benchmarks (more on this below) produced the same results as pre-chipping. We win. I then shut down the machine and socketed the new crystal. It was a very suspenseful wait for the RAM checks to happen... was the machine going to boot??

5 minutes later.... I had an 80mhz PowerPC 601 machine~!

Benchmarking MacOS

Speedometer is included with the Newer Technology Disk downloads. The results, pre-clock-chip, are as follows:

newer-tech-download Picture 9 speedo-pre-chip

After the chipping, the following results were produced:

speedometer-startup Picture 9 speedo-post-chip

Yeeeeey! Not only did the bloody thing boot, the speed increased! It seems round ~20% too. Makes sense really... since the previous crystal was 66.6mhz, with the new being 80.0mhz.

SieveAhl is a recommended benchmark application for 68k Macintoshes. This application performs two tests: Sieve and Ahl. Pre-clock-chip results are reported below. The 500 tests executed very quickly. The site has a disclaimer that running the tests on PowerPCs isn't accurate as they use all sorts of emulation layers to execute 68k code. Either way, I have a clean set of figures pre-chipping.

sieve-download sieve-pre-chip-1 sieve-pre-chip-2

After the chipping the results were as follows:

sieve-configure sieve-post-chip-1 sieve-post-chip-2

...there's that ~20% increase again! Winner... the overall OS felt much zippier.

Over-clocking equals over-heating!

Of course, your mileage will always vary when over-clocking anything. Extra speed always leads to extra heat and then compounds into stability issues; the system was clocked at a specific speed by the manufacturer after rigorous quality control. Unless politics/marketing have come in, then higher clock-speeds have proven to be unstable and therefore weren't selected/enabled. Don't be sad that your CPU created a nuclear event, be happy that you had it rocketing along for a few nanoseconds! Of course, try and keep it cool for as long as you can.

It turns out that the 20% speed increase also increased the heat coming from the CPU. After around 30 minutes of running, depending on what I was actually doing, the machine would freeze. This is a very common symptom of overheating and the best method is to air-cool the CPU. The PowerPC PDS Card has a heatsink on it, but it's only passively-cooled. Fitting a fan to this should help keep the temperatures down.

DSC06436 DSC06443 DSC06447

I grabbed a fan from a local PC store that plugs into the standard power cables. It was a little huge for the scenario, but it kept the CPU nice and cool during normal usage. Note that there ain't much clearance in the case with a fan of this size... if you need more than 2 nubus slots then you'll want a smaller fan that fits inside the heat-sink fins.

If you've successfully over-clocked your 68k then fill out the survey at Apple Fool to keep everyone informed. You can see the results of other successful chippers here.

17Feb/124

Persistent Data on the Arduino (EEPROM)

It's taken me a year to realise that you can actually store data at runtime on the Arduino and happily turn it off, expecting the data to still be there when you turn it on. By this, I don't mean the code you've uploaded; I mean the actual values you've created/calculated/determined whilst your code has been executing on the Arduino.

Actually, I lie... it hasn't taken a year to 'realise'... it's taken a year to actually need the ability to store information. It occurred to me, whilst looking at Don's OpenLCB railstars products, that they'd need to store everything they 'learn' as you set them up with controller nodes. All of my previous projects would've forgotten all settings once you disconnect the power!

Memory Types on the Arduino

After a little research, it turns out that Arduinos have three types of memory areas. These would be the flash, EEPROM and SRAM. The former is the location that all 'sketches' and other compiled program code go, therefore being the largest area. The EEPROM is, depending on your chip, an area around 1k to 4k in size for storing data to be persisted. Finally the SRAM is the 'running' area where data is stored during runtime of your code.

Memory Type ATMega168 ATMega328P ATmega1280 ATmega2560
Flash 16k 32k 128k 256k
SRAM 1k 2k 8k 8k
EEPROM 512 bytes 1k 4k 4k

So, as you can see, the more you pay for the microprocessor, the more space you get to play with. I have used the Arduino Mega 1280 for a while and had never used the space available in the EEPROM... what a waste. Now I'm tinkering with the Atmega328P and, as it shows, there's a lot less space available to play with. Fortunately, depending on how frugal you are with data storage, there's more than enough for creating our OpenLCB nodes.

Working with the EEPROM

Arduino 1.0 (and all previous versions) include the EEPROM Library. This library includes two calls, being read() and write(). For the Atmega328P, I'm able to store a byte in 1024 areas. This expands to 4096 areas for the Mega.

By the way, for time-critical apps, an EEPROM write takes 3.3 ms to complete.

NOTE: As the Arduino page warns, EEPROMs are only good for 100000 writes! Please only write/update your EEPROM areas sparingly and when absolutely required.

Efficient storage of Bits/Bytes

Depending on your requirements, you may want to be more efficient in the way you store certain values. We'll start with booleans: if you're lazy and wont need to store over 1024 booleans on an Atmega328p then you can simply check the boolean and store a '1' or '0' in any of the 1024 areas. Of course, if you need more, then you'd want to efficiently use the 8 bits per byte that you have available. As each of those 8 bits can be a '1' or a '0', you can then actually store 8 booleans in each byte. It's simply a matter of 'or'ing 8 booleans together and left-shifting to ensure you set the correct bit.

byte setBit(store, bit) { //bit 1 is right-most
      store |= (1 << (bit - 1)); //set bit 5 to '1'.
}

byte clearBit(store, bit) {
      store &= !(1 << (bit - 1));
}

bool getBit(store, bit) {
      byte b = (1 << (bit - 1));
      return (store & b);
}

Arduino has a good bit of information on BitMasks and BitMath for those interested.

Using PROGMEM to store 'known' data

So, as previously mentioned, the Flash area has the most space available. The Arduino comes with the PROGMEM library for storing variables in this area. Note that you cannot easily write to this at run-time (I haven't dug far enough to work out if you really can) ... the goal is to just store large data in the flash and use it from there at runtime rather than copying to your limited SRAM first.

Firstly, you need to select from a datatype below:

Data Type Description
prog_char a signed char (1 byte) -127 to 128
prog_uchar an unsigned char (1 byte) 0 to 255
prog_int16_t a signed int (2 bytes) -32,767 to 32,768
prog_uint16_t an unsigned int (2 bytes) 0 to 65,535
prog_int32_t a signed long (4 bytes) -2,147,483,648 to * 2,147,483,647.
prog_uint32_t an unsigned long (4 bytes) 0 to 4,294,967,295

Now, declare it in the PROGMEM 'space'. It seems that the Arduino devs recommended it to be stored as an array as you'd usually only use this space for large amount of data.
I've chosen the prog_uint16_t (note that this var size is a 'word'), the code below stores two of these values and then uses them during execution.

#include 
PROGMEM prog_uint16_t myValues[] = { 123, 456 };

int k; //counter? don't quite know what for.
int readValue1, readValue2;
void setup() {
      k = 0; //read the first word. 
      readValue1 = pgm_read_word_near(charSet + k);
      k = 1;
      readValue2 = pgm_read_word_near(charSet + k);
}

void loop() {
      //now you should probably do something with these values...
}

And that's it.. I hope this helps some of you to limit your SRAM requirements and also to store data for users each time your device is switched off!