Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.
Status
The first post of this thread is a WikiPost and can be edited by anyone with the appropiate permissions. Your edits will be public.
...but i just cannot get the "lspci" to work.

I now copied and pasted in portions like i did once before, using the serial connection. And now i get no errors anymore with telnet too. But in the very end, when i type "lspci", all i get is "ok".

Edit:
When i used "dev pci0, dev pci1..." instead of just "dev pci" and after each pasted the script three lines at a time, it finally worked.

Code:
0 > dev pci0  ok
0 > lspci
00:0b.0         [106b:0020] [060000] 6b10200016003022000000060810000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000040080000000000000200000600000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200100003020007000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00:10.0         [10de:0221] [030000] de1021020400b002a100000300f8000000000092080000a00000009100000000000000000000000000000000de10100000000090600000000000000000010501de101000020030001702001f000000000100000000000000ced623000f0000000144020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010440c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                                     00008010:92000000.ff000000
                                     00008014:a0000008.f0000008
                                     00008018:91000000.ff000000
                                     00008030:90000000.fffe0001
 ok


0 > dev pci1  ok
0 > lspci
00:0b.0         [106b:001f] [060000] 6b101f0016002022000000060810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040080000000000000800000100000000c1000000000000000000000000000000f3ffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00:0d.0-[01]    [1011:0026] [060400] 111026000701b00205000406082001000000000000000000000101201111a022008010800180f17f000000000000000000000000dc000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000002000ff00018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000400000000000000000000000000000000000000000000000000000000000
01:03.0         [9005:0080] [010000] 059080001400b0020200000108100080010000000440088000000000000000000000000000000000000000000590a06200000a80dc0000000000000000012819000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010002000000000000000000000000000000000000000000000000000000000000000000
                                     00011810:00000001.ffffff01
                                     00011814:80084004.fffff004
                                     00011830:800a0000.fffe0001
01:04.0         [1095:3112] [018000] 951012310400b002020080010110000041100000311000002110000011100000011000000000088000000000951012310000108060000000000000000001000000000000000004820000000000000000000000000000000000000000000000000100220600400064000000000000000000000000000000000000000000000000220000002200000000000000beffceff0000000c00004000000000180000000001011565dd62dd62924392430940094001011565dd62dd62924392430940094000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                                     00012010:00001041.fffffff9
                                     00012014:00001031.fffffffd
                                     00012018:00001021.fffffff9
                                     0001201c:00001011.fffffffd
                                     00012020:00001001.fffffff1
                                     00012024:80080000.fffffc00
                                     00012030:80100000.fff80001
01:07.0         [106b:0022] [ff0000] 6b10220016000002020000ff08100000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                                     00013810:80000000.fff80000
01:08.0         [106b:0019] [0c0310] 6b101900060000020010030c00100000003008800000000000000000000000000000000000000000000000000000000000000000000000000000000000010356000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                                     00014010:80083000.fffff000
01:09.0         [106b:0019] [0c0310] 6b101900060000020010030c00100000002008800000000000000000000000000000000000000000000000000000000000000000000000000000000000010356000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                                     00014810:80082000.fffff000
01:0a.0         [104c:8019] [0c0010] 4c101980160010020010000c08100000001008800080088000000000000000000000000000000000000000000000000000000000440000000000000000010204000000000100116400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000001000000000000000000000
                                     00015010:80081000.fffff800
                                     00015014:80088000.ffffc000
 ok



0 > dev pci2  ok
0 > lspci
00:0b.0         [106b:001e] [060000] 6b101e0016002022000000060810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040080000000000002000000000000000c200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00:0f.0         [106b:0021] [020000] 6b1021001600a0840100000208100000000020f500000000000000000000000000000000000000000000000000000000000000f50000000000000000ff014040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                                     00007810:f5200000.ffe00000
                                     00007830:f5000000.fff00001
 ok
 
Last edited:
Wow, this thread and your work is outstanding. I'm trying to figure out sofstraps calculation for 512MB VRAM myself, but I'm missing some programmer's knowledge (and spare time), so it's going slow. @nvflash sent me this link in another thread: https://envytools.readthedocs.io/en/latest/hw/io/pstraps.html#mmio-register-list and there's a way to set BAR1 size through bits 23:24

Code:
bits 23-24 [NV17:NV20 and NV25:G80]: BAR1 size

    0: 64MB
    1: 128MB
    2: 256MB
    3: 512MB

Aquamac's and Gotoh's findings seem to confirm that it's the right way:

Using Arti's (of strangedogs fame) softstrap editor on the PC rom it was only showing 256 mb of ram. I changed this to show the correct amount of 512 mb of ram and saved the rom. The card booted straight up with full 512 mb of ram recognised and CI and QE working. If I am right PC card roms are not necessarily showing the correct amount of ram in the softstraps and reads this info from other parts of the rom (Thanks Gotoh). But mac reads from the softstraps, so needs this info to be correct in the rom. You can see the changes I made with the rom below:

originalpcrom.jpeg


Above is the original PC softstraps that came with the card and they are incorrect!

modifiedpcrom.jpeg


Above are the changes I made in the rom on lines 50 & 60.

80 10 40 01 changed to 80 00 C0 01 & 22 00 A5 32 changed to 22 00 A5 C2.

So this would mean that it may be the roms that need correcting and not nvidia EFI.

Original thread here: https://aquamac.proboards.com/thread/432/7800-gtx-512-working-hackintosh

Another good read about editing the sofstraps manually:

I noticed that AND 1 & OR 1 masks in 512MB ROMs I have are always the same:

Code:
FF FF FF 7F    00 00 00 80

