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.
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.
Further cold starts took just as long; it seems the RAM checks occur every time you boot after a shutdown.
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!
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.
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.
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.
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.
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.
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!
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:
After the chipping, the following results were produced:
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.
After the chipping the results were as follows:
...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.
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.
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.
#includePROGMEM 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!