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.

B S Magnet

macrumors 603
Original poster
The ExpressCard/34 Thread: expansion options for 2006–2011 MacBook Pros




OVERVIEW

Although now a relic, the ExpressCard/34 slot, the successor of PC Card/PCMCIA slots found in PowerBook G3 and the larger PowerBook G4 models, were introduced simultaneously with Apple’s transition to PCIe-equipped Intel architecture.

ExpressCard/34, using a 1x PCIe lane, delivered modular, forward-compatible expansion possibilities for the 2006–2008 15-inch MacBook Pros and 2006–2011 17-inch MacBook Pros. In addition, there were also PCIe-to-ExpressCard adapter expansion cards made for traditional desktop form factors (like the Mac Pro).

This WikiPost, editable by any MR forum community member, collects together known categories of ExpressCard/34 expansion options — both the discontinued and also the currently-offered cards known to exist. Links to external sources on further information on these ExpressCard/34 options are aggregated here for reference only and are not an endorsement for any given product.

Where possible, a short description of ExpressCard capability and compatibility with Mac OS X and/or macOS is provided. Initial entries to this WikiPost collected from past MR threads discussing ExpressCard/34 options. [1] [2]


LEGEND
[*]
denotes legacy/discontinued
[+] denotes recently proposed product

USB

Delock 1 × USB 3.0: unknown compatibility with Mac OS X

nanoTECH USB 3.0 × 2 (version 1): compatible for Mac OS X 10.6.8 to 10.10.5

nanoTECH USB 3.0 × 2 (version 2): compatible for Mac OS X 10.8.2+

Sonnet USB 2.0 × 4: [*] Mac OS X compatible

Sonnet USB 3.0 × 2 (Rev. A, pre-2014): [*] at least Mac OS X 10.6

Sonnet USB 3.0 × 2 (Rev. B, 2014): [*] unknown Mac OS X compatibility

StarTech USB 2.0 × 2: Mac OS X 10.6 to 10.8.5-compatible



FIREWIRE

Belkin FireWire 800 × 2: [*] Mac OS X 10.4.3+ compatible

LaCie FireWire 800 × 2: [*] Mac OS X compatible

SIIG FireWire 400 × 2: [*] Mac OS X 10.4.3+ compatible

Sonnet FireWire 800 × 2: [*] Mac OS X compatible

Sonnet FireWire 800 × 2 Pro: [*] Mac OS X compatible

StarTech FireWire 400/1394a × 2: [*] Mac OS X compatible

StarTech FireWire 800/1394b × 2: Mac OS X 10.4.3 to 10.11 compatible



MEDIA CARDS (SD, CF, etc.)

Delkin 24-in-1 Multi-card Adapter: [*] unknown Mac OS X compatibility

Griffin 5:1 MultiCard Reader: [*] Mac OS X compatible

SanDisk Extreme Pro CF ExpressCard Adapter: [*] compatible with Mac OS X 10.4.3+

Sonnet Multimedia Memory [SD] Card Reader & Writer: [*] Mac OS X compatible; for SDXC, at least Mac OS X 10.6.5 is required

Sonnet Pro Dual Compact Flash ×2 Adapter: [*] Mac OS X compatible

Sonnet SDHC card adapter for SxS Camera Slot: [*] unknown Mac OS X compatibility

Sonnet SDXC UHS-I Pro Reader/Writer: [*] Mac OS X compatible

Sony MEAD-SD02 SDHC/SDXC Card Adapter: Mac OS X compatible



NETWORKING

Delock 1 × Gigabit Ethernet: unknown compatibility with Mac OS X

Sierra Wireless AirCard 597E: [*] Mac OS X compatible

Sonnet Presto Gigabit Ethernet Pro (Rev A): [*] Mac OS X compatible (and compatible to at least macOS 10.12.6)

Sonnet Presto Gigabit Ethernet Pro (Rev B): [*] Mac OS X compatible (and compatible to at least macOS 10.12.6)

StarTech Gigabit Ethernet × 2 NIC: [*] Mac OS X 10.6 to 10.9 compatible



eSATA & SAS

Delock 2 × eSATA 3GB/s: compatible with Mac OS X 10.5+