and Aquamac edited OR 0 mask and the checksum of straps (the thread is lacking pictures, but it's clear when you compare straps of a few 512MB cards).

Now endianess and converting thex to binary comes to play + 8-bit precision calculation (following Arti's quote from @nvlash). This is where I'm kinda lost as of now.
 
Last edited:
  • Like
Reactions: LightBulbFun
Here is the softstraps part of the XFX 6200 YANG ROM (512MB AGP) I have:

Code:
AND mask 0                              OR mask 0                             AND mask 1                             OR mask 1                                Checksum


C3 C3 EF 7F                             08 10 00 80                           FF FF FF 7F                            00 00 00 80                              22 00 A5 B1

7F EF C3 C3                             80 00 10 08                           7F FF FF FF                            80 00 00 00                              B1 A5 00 22

01111111 11101111 11000011 11000011     10000000 00000000 00010000 00001000   01111111 11111111 11111111 11111111    10000000 00000000 00000000 00000000      10110001 10100101 00000000 00100010

Of course simple copy/paste Aquamac's code into this ROM bricked the card, but I needed to try :) It should be easily recoverable with EEPROM pins short trick, but unfortunately my PC board's AGP slot died recently and I'm waiting for new one to arrive. When I'll revive the card I'll be ready for more tests.
 
Last edited:
  • Like
Reactions: LightBulbFun
BTW @joevt as a side thing if you dont mind! I have attached BootROM dumps of both my Mac Mini G4 (PowerMac10,1) iBook G4 (PowerBook6,5) and PowerBook G4 DLSD (PowerBook5,8)

I was wondering if you could take em apart and do a list of what OptionROM's are present inside like you did with the MDD? :)

(these where dumped with flashrom in linux for what thats worth)
 

Attachments

  • MMG4STOCK.ROM.zip
    760.1 KB · Views: 103
  • PB65STOCK.ROM.zip
    758.6 KB · Views: 108
  • PB58STOCK.ROM.zip
    804.8 KB · Views: 81
  • Like
Reactions: Amethyst1
Does it work on a PC as 512MB? Use linux lspci.
Sadly my flashing-machine does not even have a harddisk in it and i never touched linux in my whole live. But when i flash the card back to PC, the text that pops up when i turn on the PC, starting with GeForce... says 512MB.
 
Just edited the strap of the rom of ma PNY-card to this. The card still boots like before. But still showing 256MB in System Profiler.

These are original straps of my card. I'm trying to figure out how to set value of bits 23-24 to 3 (00000011 in binary) using OR 0 mask bits, then calculate the checksum. According to what I read, if checksum of straps is wrong, these are ignored and card "is using" hardstraps.
 
Last edited:
BTW @joevt as a side thing if you dont mind! I have attached BootROM dumps of both my Mac Mini G4 (PowerMac10,1) iBook G4 (PowerBook6,5) and PowerBook G4 DLSD (PowerBook5,8)

I was wondering if you could take em apart and do a list of what OptionROM's are present inside like you did with the MDD? :)

(these where dumped with flashrom in linux for what thats worth)
Updated #543
 
  • Like
Reactions: LightBulbFun
All the 512MB ROMs I have seem to have the softstraps bits 23,24 correctly set to 3 (11 binary) for 512MB:

Code:
# Check the softstraps of all the roms.
#
# - The 20 bytes are output in the order they appear in the rom.
# - Checksum result of the 20 bytes should be 00.
# - The softstraps are output as two 32 bit binary values with most significant bit first.
# - Softstraps overrides hardstraps except when AND bit is 1 and OR bit is 0 which is indicated by "-".

cd "/Volumes/Work/Open Firmware and Name Registry/ROM Nvidia"

flip () {
	local num="$1"
	printf "${num:6:2}${num:4:2}${num:2:2}${num:0:2}"
}

dumponestrap () {
 local theand=$((0x$(flip $1)))
 local theor=$((0x$(flip $2)))
 for ((thebit=31; thebit >= 0; thebit--)); do
 	case $(((theand >> thebit)&1))$(((theor >> thebit)&1)) in
 		00) printf 0 ;;
 		01) printf 1 ;;
 		10) printf - ;;
 		11) printf 1 ;;
 	esac
 done
}

dumpheading () {
	printf "%*sCHECKSUM RESULT┬┐         SOFTSTRAPS0 RESULT               SOFTSTRAPS1 RESULT\n" 35 ""
	printf "%*sEXPECTED CHECKSUM┬┐  ││  33222222222211111111110000000000 33222222222211111111110000000000\n" 29 ""
	printf "AND0     OR0      AND1     OR1    CHECKSUM┬┐  ││  ││  10987654321098765432109876543210 10987654321098765432109876543210\n" ""
}

readsoftstraps () {
	local therom="$1"
	dd if="$therom" bs=1 skip=0x58 count=20 2> /dev/null | xxd -p
}

calcchecksum () {
	printf "$(((0 $(perl -pE 's/(..)/+0x\1/g' <<< "${thesoftstraps}")) & 0xff))"
}

calcexpectedchecksum () {
	local thesoftstraps="$1"
	printf "$((0x100-((0 $(perl -pE 's/(.{38}).*/\1/; s/(..)/+0x\1/g' <<< "${thesoftstraps}")) & 0xff)))"
}

dumponesoftstraps () {
	local thesoftstraps="$1"
	checksum="$(calcchecksum $thesoftstraps)"
	expectedchecksum="$(calcexpectedchecksum $thesoftstraps)"
	perl -pE 's/(.{8})/\1 /g; s/\n//' <<< "$thesoftstraps"
	printf " %02x  %02x  " "$expectedchecksum" "$checksum"
	dumponestrap ${thesoftstraps:0:8} ${thesoftstraps:8:8}
	printf " "
	dumponestrap ${thesoftstraps:16:8} ${thesoftstraps:24:8}
	printf " "
}

dumponerom () {
	local therom="$1"
	thesoftstraps="$(readsoftstraps "$therom")"
	if [[ -n $thesoftstraps ]]; then
		dumponesoftstraps "$thesoftstraps"
	else
		printf "# no softstraps for"
	fi
	echo " ${therom}"
}

