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.

joevt

macrumors 604
Jun 21, 2012
6,971
4,262
Attached is the output for all of the commands mentioned in "lspci for OpenFirmware.txt".

Installed cards: The 6800 xt on AGP (which seems to be pci0), the 6200 on the second of the PCI slots, a SATA controller on the last one.
Thanks. Looks like you ran the debug version of lspci instead of the version at the top of the file or the version from the paste? Doesn't matter. It has all the info anyway.

In the sawtooth, subsystem-id is setup as 0x10 instead of 0x00. I don't know why the G3 and Sawtooth would have different values for this.

New rom at test2/1ROMs/PNY_6200_PCI.rom

To use it, set pci-probe-list on the G3 or pci-probe-mask on the Sawtooth to skip the 6200. Then boot into Open Firmware. Setup the serial port or telnet. set pci-probe-list or pci-probe-mask to -1. Then do probe-all
It should show the values it is reading from or writing to registers. We can compare for differences, and I can plug the values into my emulator.

I am guessing the pci-probe-mask to disable the 6200 is fffffff7 since the 6200 is device @3

I wasn't able to figure out how to get Open Firmware decompressed from Sawtooth rom. The documentation I was reading doesn't have the exact location described and lzss can decompress any garbage without generating an error so I can't try random locations easily. Maybe I can try different offsets until the produced file generates a known string (any of the usual Open Firmware words that don't appear in the compressed rom).... Assuming I'm using the correct lzss algorithm. I think a dump of the Sawtooth Open Firmware dictionary might be useful here.
 

Attachments

  • 6200 #2.zip
    310 KB · Views: 78
  • Like
Reactions: flyproductions

flyproductions

macrumors 65816
Jan 17, 2014
1,089
466
Thanks. Looks like you ran the debug version of lspci instead of the version at the top of the file or the version from the paste? Doesn't matter. It has all the info anyway.
Yes! I don't know what i messed up again, but the non-debug-version gave me this "no instance"-error again. But at least this worked.
New rom at test2/1ROMs/PNY_6200_PCI.rom
In G3 it does not work and the card is still not "seen" by OS or OF.
To use it, set pci-probe-list on the G3 or pci-probe-mask on the Sawtooth to skip the 6200.
Now i have it installed in Sawtooth again...and should have applied the mask before booting into OF. It's now logging all the read/write operations but i do not heve connection to capture it. Hope i can interrupt this without doing any harm. So i will remove the 6200, setup the mask, and try again.
 

domii

macrumors member
Jul 24, 2022
50
17
Grimsby, Ontario, Canada
What version of NVFlash did you use?

Edit: Sorry for missguiding you. But from the datasheet the device i pointed too, doesn't seem to be an eeprom at all. Is there a similar looking (8-pin) part anywhere on the card? Maybe on the back.
I used 5.31 (and I also tried 5.13, 5.15 and 5.40). All give same result. see below pic
Will check the card again for an eeprom. Might of missed something, was looking up each chip.
I assume its not some kind of deviant geforce using serial flash instead of an eeprom?

thumbnail_IMG_5912.jpg
 

flyproductions

macrumors 65816
Jan 17, 2014
1,089
466
I am guessing the pci-probe-mask to disable the 6200 is fffffff7 since the 6200 is device @3
Sadly up to now i was unable to get the 6200 skipped.

I tried
Code:
fffffff7

ffffff7f

ffffbfff

ffff7fff

None of them worked. Every time i boot into OF with the 6200 installed the logging is allready running.
Is the command still the same as for OF 2.4 (with "list" swapped for "mask")?

I. e.
Code:
nvedit
setenv pci-probe-mask fffffff7
ctrl c
nvstore
setenv use-nvramrc? true
 
Last edited:

flyproductions

macrumors 65816
Jan 17, 2014
1,089
466
I used 5.31 (and I also tried 5.13, 5.15 and 5.40). All give same result. see below pic
But how did you get the card flashed, if no supported eeprom was found?

Did you try different PCI-slots or reseating the card? This fixed this kind of error for me several times.
 

joevt

macrumors 604
Jun 21, 2012
6,971
4,262
Yes! I don't know what i messed up again, but the non-debug-version gave me this "no instance"-error again. But at least this worked.
I can't help if you don't show what you typed.