FirmTek SeriTek/2SM2-E eSATA 3GB/s × 2: compatible with Mac OS X

FirmTek SeriTek/6G eSATA 6GB/s × 2, plus Port Multiplier: compatible with Mac OS X 10.6.8+ (bootable from 2011 17" MacBook Pros)

Sonnet Tempo Edge eSATA × 1: [*] compatible with Mac OS X 10.4.3+

Sonnet Tempo eSATA × 2: [*] compatible with Mac OS X 10.4.3+

Sonnet Tempo eSATA 6GB/s × 2: [*] compatible with Mac OS X 10.5+

Sonnet Tempo eSATA 6GB/s × 2 Pro: [*] compatible with at least Mac OS X 10.5 and 10.6.8

Sonnet Tempo eSATA × 2 Pro: [*] compatible with Mac OS X 10.4.3+

Sonnet Tempo Edge eSATA × 1: [*] compatible with Mac OS X 10.5+

Sonnet Tempo Edge eSATA Pro × 1 6GB/s: [*] compatible with at least Mac OS X 10.5 and 10.6.8

Sonnet Tempo SAS × 1 Pro: [*] compatible with Mac OS X



MULTI-FUNCTION

Sonnet FireWire 400 × 2 & USB 2.0 × 1 combo: [*] Mac OS X compatible

Sonnet Tempo Duo eSATA × 2 & USB 3.0 × 2 combo: [*] requires OS X 10.8.5

Sonnet Tempo Duo eSATA 6GB/s × 2 & USB 3.0 × 2 combo: [*] requires OS X 10.8.5



PCIe ADAPTERS

SIIG PCIe to ExpressCad/54 adapter: unknown Mac OS X compatibility

Sonnet PCIe Bus Extender: [*] unknown Mac OS X compatibility



eGPU KITS

EXP GDC Beast: Barebones ExpressCard to PCIe ×16 adapter. Compatible (tested) with Mac OS X 10.6.8 through 10.11.6 - specific compatibility depends on which GPU is used.

VillageTronic ViDock Family: [*] Boxed ExpressCard to PCIe ×16 adapter solution. Compatible with Mac OS X (versions unknown - depends on which GPU is used).


OTHER

Delock 1 × Serial Port: compatible with Mac OS X 10.5+

Miglia TVBook Pro Express TV adapter compatible with Mac OS X 10.4+

MOTU HDX-SDI PCIe Video Interface: compatible with Mac OS X

SIIG USB-to-USB-based-ExpressCard/34 dongle: [*] Mac OS X 10.3+

Sonnet Echo ExpressCard Pro: adapter kit for Thunderbolt-equipped (i.e., 2011 and later) Macs to utilize legacy ExpressCard/34 cards

StarTech ExpressCard/34 to CardBus adapter: Mac OS X compatible

StarTech RS232 DB9 USB-based adapter: Mac OS X 10.6 to macOS 11.2

ThinkMods ExpressCard34-to-NVMe m.2 adapter: [+] at this point, this is crowdfund vapourware from 2020 & unknown whether it will be macOS-compatible



 
Last edited:
This thread is a great idea!

I use the nanoTECH USB 3.0 x 2 (version 2): compatible for Mac OS X 10.8.2+
with patched Mojave (and earlier).
Pretty fast, but when e.g. longer procedures are on the go (like CCC-clone-backup) You have to make sure, the MBP doesn't go to sleep (Caffeine-App), otherwise the backup is halted because of the USB-drive has been violently ejected.
One SSD usually gets enough power through the USB3-ExpressCard, but I always use a Y-USB-cable connector to get some extra power through the nearby USB2-port.

I have a bunch of different SD-Card-Adapter-ExpressCards and all of them work without problems. Some of them are more preferrable, since they fully take in the SD-Card, if You want to leave it more permanently. While the others leave the SD-card sticking out about 1,5cm, that might be more convenient, if you often have to swap SD-Cards.

The ExpressCard-Slot really is a wonderful thing, since USB3 was first introduced in 2012 on the MacBooks.
 
Last edited:
It's a bit like a predecessor to Thunderbolt. Certainly much less expensive! :D
The MacBook Pro (17-inch, Early 2011) has Thunderbolt 1 and ExpressCard/34 which is interesting.
https://support.apple.com/kb/sp621?locale=en_CA

You could connect a GPU to either.
I think it also has an internal mPCIe slot so you could maybe also connect a GPU to that.
Go to https://egpu.io/best-external-graphics-card-builds/ and search for 2011 17-inch MacBook

While Thunderbolt 1 has more bandwidth than ExpressCard/34, a GPU might perform better connected to the ExpressCard/34 slot because Thunderbolt has more latency (need benchmarks to prove this). The following post compares an eGPU connected with PCIe 3.0 x1 and Thunderbolt 3. ExpressCard/34 is half of PCIe 3.0 x1 (if the Express/34 slot is PCie 2.0) while Thunderbolt 1 is approximately a third of Thunderbolt 3.
https://egpu.io/forums/thunderbolt-...g-the-thunderbolt-effect/paged/17/#post-14987
https://egpu.io/forums/mac-setup/pcie-slot-dgpu-vs-thunderbolt-3-egpu-internal-display-test/
 
  • Like
Reactions: Amethyst1
Oh, I wish I had an Thunderbolt-ExpressCard ... ;)
Theoretically, an ExpressCard-to-PCIe adapter plus a PCIe Thunderbolt add-in card would give you that - but how you'd go about initialising the Thunderbolt card, I have no idea.
 