setsoftstraps () {
	local thesoftstraps="$1"
	local whatstraps="$2"
	local firstbit="$3"
	local numbits="$4"
	local value="$5"
	local themask=$(( ~( ((1 << $numbits) - 1) << $firstbit ) & 0xffffffff ))
	local newsoftstraps=$(
		printf "${thesoftstraps:0:16*whatstraps}"
		flip "$(printf "%08x" $((0x$(flip "${thesoftstraps:16*whatstraps:8}") & $themask )))"
		flip "$(printf "%08x" $((0x$(flip "${thesoftstraps:16*whatstraps+8:8}") & $themask | (value << $firstbit) )))"
		printf "${thesoftstraps:16*(whatstraps+1):38-16*(whatstraps+1)}"
	)
	#echo $newsoftstraps 1>&2
	printf "%s%02x" "${newsoftstraps}" "$(calcexpectedchecksum "${newsoftstraps}00")"
}

dumpheading
IFS=$'\n'
for therom in $(find . -name "*.rom" -not -path "*/Reverse/*"); do
	dumponerom "$therom"
done | grep "  00  " # only dump valid roms where the checksum result is 00

Code:
                                   CHECKSUM RESULT┬┐         SOFTSTRAPS0 RESULT               SOFTSTRAPS1 RESULT
                             EXPECTED CHECKSUM┬┐  ││  33222222222211111111110000000000 33222222222211111111110000000000