In G3 it does not work and the card is still not "seen" by OS or OF.
I don't know what "does not work" means.
Put the following in nvramrc (if the card is in slot B (device @e)
Code:
(install-console)
setenv pci-probe-list FFFFBFFF
probe-all
banner
setenv pci-probe-list FFFFFFFF

Also make sure you did the following
Code:
setenv auto-boot? false
setenv use-nvramrc? true
Then when you start into Open Firmware, you can type probe-all to get the output over serial port.

Sadly up to now i was unable to get the 6200 skipped.

I tried
Code:
fffffff7
ffffff7f
ffffbfff
ffff7fff

None of them worked. Every time i boot into OF with the 6200 installed the logging is already running.
I suppose it would have been better to learn how to use pci-probe-mask before trying the logging rom.

Well, there's only 32 numbers to try, assuming pci-probe-mask is a 32 bit number.

Here's an nvramrc script to test all 32 numbers, but it's no good for you if you can't get telnet working from nvramrc.
Code:
(install-console)
7fffffff to lines/page
." hello" cr
banner
setenv pci-probe-list 0
probe-all
dev / ls
32 0 do
	1 i << dup u. cr (u.)
	" pci-probe-list" $setenv
	probe-all
	dev / ls
loop

Is the command still the same as for OF 2.4 (with "list" swapped for "mask")?

I. e.
Code:
nvedit
setenv pci-probe-mask fffffff7
ctrl c
nvstore
setenv use-nvramrc? true
I don't know. Get me a dump of the Sawtooth dictionary and I'll have a look to see how it's using pci-probe-mask.

Do you have a New World Mac with a serial port adapter in the internal modem port?
 
Last edited:

domii

macrumors member
Jul 24, 2022
50
17
Grimsby, Ontario, Canada
But how did you get the card flashed, if no supported eeprom was found?

Did you try different PCI-slots or reseating the card? This fixed this kind of error for me several times.
I haven't been able to flash the card at all yet. Only thing that appeared successful was doing a backup of the rom.
E.g. nvflash -b 6200backup.rom works without error.

I've flashed a 7800GS and a Quadro4 700 successfully with mac roms earlier. It only has 1 PCI slot and it does boot into Windows 7 using the 6200. Using freedos on a usb stick to boot and run nvflash. I'll try it in another PC and see.
 

joevt

macrumors 604
Jun 21, 2012
6,971
4,262
Here's an nvramrc script to test all 32 numbers, but it's no good for you if you can't get telnet working from nvramrc.
Also, it's probably not a good idea to call probe-all multiple times so it probably doesn't work. You may need to restart after probing with each mask value.

If you want to enable one device at a time then these are the values:
Code:
setenv pci-probe-mask 1
setenv pci-probe-mask 2
setenv pci-probe-mask 4
setenv pci-probe-mask 8
setenv pci-probe-mask 10
setenv pci-probe-mask 20
setenv pci-probe-mask 40
setenv pci-probe-mask 80
setenv pci-probe-mask 100
setenv pci-probe-mask 200
setenv pci-probe-mask 400
setenv pci-probe-mask 800
setenv pci-probe-mask 1000
setenv pci-probe-mask 2000
setenv pci-probe-mask 4000
setenv pci-probe-mask 8000
setenv pci-probe-mask 10000
setenv pci-probe-mask 20000
setenv pci-probe-mask 40000
setenv pci-probe-mask 80000
setenv pci-probe-mask 100000
setenv pci-probe-mask 200000
setenv pci-probe-mask 400000
setenv pci-probe-mask 800000
setenv pci-probe-mask 1000000
setenv pci-probe-mask 2000000
setenv pci-probe-mask 4000000
setenv pci-probe-mask 8000000
setenv pci-probe-mask 10000000
setenv pci-probe-mask 20000000
setenv pci-probe-mask 40000000
setenv pci-probe-mask 80000000

If you want to exclude one device at a time, then these are the values:
Code:
setenv pci-probe-mask fffffffe
setenv pci-probe-mask fffffffd
setenv pci-probe-mask fffffffb
setenv pci-probe-mask fffffff7
setenv pci-probe-mask ffffffef
setenv pci-probe-mask ffffffdf
setenv pci-probe-mask ffffffbf
setenv pci-probe-mask ffffff7f
setenv pci-probe-mask fffffeff
setenv pci-probe-mask fffffdff
setenv pci-probe-mask fffffbff
setenv pci-probe-mask fffff7ff
setenv pci-probe-mask ffffefff
setenv pci-probe-mask ffffdfff
setenv pci-probe-mask ffffbfff
setenv pci-probe-mask ffff7fff
setenv pci-probe-mask fffeffff
setenv pci-probe-mask fffdffff
setenv pci-probe-mask fffbffff
setenv pci-probe-mask fff7ffff
setenv pci-probe-mask ffefffff
setenv pci-probe-mask ffdfffff
setenv pci-probe-mask ffbfffff
setenv pci-probe-mask ff7fffff
setenv pci-probe-mask feffffff
setenv pci-probe-mask fdffffff
setenv pci-probe-mask fbffffff
setenv pci-probe-mask f7ffffff
setenv pci-probe-mask efffffff
setenv pci-probe-mask dfffffff
setenv pci-probe-mask bfffffff
setenv pci-probe-mask 7fffffff
 

flyproductions

macrumors 65816
Jan 17, 2014
1,089
466
Get me a dump of the Sawtooth dictionary...
I hope in the attached archive you find the information you need in this case.

Here is, what i typed to get this dumped:

Code:
0 > : dumpbytes ( start size )  ok
0 ]  cr bounds ?do i 3f and 0= if cr then i c@ 2 u.r loop cr ;  ok
0 > @startvec dup here - negate dumpbytes