Theoretically, an ExpressCard-to-PCIe adapter plus a PCIe Thunderbolt add-in card would give you that - but how you'd go about initialising the Thunderbolt card, I have no idea.
You reverse engineer the code from UEFI and ACPI (DSDT/SSDT) of computers that support Thunderbolt, using info from source code of linux Thunderbolt drivers, and Thunderbolt related UEFI code from tianocore/edk2-platforms (which may contain some of the UEFI and ACPI code used in those computers), and there's an Intel Alpine Ridge pdf document floating around with info about all the registers.
 
  • Like
Reactions: Amethyst1
You reverse engineer the code from UEFI and ACPI (DSDT/SSDT) of computers that support Thunderbolt, using info from source code of linux Thunderbolt drivers, and Thunderbolt related UEFI code from tianocore/edk2-platforms (which may contain some of the UEFI and ACPI code used in those computers), and there's an Intel Alpine Ridge pdf document floating around with info about all the registers.
Oh, I wasn't aware that it's such easy ... 😄
 
  • Like
Reactions: Amethyst1
I went forward with adding a few more known legacy ExpressCard modules, and I also added a new sub-section for ExpressCard eGPU Kits. As you’ll see, this section is currently empty because I don’t know enough about those kits to list them out (or how to describe their features, capabilities, limits, or compatibilities). Hopefully a few of you here with some applied experience with this kind of thing might want to have a go at filling in the details on some kits you’re already familiar with. :)
 
  • Like
Reactions: Amethyst1
I would be curious to know what bandwidths we can expect from these. Are they PCIe 2.0 or PCIe 1.0 or something else?

The wikipedia page https://en.wikipedia.org/wiki/ExpressCard has some weird numbers for the PCIe connections:
480 Mbit/s effective (USB 2 mode)
1.6 Gbit/s effective (PCIe 1 mode)
3.2 Gbit/s effective (PCIe 2 or USB 3 mode)

Are the PCIe connections not proper PCIe 2.5 GT/s or 5.0 GT/s? Or is wikipedia describing real world bandwidth with PCIe protocol overhead taken into account? Probably the latter since they describe the values as "effective". If tyou take only wire encoding into account (8b/10b), then PCIe is 2 Gbps (250 MB/s) or 4 Gbps (500 MB/s) so the effective numbers of 1.6 and 3.2 seem reasonable (200 MB/s and 400 MB/s).

Do all Macs have the same ExpressCard capabilities or are some limited to USB 2/PCIe 1 while some allow USB 3/PCIe 2?

Even if you have a PCIe 1 slot, you could have an ExpressCard with it's own USB 3.0 controller that can do up to 2 Gbps - it's not full 5 Gbps but it's still much better than USB 2.0. So it would be helpful to know what chips the cards are using - if they are utilizing the USB connection or if they are using their own USB controller.

