Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Still not working man ... :(

Thanks for all the trying still...

Don't know if it's got anything to do, but this rom you just gave me seems to have a different structure after the 63732 first bytes. Basically, the whole Motmot and Radeon HD 4870 header seems to be missing (in all the other roms it starts at 6400 and the Radeon thing usually shows up around 64196)
 
I don't know what I did wrong, but now my MP won't boot if I have the XFX card in any slot. Even tried with my gt120 still in.

So I decided this flashing thing ain't for me. Guess I'm not smart enough.

If anyone is interested in profiting from my tragedy, I'm ebaying this probably very usable card.

http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=200444936156&ssPageName=ADME:L:LCA:US:1123

Dude, you don't necessarily need to get rid of your card. I mean you can do whatever you want of course haha, but I'm just saying. The card is not dead or a lost cause.

Let me give you a little background on the whole flashing deal:

So, I'll assume you don't know much about it. If you do I'm sorry that I'll sound a bit repetitive.

The rather simplified version is as follows:

The hardware in these cards is perfectly capable of working with any machine that implements PCI-E. PC's with PCIE and the MacPro, for instance fall into this category. So this means the card can work on both PCs and Macs. Now, the card has, among many other components, one IC (integrated circuit -- a chip) which acts as a general controller for the card. That is, this chip is the one that initializes the card, provides all the info that a machine wanting to use the card needs (for the machine to discover the card -- know what it's dealing with and what this card's capabilities are) and establishes a bridge between the hosting machine and the GPU (graphics processing unit -- like your comp's CPU but specific to graphics) in the card.

This controller is of type eeprom (electrically erasable programable read-only memory). The name eeprom is sort of a misnomer at this point because, being electrically-erasable and therefore re-programmable, it is not properly a read-only memory. But anyways this name is an extension of the original ROM chips which back in the day were hard-coded (by burning internal fuses in the chip) at the factory and, once programmed, could no longer be modified. The name just stuck in the industry as the ROM technology evolved throughout the years.

Technically, what we are doing here is flashing new firmware. That is, flashing implies that we erase the data inside the eeprom and upload new software to it. The software is the so-called ROM files, and again we speak of rom but they are firmware. This is another borderline term at this age, but it's basically software meant to run in a dedicated IC and mainly for controlling / interfacing purposes, as opposed to regular macro-scale software running in the context of an OS.

So, back to the story. Computers also have their own eeprom chips with their own firmware. This firmware is executed when the machine starts up, before any OS loading. When a machine starts up, before loading the os at all, one of the things the firmware does is to poll the buses (PCI for instance) to discover any devices plugged to the machine's motherboard. Any devices found, are queried for their info (model, make, capabilities,etc...) and are assigned a memory address so that the CPU in the computer can address them for future use.

So the sequence, sort of, is: machine's firmware in the machine's eeprom polls and queries the PCI bus-> the firmware in the eeprom's of different devices in the PCI bus (such as the video card) in turn, query their own hardware in the card and then report this info back to the machine's firmware. This way, by the time the OS starts loading, the kernel has enough info on what devices are present, what their characteristics are and what drivers to load up to interface with them in the context of the os.

So let's put all this together now. The main difference between a PC and a Mac at bootup time, that we are concerned with for the purposes of the card, is that the firmware involved in a PCs start up process is what we call the 'old-world' BIOS. BIOS historically means basic input output system and it's a firmware arquitecture for implementing this whole (simplified) process I (sort of) explained. In other words, a certain way of accomplishing this process. Macs, have for some time now been using a different version of the truth, called EFI (extensible firmware interface).

So Macs and PCs both go through this whole start up, discovery process. Only that PCs do it by implementing a BIOS architecture and Macs use an EFI architecture. The PC video cards we are dealing with here have BIOS-type firmware in their eeproms. So this means that if you plug them in a PC, they get along just fine with the PCs BIOS-based start up sequence and everything goes fine. If you plug the card in a Mac, however, this is not the case, because you are basically having the Mac's EFI trying to comunicate with a device in the PCI bus that speaks another language all together, mainly BIOS (this is somewhat figurative -- remember, BIOS or EFI are not 'languages'). So the symptom of plugin in the PC card with the original PC firmware (PC bios, PC rom, whatever you want to call it) is logical: the mac chimes and after that..... black screen. nothing. Basically, the Mac can't communicate with the eeprom in the card and can't do anything about it. The OS cannot start either, because OS X at least in its default state needs some standard output device in the form of a video interface.