It's somehow "a little" bigger than expected. Hope, it is the right thing anyway.

If this is correct, then i can try for the G3 later too.
Do you have a New World Mac with a serial port adapter in the internal modem port?
Yes, the Sawtooth has a Stealth Serial Port. This is how i connect to the Beige.
 

Attachments

  • Sawtooth_OF_Dictonary.zip
    1.1 MB · Views: 73

flyproductions

macrumors 65816
Jan 17, 2014
1,089
466
I don't know what "does not work" means.
Sorry for beeing this vague in this point. It only meant, that the card did not give any signal to the display and, booted to the OS, was not "seen" by System Profiler present as pci-card.

In fact, when installed, it startet to log read/write transactions to OF just like in the new World Mac.
Put the following in nvramrc (if the card is in slot B (device @e)
Code:
(install-console)
setenv pci-probe-list FFFFBFFF
probe-all
banner
setenv pci-probe-list FFFFFFFF

Also make sure you did the following
Code:
setenv auto-boot? false
setenv use-nvramrc? true
Then when you start into Open Firmware, you can type probe-all to get the output over serial port.
Did this and it seems to have worked so far. Here is, what "probe-all" comes up with:

Code:
0 > probe-all ok
w_0_16 @00000004.b = 1000000
r_0_16 @00000000.l = a100a104
r_0_16 @00101000.l = 8b904e23
w_0_16 @0000184c.b = 0
w_0_16 @00001850.b = 1000000
w_0_16 @00001854.b = 0
r_0_16 @00000200.l = 103
w_0_16 @00000200.b = 103
r_0_16 @00000200.l = 103
w_0_16 @000c03c3.b = 1
r_0_16 @000c03c3.b = 1
r_0_16 @000c03cc.b = 0
w_0_16 @000c03cc.b = 1
w_0_16 @006013d4.b = 1f
w_0_16 @006013d5.b = 57
w_0_16 @000c23c3.b = 1
r_0_16 @000c23c3.b = 1
r_0_16 @000c23cc.b = 0
w_0_16 @000c23cc.b = 1
w_0_16 @006013d4.b = 44
r_0_16 @006013d5.b = 0
r_0_16 @006013d4.b = 44
r_0_16 @006033d4.b = 0
w_0_16 @006013d4.b = 44
w_0_16 @006013d5.b = 4
w_0_16 @006033d4.b = 44
w_0_16 @006033d5.b = 4
w_0_16 @006033d4.b = 0
w_0_16 @006013d4.b = 44
w_0_16 @006033d4.b = 1f
w_0_16 @006033d5.b = 57
w_0_16 @006013d4.b = 44
r_0_16 @006013d5.b = 4
r_0_16 @006013d4.b = 44
r_0_16 @006033d4.b = 44
w_0_16 @006013d4.b = 44
w_0_16 @006013d5.b = 0
w_0_16 @006033d4.b = 44
w_0_16 @006033d5.b = 0
w_0_16 @006033d4.b = 44
w_0_16 @006013d4.b = 44
r_0_16 @006013d4.b = 44
r_0_16 @006033d4.b = 44
w_0_16 @006013d4.b = 44
w_0_16 @006013d5.b = 1
w_0_16 @006033d4.b = 44
w_0_16 @006033d5.b = 1
w_0_16 @006033d4.b = 44
w_0_16 @006013d4.b = 44
w_0_16 @000c23c3.b = 1
w_0_16 @000c03c2.b = e3
r_0_16 @000c23c3.b = 1
w_0_16 @006033d4.b = 1f
w_0_16 @006033d5.b = 57
w_0_16 @006033d4.b = 21
w_0_16 @006033d5.b = fa
r_0_16 @00602804.l = 0
w_0_16 @00602804.b = 80
w_0_16 @00602860.b = 0
r_0_16 @006013d4.b = 44
r_0_16 @006033d4.b = 21
w_0_16 @006013d4.b = 44
w_0_16 @006013d5.b = 0
w_0_16 @006033d4.b = 44
w_0_16 @006033d5.b = 0
w_0_16 @006033d4.b = 21
w_0_16 @006013d4.b = 44
w_0_16 @000c03c3.b = 1
w_0_16 @000c03c2.b = e3
r_0_16 @000c03c3.b = 1
w_0_16 @006013d4.b = 1f
w_0_16 @006013d5.b = 57
w_0_16 @006013d4.b = 21
w_0_16 @006013d5.b = fa
r_0_16 @00600804.l = 0
w_0_16 @00600804.b = 80
w_0_16 @00600860.b = 0
 ok

The 6200, as suggested, sits in PCI B1 of the G3.
 
Last edited:

joevt

macrumors 604
Jun 21, 2012
6,971
4,262
I hope in the attached archive you find the information you need in this case.

Here is, what i typed to get this dumped:

Code:
0 > : dumpbytes ( start size )  ok
0 ]  cr bounds ?do i 3f and 0= if cr then i c@ 2 u.r loop cr ;  ok
0 > @startvec dup here - negate dumpbytes
I assume @startvec is ff808000. I'll see if I can disassemble it properly.