A proper USB 3.0 connection should be able to do 460 MB/s (AmorphousDiskMark benchmark) but PCIe 2.0 x1 limits that slightly (if the card is using its own USB controller instead of the USB 3.0 controller of the host).

The Delock 1 × USB 3.0 uses a Renesas USB 3.0 controller. Probably μPD720202 or μPD720201. These may have issues with macOS:
https://www.renesas.com/us/en/application/technologies/usb-technology
https://www.tonymacx86.com/threads/...riginal-mac-drivers-caldigit-lacie-oyen.77864
https://www.insanelymac.com/forum/topic/308452-how-to-get-nec-renesas-upd720200-usb30-to-work
https://github.com/chris1111/USB-3.0-NEC
 
  • Like
Reactions: Amethyst1
I would be curious to know what bandwidths we can expect from these.
I've just now tested this with a 2007 MacBook Pro and an LSI SAS3041E-R in an ExpressCard-to-PCIe adapter.

System Profiler:

Bildschirmfoto 2023-03-18 um 14.29.38.png


Benchmark results with three SSDs in RAID 0:

Bildschirmfoto 2023-03-18 um 14.25.29.png


Do all Macs have the same ExpressCard capabilities or are some limited to USB 2/PCIe 1 while some allow USB 3/PCIe 2?
The 2011 17" MacBook Pro has PCIe 2.0, so presumably its ExpressCard slot is PCIe 2.0 ×1 (and USB 2.0, since USB 3.0 came with 2012 MBPs).

Are they PCIe 2.0 or PCIe 1.0 or something else?
According to this, they can also be PCIe 3.0 if the system is modern enough.

(Thinking... a PCIe-to-ExpressCard adapter should just pass through one PCIe lane, so putting one on a PCIe 4.0/5.0 mainboard should provide an "EC4"/"EC5" slot, but then the ExpressCard device itself may become the limiting factor.)
 
Last edited:
I've just now tested this with a 2007 MacBook Pro and an LSI SAS3041E-R in an ExpressCard-to-PCIe adapter.

System Profiler:

View attachment 2175390

Benchmark results with three SSDs in RAID 0:

View attachment 2175391

For what it is, a 1x PCIe lane on a laptop, this isn’t too bad — basically falling between SATA I and SATA II speeds, yes?


The 2011 17" MacBook Pro has PCIe 2.0, so presumably its ExpressCard slot is PCIe 2.0 ×1 (and USB 2.0, since USB 3.0 came with 2012 MBPs).

Oh dear, yet another reason to want a model with a fatal dGPU. If only Apple had sold a 17-inch variant of the mid-2012 with USB 3.0… >_<

Here’s another “if only”: if only there was an ultra-thin interposer fix to allow for a drop-in of another dGPU in lieu of the Radeon HD 67x0M… (While that one-off experiment by dosdude1 to draw from the dGPU socket, to run an NVMe SSD and an eGPU, was neat as a proof-of-concept, it’s not quite a one-for-one retrofit for restoring dGPU function.)
 
  • Like
Reactions: Amethyst1
For what it is, a 1x PCIe lane on a laptop, this isn’t too bad — basically falling between SATA I and SATA II speeds, yes?
Yup.

Oh dear, yet another reason to want a model with a fatal dGPU.
Just this evening a “fully working” 2011 17” sold on ebay.de. Snagged it for just 290 euros… not.

If only Apple had sold a 17-inch variant of the mid-2012 with USB 3.0… >_<
You mean… like this? :D
 
  • Wow
Reactions: B S Magnet
I've just now tested this with a 2007 MacBook Pro and an LSI SAS3041E-R in an ExpressCard-to-PCIe adapter.

System Profiler:
That only shows the current PCIe link rate and lanes of the SAS controller. It doesn't show it's max link rate/lanes and it doesn't show the current/max link rate/lanes of the parent PCI or CardBus bridges. To get that info, make my pciutils and try my pcitree.sh script. If you try this on a Power Mac, then also make and load my directhw kext.
https://gist.github.com/joevt/e3cd4ff08aae06279134969c98ca3ab7