AND0     OR0      AND1     OR1    CHECKSUM┬┐  ││  ││  10987654321098765432109876543210 10987654321098765432109876543210
ff814f7e 001e8081 ffffff7f 00000080 2200a5d1  d1  00  1------11-00-----001111--------- 1-------------------------------  ./6200/ROMs/512MB_6200mac.rom
ff814f7e 001e8081 ffffff7f 00000080 2200a5d1  d1  00  1------11-00-----001111--------- 1-------------------------------  ./6200/ROMs/512MB_6200PC.rom
c383efff 0c100000 ffffff7f 00000080 2200a5ed  ed  00  -----------0-----00100----0011-- 1-------------------------------  ./6200/ROMs/6200256.rom
c383efff 08100000 ffffff7f 00000080 2200a5f1  f1  00  -----------0-----00100----0010-- 1-------------------------------  ./6200/ROMs/6200PCI.rom
ff83efff 00100000 ffffff7f 00000080 2200a5bd  bd  00  -----------0-----00100---------- 1-------------------------------  ./6200/ROMs/BFG6200.rom
c3c3ef7f 08100080 ffffff7f 00000080 2200a5b1  b1  00  1----------0------0100----0010-- 1-------------------------------  ./6200/ROMs/MLP256XFX2.rom
c3c3ef7f 08100080 ffffff7f 00000080 2200a5b1  b1  00  1----------0------0100----0010-- 1-------------------------------  ./6200/ROMs/MLP256XFX2_Cube.rom
c3c3ef7f 08100080 ffffff7f 00000080 2200a5b1  b1  00  1----------0------0100----0010-- 1-------------------------------  ./6200/ROMs/MLP256XFX2_NoSensor-2.rom
c3c3ef7f 08100080 ffffff7f 00000080 2200a5b1  b1  00  1----------0------0100----0010-- 1-------------------------------  ./6200/ROMs/MLP256XFX2_NoSensor.rom
c383efff 08100000 ffffff7f 00000080 2200a5f1  f1  00  -----------0-----00100----0010-- 1-------------------------------  ./6200/ROMs/PNY_6200_PCI.rom
ff83efff 00100000 ffffff7f 00000080 2200a5bd  bd  00  -----------0-----00100---------- 1-------------------------------  ./6200/ROMs/rommakerbfg.rom
ff83efff 00100000 ffffff7f 00000080 2200a5bd  bd  00  -----------0-----00100---------- 1-------------------------------  ./6200/ROMs/test4.rom
c383efff 08100000 ffffff7f 00000080 2200a5f1  f1  00  -----------0-----00100----0010-- 1-------------------------------  ./6200/Test/1ROMs/PNY_6200_PCI.rom
c383efff 08100000 ffffff7f 00000080 2200a5f1  f1  00  -----------0-----00100----0010-- 1-------------------------------  ./6200/Test2/1ROMs/PNY_6200_PCI.rom
c383efff 0c100000 ffffff7f 00000080 2200a5ed  ed  00  -----------0-----00100----0011-- 1-------------------------------  ./6200/Test4/1ROMs/6200256.rom
ff83efff 00100000 ffffff7f 00000080 2200a5bd  bd  00  -----------0-----00100---------- 1-------------------------------  ./6200/Test5/1ROMs/rommakerbfg.rom
3fce2ffe 80204001 ffffff7f 00000080 2200a522  22  00  -------101-0------10---010------ 1-------------------------------  ./7800/ROMs/7800GT.rom
3fce2ffe 80204001 ffffff7f 00000080 2200a522  22  00  -------101-0------10---010------ 1-------------------------------  ./7800/ROMs/7800GTX_256.rom
3fce2ffe 8020c001 ffffff7f 00000080 2200a5a2  a2  00  -------111-0------10---010------ 1-------------------------------  ./7800/ROMs/7800GTX_512.rom
3fce2ffe 80204001 ffffff7f 00000080 2200a522  22  00  -------101-0------10---010------ 1-------------------------------  ./7800/Test1/1ROMs/PNY_7800_PCI.rom
c3c36ffe 0c100001 ffffff7f 00000080 2200a52d  2d  00  -------10--0------0100----0011-- 1-------------------------------  ./Arti/Rom Makers/6200/6200 ROM Maker 64kb no sensor.app/Contents/Resources/6200.rom
c3c36ffe 0c100001 ffffff7f 00000080 2200a52d  2d  00  -------10--0------0100----0011-- 1-------------------------------  ./Arti/Rom Makers/6200/6200 ROM Maker 64kb.app/Contents/Resources/6200.rom
3fce2ffe 80204001 ffffff7f 00000080 2200a522  22  00  -------101-0------10---010------ 1-------------------------------  ./Arti/Rom Makers/6200/6200 ROM Maker no sensor.app/Contents/Resources/6200.rom
3fce2ffe 80204001 ffffff7f 00000080 2200a522  22  00  -------101-0------10---010------ 1-------------------------------  ./Arti/Rom Makers/6200/6200 ROM Maker.app/Contents/Resources/6200.rom
ff03fe6f 00880080 fffffe7f 00000180 2200a5c6  c6  00  1--0-----------0100010---------- 1--------------1----------------  ./Flashing Utilities/NiBiTor/NiBiTor.v5.4/NiBiTor.v5.4/8800gt.rom
ff03fe6f 00880080 fffffe7f 00000180 2200a5c6  c6  00  1--0-----------0100010---------- 1--------------1----------------  ./Flashing Utilities/nvflash_windows_567/Ge8800GTfix.rom
ff03fe6f 00880080 fffffe7f 00000180 2200a5c6  c6  00  1--0-----------0100010---------- 1--------------1----------------  ./Flashing Utilities/nvflash_windows_567/ge8800GTnew.rom
3f80207e 80205081 00000000 10000080 2200a5db  db  00  1------101-10000-010000010------ 10000000000000000000000000010000  ./Fuzion GeForce FX 5500 256 MB/FuzionPC.rom
3f40001e b09040a1 00000000 10000080 0000a50d  0d  00  101----1010000001-0100001011---- 10000000000000000000000000010000  ./Fuzion GeForce FX 5500 256 MB/NVIDIAorg.rom
3f70307e 80804081 efffff7f 10000080 0000a541  41  00  1------101--00001---000010------ 1--------------------------1----  ./NVIDIA stuff/Strange Dogs Downloads/nv_hack_DVI_6800GT_2120_agp_64k/6800GT 2120m.rom
3f70307e 80804081 efffff7f 10000080 0000a541  41  00  1------101--00001---000010------ 1--------------------------1----  ./NVIDIA stuff/Strange Dogs Downloads/nv_hack_lowvoltage_6800GT_2120_agp_64k/6800GT2121m.rom
3f70307e 80804081 efffff7f 10000080 0000a541  41  00  1------101--00001---000010------ 1--------------------------1----  ./NVIDIA stuff/Strange Dogs Downloads/nv_proto_6800Ultra_2103_agp_64k/6800u.rom
3f70307e 80804081 efffff7f 10000080 0000a541  41  00  1------101--00001---000010------ 1--------------------------1----  ./NVIDIA stuff/Strange Dogs Downloads/nv_ret_6800GT_2130_agp_full/GF-6800-GT-2130.rom
3f70307e 80804081 efffff7f 10000080 0000a541  41  00  1------101--00001---000010------ 1--------------------------1----  ./NVIDIA stuff/Strange Dogs Downloads/nv_ret_6800Ultra_2119_agp_64k/GF 6800U 2119.rom
3fce2ffe 8010d001 ffffff7f 00000080 2200a5a2  a2  00  -------111-1------01---010------ 1-------------------------------  ./Quadro FX4500/ROMs/Quadro FX4500 2149, OEM PCIe.rom
3fce2ffe 8010d001 ffffff7f 00000080 2200a5a2  a2  00  -------111-1------01---010------ 1-------------------------------  ./Quadro FX4500/ROMs/Quadro_single_sided.rom
ff03fe6f 00880080 fffffe7f 00000180 2200a5c6  c6  00  1--0-----------0100010---------- 1--------------1----------------  ./ROMs/8800 GT PCI Exp EFI:BIOS org/Ge8800GT.rom
ff03fe6f 00880080 fffffe7f 00000180 2200a5c6  c6  00  1--0-----------0100010---------- 1--------------1----------------  ./ROMs/8800 GT PCI Exp EFI:BIOS org/Ge8800GTfix.rom
3f40001e b090c0a0 00000000 10000080 0000a58e  8e  00  101----0110000001-0100001011---- 10000000000000000000000000010000  ./ROMs/fx128bit.rom
3f40001e b09040a1 00000000 10000080 0000a50d  0d  00  101----1010000001-0100001011---- 10000000000000000000000000010000  ./ROMs/fx256mb_rev2.rom
3f40001e b090c0a0 00000000 10000080 0000a58e  8e  00  101----0110000001-0100001011---- 10000000000000000000000000010000  ./ROMs/fx5200u.rom
3f40001e b090c0a0 00000000 10000080 0000a58e  8e  00  101----0110000001-0100001011---- 10000000000000000000000000010000  ./ROMs/fx64bit.rom

Code:
thesoftstraps="$(readsoftstraps ./7800/ROMs/7800GTX_256.rom)"
dumpheading ; dumponesoftstraps "$thesoftstraps" ; echo

                                   CHECKSUM RESULT┬┐         SOFTSTRAPS0 RESULT               SOFTSTRAPS1 RESULT
                             EXPECTED CHECKSUM┬┐  ││  33222222222211111111110000000000 33222222222211111111110000000000
AND0     OR0      AND1     OR1    CHECKSUM┬┐  ││  ││  10987654321098765432109876543210 10987654321098765432109876543210
3fce2ffe 80204001 ffffff7f 00000080 2200a522  22  00  -------101-0------10---010------ 1------------------------------- 

newsoftstraps="$(setsoftstraps "$thesoftstraps" 0 23 2 3)"
dumpheading ; dumponesoftstraps "$newsoftstraps" ; echo

                                   CHECKSUM RESULT┬┐         SOFTSTRAPS0 RESULT               SOFTSTRAPS1 RESULT
                             EXPECTED CHECKSUM┬┐  ││  33222222222211111111110000000000 33222222222211111111110000000000