If you plug in now another card, a mac one, and now you have 2 cards in the machine the story is different. Now, at start up, pre-os, again the mac can't communicate with your PC card. But it can certainly poll and query your second mac card, and this is the one that it adds to the list of devices that the kernel will need to load a driver for. This is why with the second card, you at least do get a grey screen in the mac and maybe even the apple logo.

At this point, though, this is where I am not entirely sure how the story continues... just because I've never looked into the os x booting process yet (I mainly do audio software these days). It appears that, at some point, in the process of loading drivers for the different devices, the kernel still runs into the 'foreign' card and something gets messed up. Maybe the kernel has mismatched info or sees some PCI device and has basic info on it and still tries to install a driver to interface with it (crash logs seems to imply this). In either case, something goes wrong and the machine will usually give you a so-called kernel panic because the attempt to interface with the PC card goes wrong.

So what are we doing when we flash the card? the idea is, we leave the BIOS code inside the firmware and we also add an EFI section of code which (I'd assume) does exactly the same as the BIOS code but comforming to the EFI architecture. In this way, if the card is in a machine with BIOS, the BIOS section of the card can communicate with this machine. If the card, in contrast, is in an EFI machine, then it can still communicate with this machine too, through it's EFI section of code. Makes sense?

Last, this firmware is specific to your card. I mean, there's a a lot of code that is going to be shared between different cards of the same manufacturer and if the cards are, say ... ZWFC's or something between those too. But still, the cards can be different revisions. And different revisions imply some firmware code in the eeprom has changed. So this is why you can't just flash the card with someone else's firmware unless you are positive they have the same card as you, down to the revision of the firmware. And the only way to figure out the revision of the firmware is by examining the firmware itself.

So what most probably happened to your card is that you flashed it to the firmware that Cindori made me. This firmware was unfortunately wrong, because he made a mistake and used the EFI section of a 4890 card and not a 4870. But besides that, it might also not been even the right BIOS section for your card, because you and me might have different revisions of the same card.

So your card is in a state of induced-brickness shall we say (as in it's brick right now but it's not permanent).

For one, you might have the wrong BIOS in it... so the card might still work in a PC (thought it might be glitchy because the BIOS inside it might be trying to do things that are not exactly right for the hardware actually present in the card).

Also, you definitely have the wrong EFI in it. So on the OS X side of things (on the EFI side we should say), things are definitely wrong. The EFI firmware in the card is going to try and do / report things that are totally mismatched in terms of the hardware actually present in the card.


The first thing you can do, if you haven't done so already, is to flash the card back to the orginial PC rom. Then you have once again the card fully functional in PC world as it shipped.

The second step would be to try to come up with the right BIOS/EFI hybrid firmware for your card. This is what I personally have been trying to do for a few days now with no success. The process basically amounts to:

1. Backup your original PC firmware
2. Extract the EFI firmware from a suitable mac firmware file for your card
3. merge these BIOS and EFI parts into one hybrid firmware
4. realign some jump tables here and there to account for the nasty-ass merging you just did.

The above steps are basically, the pipomolo method. Personally I haven't had 100% success with it so far...

I have at least one doubt about the above process. How do I make sure that the EFI firmware I'm extracting from a ROM file in step 2 is the right one? Because since there's different BIOS code for different revisions of the card, I'd assume there might as well be different EFI versions for different revisions of the card too. That's one thing I'm unsure about.

Still, say there only one EFI version of the code for a 4870. And say I have been using the right EFI code all along. I'm still having problems. So I wonder, is my problem then with re-aligning the code? The thing about this is that we are just executing a script that someone made. So, personally, I can't really tell too much how the code is really being modified. If I had a way of reading both the BIOS and EFI sections in either assembly (with references of course) or, better yet, in C, then I could better understand if the final firmware makes sense or not.

But that's a whole other story.

Anyways, this whole thing turned super long!!! I don't know, hope it's at least somewhat interesting. And yes, I might have totally got something I said wrong within all this stuff.....
 
bricked cards can almost 100% be reflashed if you use a PC booting DOS and perhaps a 2nd GPU to run display.

either way, if you've given up you've given up. you need to find the spirit before you find a way to repair the card.


i'll take a 2nd look at your rom tomorrow, Salda..
 
bricked cards can almost 100% be reflashed if you use a PC booting DOS and perhaps a 2nd GPU to run display.

either way, if you've given up you've given up. you need to find the spirit before you find a way to repair the card.


i'll take a 2nd look at your rom tomorrow, Salda..

Thanks a bunch Cindori! :)