Here’s another “if only”: if only there was an ultra-thin interposer fix to allow for a drop-in of another dGPU in lieu of the Radeon HD 67x0M… (While that one-off experiment by dosdude1 to draw from the dGPU socket, to run an NVMe SSD and an eGPU, was neat as a proof-of-concept, it’s not quite a one-for-one retrofit for restoring dGPU function.)
Do you have a link for that experiment with the NVMe or EGPU option?

The interposer idea would have you reuse the VRAM chips already on the motherboard?

The space for a dGPU must have pci signals. That can be turned into a slot of some kind. There's also signals needed for the display so a connector for that is needed as well. A dGPU needs to include NVRAM chips so it's not going to be small. Maybe an MXM solution like used in iMacs. Is there room for such a thing? Like place it in a drive bay?
 
  • Like
Reactions: Amethyst1
Do you have a link for that experiment with the NVMe or EGPU option?

Sure do!

The interposer idea would have you reuse the VRAM chips already on the motherboard?

I would imagine so, yes.

The space for a dGPU must have pci signals. That can be turned into a slot of some kind. There's also signals needed for the display so a connector for that is needed as well. A dGPU needs to include NVRAM chips so it's not going to be small. Maybe an MXM solution like used in iMacs. Is there room for such a thing? Like place it in a drive bay?

I honestly have no idea.
 
  • Like
Reactions: Amethyst1
Sierra had the AirCard 597E, which was a Mac-compatible CDMA modem. I never had one so I'm not sure what OS versions it works with, or even whether it should go under "Networking" or "Other"!

I'm also not sure how useful this information is, as at least in this part of the world CDMA is as dead as a dodo :)
 
  • Like
Reactions: Amethyst1
Sierra had the AirCard 597E, which was a Mac-compatible CDMA modem. I never had one so I'm not sure what OS versions it works with, or even whether it should go under "Networking" or "Other"!

I'm also not sure how useful this information is, as at least in this part of the world CDMA is as dead as a dodo :)

Probably networking, as that would be, basically, a WWAN.
 
  • Like
Reactions: Amethyst1
I dug this out of my box of tricks. Not had any use in years, especially as my MBP Santa Rosa bit the dust with the dreaded nVidiagate sickness.

IMG_20230319_095406.jpgIMG_20230319_095438.jpgIMG_20230319_095505.jpg

Quite cool that it came with a powered aerial but sadly, although it sported the Express 34 looks, the actual signals went over the USB bus regardless, so it got a little toasty in use just like all the dongles. Although Elgato (now Geniatech) was the big name for TV adapters back then, I don't think it ever brought out an Expresscard adapter. I can't remember whether EyeTV worked with this particular adapter, either, although usually it would cooperate with just about any Mac adapter ever. Still by far the best software for any TV on computer going.
 
