I decided to focus on something easy this time, I wanted to figure out where on the memory of the card is the ATI ATOMBIOS stored, so I followed GPU-Z stepping into, for at least 2 hours and found something only for GPU-Z to trick me and give me false leads.
The line where it says "Writes bios byte by byte" is a bit misleading, since I found out that only the header of the ATOMBIOS was written to the buffer, odd as that may be. After stepping into the functions I suddenly found an address that pointed to where the BIOS was mapped to but how or when it got set, was a mystery to me.
However, what I did find is that for >=HD5k series of graphics cards, GPU-Z assumes a size of 0x20000(131072 bytes) for the BIOS.
After studying the tool radeontool, there is an interesting function here
void radeon_rom_tables(const char * file)
{
#define _64K (64*1024)
unsigned char bios[_64K];
char *biosmem;
int fd, hdr, atom;
if (strcmp(file, "mmap") == 0) {
fd = open("/dev/mem", O_RDWR);
biosmem = mmap(0, _64K, PROT_READ, MAP_SHARED, fd, 0xc0000);
if (biosmem == MAP_FAILED) {
perror("can't mmap bios");
return;
}
memset(bios, 0, _64K);
memcpy(bios, biosmem, _64K);
munmap(biosmem, _64K);
close(fd);
}
It might indicate that the rom is located at offset 0xc0000 in physical memory. However is this also true for multiple graphics cards?