It's somehow "a little" bigger than expected. Hope, it is the right thing anyway.
The dictionary is where all the words and variables and constants and buffers and device nodes and properties are stored. All the fcode that's in the rom is compiled into those bits in the dictionary. What the dictionary doesn't have is the fcode that created those bits.

Example fcode:
Code:
12 value myvalue
: mycolon ." hello" ;
myword
The dictionary includes the compiled myvalue and mycolon but it does not include the fcode above that created them or the call to myword.

If this is correct, then i can try for the G3 later too.
I don't think we need the dictionary for G3. The G3 rom is easy to extract fcode from. The dictionary would include device node stuff but that's mostly available from dump-device-tree... The dictionary would help to make patches (alternative to the dumping bytes for individual words like we did for patching initscc) but we don't need to make patches.

the card did not give any signal to the display and was not "seen" by System Profiler present as pci-card.
Is this different than previous behaviour? The point of this rom was to log stuff, not change behaviour.

Did this and it seems to have worked so far. Here is, what "probe-all" comes up with:

Code:
0 > probe-all
I think I can use this info to make my emulation get further.

Code:
w_0_16 @00000004.b = 1000000
w_0_16 @00001850.b = 1000000
Why would a value ≥ 0x100 be written to a byte? I need to check my logging to make sure I put the correct letter "b,w,l" for the size...

Code:
r_0_16 @00600804.l = 0
w_0_16 @00600804.b = 80
w_0_16 @00600860.b = 0
 ok
I wonder why it stopped without an abort message...
In the future you'll want to put log output into a file since it will get very large.

In fact, when installed, it startet to log read/write transactions to OF just like in the new World Mac.
We definitely need info from working New World Mac case for compare. So we need to work on a method.

Yes, the Sawtooth has a Stealth Serial Port. This is how i connect to the Beige.
Is it usable by Open Firmware? It might be easier to use than telnet. We wouldn't need to do pci-probe-mask stuff.