Like I said, you might want to check the fact that the last rom you made me didn't seem to have the "Radeon header" at all in the EFI section .... that's the one thing I noticed.

Thanks!
 
In the meantime.... I got me the EFI spec 1.10 and the EFI writer's guide 1.10. Cool stuff....

now I just need an EFI disassembler and, ehhh ... time to digest about 1000 pages of docs.

I'm going to start reading this stuff at some point.
 
Dude! It totally ****ing works!!!!

Thanks a bunch!

Ok. Now that my card's up and running. Would you mind telling me exactly what you did so I can learn? or at least tell me where to look for more info?

Like I said before, I literally followed pipomolo's method, which really amounts to a no-breainer: grab original rom, grab mac rom, execute 3 bash lines and 1 python script. In this respect, I obviously did have the 'right' original pc rom. So my only guess is that I had the wrong mac rom to extract the EFI section from. But maybe there's something else I'm missing...

If you did it the pipomolo way, please tell me what did you do different. If you did it through some other method, then still tell me about it if you don't mind.

Thanks again!
 
you have to account for adjusting the tables, the pipmolo method works for some roms but usually you have to push the last mcuc a bit down or it will be overwrited

peloche has some guides in his sig

the problem with my first rom was that it was made in the middle of the night and I made some misses
 
So you mean just the two links to flashing for 4890 in his sig?. Specifically, the graph on how to modify the rom via 0xed?

I have a few questions, if you don't mind telling me a bit about it:


1. Are you using just a hex editor then or are you disassembling the BIOS and/or EFI code to see the actual jump addresses?

2. Then the whole jumptable issue is with the bios section of the rom and not with the EFI part?

3. My concern here would be, right now it's relatively possible to follow instructions and getting it done all in a hex editor, but say this mcuc's are in different places in another rom (say, for instance, in a new rom for another card or something). Unless you actually know what the hex translates to in assembly there's no way you can find them in the hex editor. So my initial guess would be that you'd need to use atomdis to dissasemble the pc rom.

4. Is there only one EFI rom for each model of card (model here I mean marketing ner. such as 4870)? Cause if not how do you know you are extracting the EFI from the right mac rom? or how do you get a hold of, say, the right EFI rom for a 4870 rev. x?


I'm just trying to understand it all better, just in case someone ever needs help and maybe I can help them out like you helped me.

Thanks!

BTW, I think besides the fact I'd still like to learn about the process, this thread is sort of done, huh?
 
Thanks

Thanks for the support, guys. Yeah, this card is probably fine and can be fixed lickety split, but I've already got bidders so I'm moving on in life.

My kudos to you superstars. I'll hackintosh my C2D for fun this weekend and to get my mojo back...

Best wishes,

Frozengeek
 
Should I Use This For My Mac Pro?

So my motherboard and graphics card crapped out on me at the same time. Rather than buy a new graphics card from Apple (and waist a ton of money), I thought I'd just do this. I have a MacPro1,1 and am going to get my Mac back tomorrow, without a graphics card. First off, will I even be able to boot my Mac without a graphics card and use VNC to access my mac? Either way I can't install Natit because I wouldn't be able to boot. I am considering getting the same graphics card. But basically, now that I have the option. Which graphics card should I buy? Where should I buy it? And what method am I going to have to use to get this all working?
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.