AND0     OR0      AND1     OR1    CHECKSUM┬┐  ││  ││  10987654321098765432109876543210 10987654321098765432109876543210
3fce2ffe 8020c001 ffffff7f 00000080 2200a5a2  a2  00  -------111-0------10---010------ 1------------------------------- 



thesoftstraps="$(readsoftstraps ./6200/ROMs/test4.rom)"
dumpheading ; dumponesoftstraps "$thesoftstraps" ; echo

                                   CHECKSUM RESULT┬┐         SOFTSTRAPS0 RESULT               SOFTSTRAPS1 RESULT
                             EXPECTED CHECKSUM┬┐  ││  33222222222211111111110000000000 33222222222211111111110000000000
AND0     OR0      AND1     OR1    CHECKSUM┬┐  ││  ││  10987654321098765432109876543210 10987654321098765432109876543210
ff83efff 00100000 ffffff7f 00000080 2200a5bd  bd  00  -----------0-----00100---------- 1------------------------------- 

newsoftstraps="$(setsoftstraps "$thesoftstraps" 0 23 2 3)"
dumpheading ; dumponesoftstraps "$newsoftstraps" ; echo

                                   CHECKSUM RESULT┬┐         SOFTSTRAPS0 RESULT               SOFTSTRAPS1 RESULT
                             EXPECTED CHECKSUM┬┐  ││  33222222222211111111110000000000 33222222222211111111110000000000
AND0     OR0      AND1     OR1    CHECKSUM┬┐  ││  ││  10987654321098765432109876543210 10987654321098765432109876543210
ff836ffe 00108001 ffffff7f 00000080 2200a5bd  bd  00  -------11--0-----00100---------- 1-------------------------------
 
Last edited:
All the 512MB ROMs I have seem to have the softstraps bits 23,24 correctly set to 3 (11 binary) for 512MB:
Impressive work again!

But doesn't this match the ROMs, like the one for my card, well working as 512MB, like OpenGL Driver Monitor shows? So strap seems to work, but only System Profiler showing the wrong size. Isn't it possible, System Profiler getting this "info" from somewhere else inside the ROM, but the strap?
 
Last edited:
All the 512MB ROMs I have seem to have the softstraps bits 23,24 correctly set to 3 (11 binary) for 512MB:

Code:
cd "/Volumes/Work/Open Firmware and Name Registry/ROM Nvidia"

flip () {
    local num="$1"
    printf "${num:6:2}${num:4:2}${num:2:2}${num:0:2}"
}

dump () {
 local theand=$((0x$(flip $1)))
 local theor=$((0x$(flip $2)))
 for ((thebit=31; thebit >= 0; thebit--)); do
     case $(((theand >> thebit)&1))$(((theor >> thebit)&1)) in
         00) printf 0 ;;
         01) printf 1 ;;
         10) printf - ;;
         11) printf 1 ;;
     esac
 done
}

printf "%*s33222222222211111111110000000000 33222222222211111111110000000000\n" 49 ""
printf "%*s10987654321098765432109876543210 10987654321098765432109876543210\n" 49 ""
IFS=$'\n'
for therom in $(find . -name "*.rom"); do
    thesoftstraps="$(dd if="$therom" bs=1 skip=0x58 count=20 2> /dev/null | xxd -p)"
    if [[ -n $thesoftstraps ]]; then
        checksum="$(((0 $(perl -pE 's/(..)/+0x\1/g' <<< "${thesoftstraps}")) & 0xff))"
        if (( 0x$checksum == 0 )); then
            printf "%02x %s %s %s %s\n" "$checksum" $(perl -pE 's/(.{8})/\1 /g' <<< "$thesoftstraps") "$(dump ${thesoftstraps:0:8} ${thesoftstraps:8:8})" "$(dump ${thesoftstraps:16:8} ${thesoftstraps:24:8})" "$therom"
        fi
    fi
done

Code:
                                                 33222222222211111111110000000000 33222222222211111111110000000000
                                                 10987654321098765432109876543210 10987654321098765432109876543210