That only shows the current PCIe link rate and lanes of the SAS controller. It doesn't show it's max link rate/lanes and it doesn't show the current/max link rate/lanes of the parent PCI or CardBus bridges. To get that info, make my pciutils and try my pcitree.sh script.
Code:
#=========================================================================================
┬[0000:00]
├─00:00.0          #                [8086:2a00] [060000] (rev 03) Host bridge                          : Intel Corporation Mobile PM965/GM965/GL960 Memory Controller Hub
├┬00:01.0-[01]     # g1x16          [8086:2a01] [060400] (rev 03) PCI bridge [Normal decode]           : Intel Corporation Mobile PM965/GM965/GL960 PCI Express Root Port
│└─01:00.0         # g1x16          [10de:0407] [030000] (rev a1) VGA compatible controller [VGA controller] : NVIDIA Corporation G84M [GeForce 8600M GT]
├─00:1a.0          #                [8086:2834] [0c0300] (rev 03) USB controller [UHCI]                : Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #4
├─00:1a.1          #                [8086:2835] [0c0300] (rev 03) USB controller [UHCI]                : Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5
├─00:1a.7          #                [8086:283a] [0c0320] (rev 03) USB controller [EHCI]                : Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2
├─00:1b.0          # g0x0           [8086:284b] [040300] (rev 03) Audio device                         : Intel Corporation 82801H (ICH8 Family) HD Audio Controller
├┬00:1c.0-[02]     # g1x1 > g1x0    [8086:283f] [060400] (rev 03) PCI bridge [Normal decode]           : Intel Corporation 82801H (ICH8 Family) PCI Express Port 1
├┬00:1c.2-[03-0a]  # g1x1           [8086:2843] [060400] (rev 03) PCI bridge [Normal decode]           : Intel Corporation 82801H (ICH8 Family) PCI Express Port 3
│└─03:00.0         # g1x8 > g1x1    [1000:0056] [010000] (rev 02) SCSI storage controller              : Broadcom / LSI SAS1064ET PCI-Express Fusion-MPT SAS
├┬00:1c.4-[0b]     # g1x1           [8086:2847] [060400] (rev 03) PCI bridge [Normal decode]           : Intel Corporation 82801H (ICH8 Family) PCI Express Port 5
│└─0b:00.0         # g1x1           [168c:0024] [028000] (rev 01) Network controller                   : Qualcomm Atheros AR5418 Wireless Network Adapter [AR5008E 802.11(a)bgn] (PCI-Express)
├┬00:1c.5-[0c]     # g1x1           [8086:2849] [060400] (rev 03) PCI bridge [Normal decode]           : Intel Corporation 82801H (ICH8 Family) PCI Express Port 6
│└─0c:00.0         # g1x1           [11ab:436a] [020000] (rev 13) Ethernet controller                  : Marvell Technology Group Ltd. 88E8058 PCI-E Gigabit Ethernet Controller
├─00:1d.0          #                [8086:2830] [0c0300] (rev 03) USB controller [UHCI]                : Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1
├─00:1d.1          #                [8086:2831] [0c0300] (rev 03) USB controller [UHCI]                : Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2
├─00:1d.2          #                [8086:2832] [0c0300] (rev 03) USB controller [UHCI]                : Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3
├─00:1d.7          #                [8086:2836] [0c0320] (rev 03) USB controller [EHCI]                : Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1
├┬00:1e.0-[0d]     #                [8086:2448] [060401] (rev f3) PCI bridge [Subtractive decode]      : Intel Corporation 82801 Mobile PCI Bridge
│└─0d:03.0         #                [104c:8025] [0c0010] (rev 02) FireWire (IEEE 1394) [OHCI]          : Texas Instruments TSB82AA2 IEEE-1394b Link Layer Controller
├─00:1f.0          #                [8086:2815] [060100] (rev 03) ISA bridge                           : Intel Corporation 82801HM (ICH8M) LPC Interface Controller
├─00:1f.1          #                [8086:2850] [01018f] (rev 03) IDE interface [PCI native mode controller, supports both channels switched to ISA compatibility mode, supports bus mastering] : Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) IDE Controller
├─00:1f.2          #                [8086:2829] [010601] (rev 03) SATA controller [AHCI 1.0]           : Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode]
└─00:1f.3          #                [8086:283e] [0c0500] (rev 03) SMBus                                : Intel Corporation 82801H (ICH8 Family) SMBus Controller
 
Last edited:
  • Like
Reactions: B S Magnet
Code:
├┬00:1c.2-[03-0a]  # g1x1           [8086:2843] [060400] (rev 03) PCI bridge [Normal decode]           : Intel Corporation 82801H (ICH8 Family) PCI Express Port 3
│└─03:00.0         # g1x8 > g1x1    [1000:0056] [010000] (rev 02) SCSI storage controller              : Broadcom / LSI SAS1064ET PCI-Express Fusion-MPT SAS
Looks like the LSI chip could support x8 but the ExpressCard slot form factor only allows x1. They are both limited to PCIe gen 1 link rate 2.5 GT/s.

Only bus 03 is used but ExpressCard reserves 8 bus numbers [03-0A] because it's hot pluggable. Thunderbolt reserves much more than that on Intel Macs. Thunderbolt ports on Apple Silicon Macs don't share their PCI bus with anything else so each port can have up to 256 buses but I think they reserve only 128 buses each.
 
  • Like
Reactions: Amethyst1
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.