Try this:
scca io
I think the default is 57600 baud.
If it works, then maybe we can do these:
setenv input-device scca
setenv output-device scca

But it depends on if New World Mac has the (install-console) command to enable logging before probe-all in nvramrc (before nvramrc finishes).

Before you put (install-console) in nvramrc of sawtooth to enable logging to serial device before nvramrc finishes then we need to make sure it exists as a word:
see (install-console)
see install-console

If you see something like this:
Code:
0 > see (install-console) (install-console), huh??

 ok
0 > see install-console defer install-console 
: ^ff822bc0  
  " open KEYBOARD" time-stamp ^ff811d40  0= if 
    ^ff811030  open-dev to ^ff811d40

then you need to use ff822bc0 execute (or whatever address/execution token it says install-console is deferring to) instead of (install-console) in the nvramrc.
 
Last edited:

flyproductions

macrumors 65816
Jan 17, 2014
1,089
466
...and here the dictonary for the beige's OF 2.4:

Edit: Ahh, seconds too late! 😫
 

Attachments

  • Beige_OF_Dictonary.zip
    518.4 KB · Views: 73

joevt

macrumors 604
Jun 21, 2012
6,971
4,262
...and here the dictonary for the beige's OF 2.4:

Edit: Ahh, seconds too late! 😫
I'll take it.

Why would a value ≥ 0x100 be written to a byte? I need to check my logging to make sure I put the correct letter "b,w,l" for the size...
Found a mistake - should be a ".l" instead of ".b" for some of the logged registers. Attached an update.
 

Attachments

  • 6200 #3.zip
    310.3 KB · Views: 71

DearthnVader

Suspended
Dec 17, 2015
2,207
6,392
Red Springs, NC
I used 5.31 (and I also tried 5.13, 5.15 and 5.40). All give same result. see below pic
Will check the card again for an eeprom. Might of missed something, was looking up each chip.
I assume its not some kind of deviant geforce using serial flash instead of an eeprom?

View attachment 2047243
I wonder if that EEPROM is the MX25L1005?

The RDID instruction is for reading the manufacturer ID of 1-byte and followed by Device ID of 2-byte. The MXIC Manufacturer ID is C2(hex), the memory type ID is 20(hex) as the first-byte device ID, and the individual device ID of second-byte ID is as followings: 11(hex) for MX25L1005.
 
Last edited:

domii

macrumors member
Jul 24, 2022
50
17
Grimsby, Ontario, Canada
I wonder if that EEPROM is the MX25L1005?
Could be, I shall take a closer look in a bit if I can find it.
I was decoding the EVGA serial number, 1512620402009587, found a chart below.

From the decoding, product type 1, warranty 2, part# 402 all match known variables. Year shows as 2015?!
So I may possibly need to use a newer nvflash rather than one released in the 200x vintage. Hrmm.


EVGA Serial number breakdown:

  • First two digits: Year Manufactured
  • Third digit: Product type (1 being graphics card).
  • Fourth and Fifth: What factory the product was built at.
  • Sixth: Warranty Length.
  • Seventh to Tenth: Part Number.
  • Eleventh: Region Sold.
  • Twelfth to Sixteenth: SNS or Serial Number Sequence.
 

flyproductions

macrumors 65816
Jan 17, 2014
1,089
466
Is this different than previous behaviour? The point of this rom was to log stuff, not change behaviour.
Sorry. Did not know this.
I wonder why it stopped without an abort message...
This does not change if no masking etc. is done. In the G3 the logging stops at this very point and does not get any further.
In the future you'll want to put log output into a file since it will get very large.
So i am afraid, i' need assistance for directly logging to a file again. 😟
We definitely need info from working New World Mac case for compare. So we need to work on a method.
Sure i could just use the serial connection to the Beige the other way around, if nothing else works. I have no other machine with a serial port at hand. I'll give this a try.
But it depends on if New World Mac has the (install-console) command to enable logging before probe-all in nvramrc (before nvramrc finishes).
As far as i have seen, logging starts immediately with no further command given as soon as the card is installed and the machine is booted to OF. For the Sawtooth as well as for the Beige.
 

domii