00 ff814f7e 001e8081 ffffff7f 00000080 2200a5d1  1------11-00-----001111--------- 1------------------------------- ./6200/Reverse/1ROMs/512MB_6200mac.rom
00 c383efff 0c100000 ffffff7f 00000080 2200a5ed  -----------0-----00100----0011-- 1------------------------------- ./6200/Reverse/1ROMs/6200256.rom
00 c3c3ef7f 08100080 ffffff7f 00000080 2200a5b1  1----------0------0100----0010-- 1------------------------------- ./6200/Reverse/1ROMs/MLP256XFX2.rom
00 c3c3ef7f 08100080 ffffff7f 00000080 2200a5b1  1----------0------0100----0010-- 1------------------------------- ./6200/Reverse/1ROMs/MLP256XFX2_Cube.rom
00 c3c3ef7f 08100080 ffffff7f 00000080 2200a5b1  1----------0------0100----0010-- 1------------------------------- ./6200/Reverse/1ROMs/MLP256XFX2_NoSensor-2.rom
00 c3c3ef7f 08100080 ffffff7f 00000080 2200a5b1  1----------0------0100----0010-- 1------------------------------- ./6200/Reverse/1ROMs/MLP256XFX2_NoSensor.rom
00 c383efff 08100000 ffffff7f 00000080 2200a5f1  -----------0-----00100----0010-- 1------------------------------- ./6200/Reverse/1ROMs/PNY_6200_PCI.rom
00 ff83efff 00100000 ffffff7f 00000080 2200a5bd  -----------0-----00100---------- 1------------------------------- ./6200/Reverse/1ROMs/rommakerbfg.rom
00 ff814f7e 001e8081 ffffff7f 00000080 2200a5d1  1------11-00-----001111--------- 1------------------------------- ./6200/ROMs/512MB_6200mac.rom
00 ff814f7e 001e8081 ffffff7f 00000080 2200a5d1  1------11-00-----001111--------- 1------------------------------- ./6200/ROMs/512MB_6200PC.rom
00 c383efff 0c100000 ffffff7f 00000080 2200a5ed  -----------0-----00100----0011-- 1------------------------------- ./6200/ROMs/6200256.rom
00 c383efff 08100000 ffffff7f 00000080 2200a5f1  -----------0-----00100----0010-- 1------------------------------- ./6200/ROMs/6200PCI.rom
00 ff83efff 00100000 ffffff7f 00000080 2200a5bd  -----------0-----00100---------- 1------------------------------- ./6200/ROMs/BFG6200.rom
00 c3c3ef7f 08100080 ffffff7f 00000080 2200a5b1  1----------0------0100----0010-- 1------------------------------- ./6200/ROMs/MLP256XFX2.rom
00 c3c3ef7f 08100080 ffffff7f 00000080 2200a5b1  1----------0------0100----0010-- 1------------------------------- ./6200/ROMs/MLP256XFX2_Cube.rom
00 c3c3ef7f 08100080 ffffff7f 00000080 2200a5b1  1----------0------0100----0010-- 1------------------------------- ./6200/ROMs/MLP256XFX2_NoSensor-2.rom
00 c3c3ef7f 08100080 ffffff7f 00000080 2200a5b1  1----------0------0100----0010-- 1------------------------------- ./6200/ROMs/MLP256XFX2_NoSensor.rom
00 c383efff 08100000 ffffff7f 00000080 2200a5f1  -----------0-----00100----0010-- 1------------------------------- ./6200/ROMs/PNY_6200_PCI.rom
00 ff83efff 00100000 ffffff7f 00000080 2200a5bd  -----------0-----00100---------- 1------------------------------- ./6200/ROMs/rommakerbfg.rom
00 ff83efff 00100000 ffffff7f 00000080 2200a5bd  -----------0-----00100---------- 1------------------------------- ./6200/ROMs/test4.rom
00 c383efff 08100000 ffffff7f 00000080 2200a5f1  -----------0-----00100----0010-- 1------------------------------- ./6200/Test/1ROMs/PNY_6200_PCI.rom
00 c383efff 08100000 ffffff7f 00000080 2200a5f1  -----------0-----00100----0010-- 1------------------------------- ./6200/Test2/1ROMs/PNY_6200_PCI.rom
00 c383efff 0c100000 ffffff7f 00000080 2200a5ed  -----------0-----00100----0011-- 1------------------------------- ./6200/Test4/1ROMs/6200256.rom
00 ff83efff 00100000 ffffff7f 00000080 2200a5bd  -----------0-----00100---------- 1------------------------------- ./6200/Test5/1ROMs/rommakerbfg.rom
00 3fce2ffe 80204001 ffffff7f 00000080 2200a522  -------101-0------10---010------ 1------------------------------- ./7800/Reverse/1ROMs/7800GT.rom
00 3fce2ffe 80204001 ffffff7f 00000080 2200a522  -------101-0------10---010------ 1------------------------------- ./7800/Reverse/1ROMs/7800GTX_256.rom
00 3fce2ffe 8020c001 ffffff7f 00000080 2200a5a2  -------111-0------10---010------ 1------------------------------- ./7800/Reverse/1ROMs/7800GTX_512.rom
00 3fce2ffe 80204001 ffffff7f 00000080 2200a522  -------101-0------10---010------ 1------------------------------- ./7800/ROMs/7800GT.rom
00 3fce2ffe 80204001 ffffff7f 00000080 2200a522  -------101-0------10---010------ 1------------------------------- ./7800/ROMs/7800GTX_256.rom
00 3fce2ffe 8020c001 ffffff7f 00000080 2200a5a2  -------111-0------10---010------ 1------------------------------- ./7800/ROMs/7800GTX_512.rom
00 3fce2ffe 80204001 ffffff7f 00000080 2200a522  -------101-0------10---010------ 1------------------------------- ./7800/Test1/1ROMs/PNY_7800_PCI.rom
00 c3c36ffe 0c100001 ffffff7f 00000080 2200a52d  -------10--0------0100----0011-- 1------------------------------- ./Arti/Rom Makers/6200/6200 ROM Maker 64kb no sensor.app/Contents/Resources/6200.rom
00 c3c36ffe 0c100001 ffffff7f 00000080 2200a52d  -------10--0------0100----0011-- 1------------------------------- ./Arti/Rom Makers/6200/6200 ROM Maker 64kb.app/Contents/Resources/6200.rom
00 3fce2ffe 80204001 ffffff7f 00000080 2200a522  -------101-0------10---010------ 1------------------------------- ./Arti/Rom Makers/6200/6200 ROM Maker no sensor.app/Contents/Resources/6200.rom
00 3fce2ffe 80204001 ffffff7f 00000080 2200a522  -------101-0------10---010------ 1------------------------------- ./Arti/Rom Makers/6200/6200 ROM Maker.app/Contents/Resources/6200.rom
00 ff03fe6f 00880080 fffffe7f 00000180 2200a5c6  1--0-----------0100010---------- 1--------------1---------------- ./Flashing Utilities/NiBiTor/NiBiTor.v5.4/NiBiTor.v5.4/8800gt.rom
00 ff03fe6f 00880080 fffffe7f 00000180 2200a5c6  1--0-----------0100010---------- 1--------------1---------------- ./Flashing Utilities/nvflash_windows_567/Ge8800GTfix.rom
00 ff03fe6f 00880080 fffffe7f 00000180 2200a5c6  1--0-----------0100010---------- 1--------------1---------------- ./Flashing Utilities/nvflash_windows_567/ge8800GTnew.rom
00 3f80207e 80205081 00000000 10000080 2200a5db  1------101-10000-010000010------ 10000000000000000000000000010000 ./Fuzion GeForce FX 5500 256 MB/FuzionPC.rom
00 3f40001e b09040a1 00000000 10000080 0000a50d  101----1010000001-0100001011---- 10000000000000000000000000010000 ./Fuzion GeForce FX 5500 256 MB/NVIDIAorg.rom
00 3f70307e 80804081 efffff7f 10000080 0000a541  1------101--00001---000010------ 1--------------------------1---- ./NVIDIA stuff/Strange Dogs Downloads/nv_hack_DVI_6800GT_2120_agp_64k/6800GT 2120m.rom
00 3f70307e 80804081 efffff7f 10000080 0000a541  1------101--00001---000010------ 1--------------------------1---- ./NVIDIA stuff/Strange Dogs Downloads/nv_hack_lowvoltage_6800GT_2120_agp_64k/6800GT2121m.rom
00 3f70307e 80804081 efffff7f 10000080 0000a541  1------101--00001---000010------ 1--------------------------1---- ./NVIDIA stuff/Strange Dogs Downloads/nv_proto_6800Ultra_2103_agp_64k/6800u.rom
00 3f70307e 80804081 efffff7f 10000080 0000a541  1------101--00001---000010------ 1--------------------------1---- ./NVIDIA stuff/Strange Dogs Downloads/nv_ret_6800GT_2130_agp_full/GF-6800-GT-2130.rom
00 3f70307e 80804081 efffff7f 10000080 0000a541  1------101--00001---000010------ 1--------------------------1---- ./NVIDIA stuff/Strange Dogs Downloads/nv_ret_6800Ultra_2119_agp_64k/GF 6800U 2119.rom
00 3fce2ffe 8010d001 ffffff7f 00000080 2200a5a2  -------111-1------01---010------ 1------------------------------- ./Quadro FX4500/Reverse/1ROMs/Quadro FX4500 2149, OEM PCIe.rom
00 3fce2ffe 8010d001 ffffff7f 00000080 2200a5a2  -------111-1------01---010------ 1------------------------------- ./Quadro FX4500/Reverse/1ROMs/Quadro_single_sided.rom
00 3fce2ffe 8010d001 ffffff7f 00000080 2200a5a2  -------111-1------01---010------ 1------------------------------- ./Quadro FX4500/ROMs/Quadro FX4500 2149, OEM PCIe.rom
00 3fce2ffe 8010d001 ffffff7f 00000080 2200a5a2  -------111-1------01---010------ 1------------------------------- ./Quadro FX4500/ROMs/Quadro_single_sided.rom
00 ff03fe6f 00880080 fffffe7f 00000180 2200a5c6  1--0-----------0100010---------- 1--------------1---------------- ./ROMs/8800 GT PCI Exp EFI:BIOS org/Ge8800GT.rom
00 ff03fe6f 00880080 fffffe7f 00000180 2200a5c6  1--0-----------0100010---------- 1--------------1---------------- ./ROMs/8800 GT PCI Exp EFI:BIOS org/Ge8800GTfix.rom
00 3f40001e b090c0a0 00000000 10000080 0000a58e  101----0110000001-0100001011---- 10000000000000000000000000010000 ./ROMs/fx128bit.rom
00 3f40001e b09040a1 00000000 10000080 0000a50d  101----1010000001-0100001011---- 10000000000000000000000000010000 ./ROMs/fx256mb_rev2.rom
00 3f40001e b090c0a0 00000000 10000080 0000a58e  101----0110000001-0100001011---- 10000000000000000000000000010000 ./ROMs/fx5200u.rom
00 3f40001e b090c0a0 00000000 10000080 0000a58e  101----0110000001-0100001011---- 10000000000000000000000000010000 ./ROMs/fx64bit.rom
Let me see the hex of the first two 32bit words you decoded this form. If I'm correct it understanding what Arti wrote, the first 32bit word is the AND mask and the 2nd 32bit word is the OR mask.

I think, but I'm not sure, we may need to zero the AND mask and set the OR mask bits 23 and 24 to 0x3.

The FCODE ROM AND the PC ROM don't always do the same things, or rather the OS and the drivers matter.

Likely OS X reads the BAR1 value to report the proper VRAM in the ASP, and we know that BAR1 is not being set properly but that's likely just cosmetic as OGLP reports the proper VRAM,size and from tests it looks to be working beyond the 256MB size.
 
So i was digging in the Folders again and was able to find the fCode-ROMs i have for the Gainward Bliss 7800 GS 512MB. The one, i used the card with, Gainward 256.rom, and the experimental one, which at least with a safe boot showed 512 in System Profiler. As one can see, differences are very few. And they are not in the Strap.

Sadly i can not retest this again, cause the card died years ago. But, if one still has one of them, may verify.
 

Attachments

  • Gainward Bliss ROMs.zip
    63.2 KB · Views: 97
Last edited:
But doesn't this match the ROMs, like the one for my card, well working as 512MB, like OpenGL Driver Monitor shows? So strap seems to work, but only System Profiler showing the wrong size. Isn't it possible, System Profiler getting this "info" from somewhere else inside the ROM, but the strap?
I don't know if I've seen the rom for your 512MB card.
strap is not working if lspci in Open Firmware is showing 256MB BAR1.
I don't know what System Profiler is using to show vram size.

Let me see the hex of the first two 32bit words you decoded this form. If I'm correct it understanding what Arti wrote, the first 32bit word is the AND mask and the 2nd 32bit word is the OR mask.

I think, but I'm not sure, we may need to zero the AND mask and set the OR mask bits 23 and 24 to 0x3.
The two 32bit words are in the output already. I thought it would be plain from the code what all the output means. The ones and zeros and hyphens show the result of the AND and OR values on the hardstraps. I have updated the code and output to make it more explanatory. Also, it has a function to set softstraps bits and update the checksum.

The FCODE ROM AND the PC ROM don't always do the same things, or rather the OS and the drivers matter.
I believe the Nvidia controller reads the rom by itself (before the firmware is loaded by BIOS or Open Firmware or EFI) to get the soft straps to override the hard straps. There is no BIOS or Open Firmware or EFI code that applies the soft traps. There may be some registers that indicate the current straps values.