macrumors member
Jul 24, 2022
50
17
Grimsby, Ontario, Canada
I wonder if that EEPROM is the MX25L1005?

Have looked at every chip on the board. Pretty sure its the GigaDevice 25Q21BT 2Mb (256K x 8) NOR Flash SOP8 150mil.. that I identified before. The main difference is that Flash can only be erased in blocks. EEPROM is byte erasable. As a result, Flash is available bigger (by up to 10x).

But I am assuming new versions of nvflash can deal with it? I'll experiment and see!

update:
bingo, nvflash 5.218 identifies it.

thumbnail_IMG_5919.jpg
 
Last edited:

domii

macrumors member
Jul 24, 2022
50
17
Grimsby, Ontario, Canada
When I tried to do a backup of the rom, it bombed out and then got the "Unable to set up NVFLASH driver (0x00000005) Detailed :Access is denied

But trying 5.165 had some success.
IMG_5920.jpg


Did a backup, now lets try flashing one of those mac roms.

IMG_5921.jpg


So some success there. I can try it in my MDD on the weekend.
Of course I don't think I have been usefull for anything at this point other than distracting everyone.
So sorry about that!

(But at least I know I can flash this newer 6200 PCI card as well.)
 

domii

macrumors member
Jul 24, 2022
50
17
Grimsby, Ontario, Canada
I just used one of those roms you had, no idea if that would work.

Put it in my Powertower oldworld mac. I know it won't work in osx - but it does see the card at least in the slot, although doesn't identify it. I did think that I read somewhere that in OS 9 it works without any kind of accelleration with fixed or certain resolutions. Unless that was limited to new world ones? I'll go over making my own rom from themacelite guide so I can tinker with that to get to at least to a certain point.

IMG_5922.jpg
IMG_5924.jpg
 

flyproductions

macrumors 65816
Jan 17, 2014
1,089
466
We definitely need info from working New World Mac case for compare. So we need to work on a method.
Attached is, what the Sawtooth logged from the card, flashed with the latest ROM.
Beige will follow.
 

Attachments

  • new_world_log.zip
    5.9 KB · Views: 77

flyproductions

macrumors 65816
Jan 17, 2014
1,089
466
So here comes the log from the beige. Looks identical up to the point where it cancels.

I tried different PCI-slots. Results are the same.
 

Attachments

  • old_world_log.zip
    1 KB · Views: 79
Last edited:

flyproductions

macrumors 65816
Jan 17, 2014
1,089
466
I can try it in my MDD on the weekend.
This should work!

...but, if you plan to use the card, better reflash it with the "clean" ROM attached. The later ones in this thread have some logging-stuff in them, which seems to do no harm, but is not neccessary for normal operation. Therefore the temperature-sensor-function is missing.
 

Attachments

  • 6200pci_MAC.rom.zip
    30.8 KB · Views: 75

joevt

macrumors 604
Jun 21, 2012
6,971
4,262
This does not change if no masking etc. is done. In the G3 the logging stops at this very point and does not get any further.

So i am afraid, i' need assistance for directly logging to a file again. 😟
I think copy and paste from Z-Term is sufficient?

Sure i could just use the serial connection to the Beige the other way around, if nothing else works. I have no other machine with a serial port at hand. I'll give this a try.

As far as i have seen, logging starts immediately with no further command given as soon as the card is installed and the machine is booted to OF. For the Sawtooth as well as for the Beige.
I think you got serial working. We'll stick with that for now.
The question with the logging is - is it immediate or is it saved to buffer until nvramrc is done? There may be a limit to the amount of logging that can be saved to buffer.
To test this, one could output a message in nvramrc, pause for 5 seconds, then output another message. If there's a 5 second pause before the first message and not between the first and second message, then there's a buffer. If there's a 5 second pause only between the first and second message, then there's no buffer.

So here comes the log from the beige. Looks identical up to the point where it cancels.

I tried different PCI-slots. Results are the same.
Glad the results are unchanging - consistant.

Attached is, what the Sawtooth logged from the card, flashed with the latest ROM.
Identical to the beige except it keeps going. Is the card with this logging rom still usable in macOS?
I see some problems in the log - it's got some glitches after the first 1007 lines and the last line is cutoff. Check the buffer limit in Z-Term. Maybe we need the (install-console) stuff in Sawtooth.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.