Likely OS X reads the BAR1 value to report the proper VRAM in the ASP, and we know that BAR1 is not being set properly but that's likely just cosmetic as OGLP reports the proper VRAM,size and from tests it looks to be working beyond the 256MB size.
If it's working, then what are we doing? I suppose it would be nice to see it also work with a 512MB BAR1.

Well, sure! Seems to be the strap of the XFX WANG, the "quasi standard" 256MB-card.

Can it "for the rest of us" easily be seen in one of the HEX bytes of the strap, what 23,24 are set to?
My code shows the bits in the proper order. If you're just looking at the hex bytes, bit 23 is the msb of the third byte and bit 24 is the lsb of the fourth byte.
In this example, the AND0 and OR0 value has bits 23 and 24 changed from AND0:11 OR0:00 to AND0:00 OR0:11
ff83efff 00100000 ->
ff836ffe 00108001

So i was digging in the Folders again and was able to find the fCode-ROMs i have for the Gainward Bliss 7800 GS 512MB. The one, i used the card with, Gainward 256.rom, and the experimental one, which at least with a safe boot showed 512 in System Profiler. As one can see, differences are very few. And they are not in the Strap.
soft straps only need to be changed if the hard straps are not set to 512MB.
 
I don't know if I've seen the rom for your 512MB card.
Attached below. It is the ROM which produced the lspci-output, posted before.

strap is not working if lspci in Open Firmware is showing 256MB BAR1.
So what should the correct output for 512MB be instead of
Code:
00008014:a0000008.f0000008
?

If it's working, then what are we doing? I suppose it would be nice to see it also work with a 512MB BAR1.
So don't the values OGLDM shows for VRAM (used and free) mean that it is working / 512MB are available to the system?

soft straps only need to be changed if the hard straps are not set to 512MB.
Shouldn't hard straps be set to 512MB for any 512MB-card (like the PNY 6200 is) in the first place? So, in this case, if the soft straps in the ROM are used at all, they seem to do more harm than good.
 

Attachments

  • PNY_512_Mac.rom.zip
    30.9 KB · Views: 69
Last edited:
If it's working, then what are we doing? I suppose it would be nice to see it also work with a 512MB BAR1.
Just to be complete I suppose. Just bothers me that I had this working before and it doesn't work now.

So what is the deal with BAR memory allocations , does it reduce the system RAM by that amount when you boot the OS, or does it release the RAM so it is still available to the system?

512MB is huge amount of VRAM for the 64bit VRAM interface and the clock speed of the VRAM and throughput of the 6200 GPU. I'm not sure we are going to find any use case where 512MB of VRAM is any faster than 256MB.
 
  • Like
Reactions: flyproductions
BTW Just curious where does AGP GART play into all of this?

I have always wondered if the 7800 GS 512MB issues was maybe something AGP GART related?

I THINK the AGP GART in a PowerMac is set to 256MB (thats what I see in the linux dmesg anyhow)
 
on the G3 Beige GeForce 6200 front pleased to report it all works on my Rev B G3 beige :) tis really awesome to see Core Image coming out a G3 beige!

View attachment 2091121

for me it was the PNY_6200_PCI.ROM that worked for my PNY GeForce 6200 (Curiously its a green card so, I did try the green card 6200256.ROM first but while that worked for OF OSX would panic, however the VRAM chips on my card are different then either so I guess the VRAM settings for the Blue card match my specific green card better!)

as a follow on from this I am pleased to report it works just as well in my Power Macintosh 9600 even with its stock 604ev CPU, yeah Core Image on a 604!

1665936628302.png

I did have to manually set the output-device in openfirmware which was fun as I had to first figure out the correct path and then which of the 2 output nodes was the DVI one! but I got there in the end :)

(the 9600 sadly does not have a "screen" alias like the G3 beige does, on that I can just set the output-device to screen, jab the display into the 6200 and it finds its way!)

and obviously i cant let PRAM die/reset, then id have to repeat everything LOL


for future reference on my card NVDA,Display-B is my cards DVI output, so my path was, for slot A1 (the one closest to the rear IO)

pc1/@D/NVDA,Display-B
 
  • Like
Reactions: Amethyst1
as a follow on from this I am pleased to report it works just as well in my Power Macintosh 9600 even with its stock 604ev CPU, yeah Core Image on a 604!

View attachment 2096039
I did have to manually set the output-device in openfirmware which was fun as I had to first figure out the correct path and then which of the 2 output nodes was the DVI one! but I got there in the end :)

(the 9600 sadly does not have a "screen" alias like the G3 beige does, on that I can just set the output-device to screen, jab the display into the 6200 and it finds its way!)

and obviously i cant let PRAM die/reset, then id have to repeat everything LOL


for future reference on my card NVDA,Display-B is my cards DVI output, so my path was, for slot A1 (the one closest to the rear IO)

pc1/@D/NVDA,Display-B
Should just be able to use pci1/@D/@1
 
I'm not sure we are going to find any use case where 512MB of VRAM is any faster than 256MB.
I'm quite sure, we are not. At least even if "we" get this 6200 512MB working perfectly with all it's VRAM-glory, i would never be tempted to swap it in the Cube (which is still my favourite PPC). That's because i have the strongest doubts the 430/450 vs. 350/266 clocks of the card that's in there now could be in any way be compensated by doubeling the VRAM. Also i think, even 256MB is a nice amount for a 20 years old machine.

To the fCode-ROMs:
Not that i'd understand, what it actually does. But to my experience, it is one single byte having the biggest influence on working or not working of these 512MB cards. In the 6200 ROM it is at offset 0xF3AF and has to be set to 01 for the 512MB card and to 00 for any 256MB card. Same for the Gainward Bliss ROM, where this byte can be found at offset 0xE23B. In the ROM which made System Profiler show 512MB for the card with a safe boot it is set to 01. If set to 00, the card boots normal with drivers, but only showing 256MB.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.