Aros/Platforms/x86 support

Google translation into German, French, Dutch, Italian, Spanish, Hindi, Chinese Simplified, Polish, Russian,

AROS should run on almost any i386 PC hardware so long as the CPU is newer than an i486, and has a "Floating Point Unit (FPU)". Ideally around 700Mhz and above with at least 256MB of memory is recommended for desktops and around 1GHz and at least 256MB for laptops/notebooks/netbooks. For web browsing, etc above 1GB is usually needed and offers the option to run web browsers, media players and other hard disk heavy usage from RAM: disk.

Most hardware support covers the period between 2000 and 2010

Motherboards supported
 * Most Intel mobos are supported (Skt 775 is ok but newer is better) - additional pci / pci-e cards may be needed for networking, audio, etc
 * AMD based socket 939 am2 am2+ am3+, fusion and am4 ryzen based systems work but additional pci / pci-e cards may be needed

Motherboard support gets diminished after 2010 due to the introduction of SATA/AHCI (mobos) and UEFI (mobos and disks) and further with USB3 from 2014 onwards

Supported graphics cards (gfx)
 * Nvidia 2D and 3D 2005-2011. Nouveau supports 2D from TNT through to fermi gtx5xx and 3D acceleration fx5xxx to gtx4xx. It's worth noting however that support isn't guaranteed. Nor will potential power of a card reflect its performance under AROS.
 * Intel 2D and 3D 2006-2009. 2D for many old netbooks and motherboards. 3D for many early netbooks and motherboards
 * AMD/ATI 2D only and no 3D. Desktop ie external monitor support only (ie no laptop internal support) for very early Radeon 7000 through to x600. Experimental 2D version for up to HD3xxx came later
 * VESA 2D fallback modes for all graphic cards (GPUs) and with screen dragging.

Sound wise there are


 * HDaudio support for onboard intel and AMD netbooks, ultrabooks, notebooks and motherboards (2005 to 2014)
 * some AC97 codec support for very old motherboards and laptops (ie pre 2004)


 * PCI and some PCI-E C-Media CMI8738 for desktop plugin cards
 * PCI Creative Soundblaster EMU10K1 cards SBLive
 * PCI semi professional some early VIA Envy24 desktop sound cards
 * PCI Sound Blaster 128 aka SB16

Supported network which could be desktop, laptop, etc
 * PCI-E Realtek rtl8169 which also includes the rtl8111 and rtl8110
 * PCI Realtek rtl8139 and includes rtl8101 and rtl8100
 * PCI intel pro100
 * Broadcom 44xx 10/100 integrated in laptops around 2005
 * VIA 10/100
 * 3com Etherlink 10/100
 * Realtek rtl8029 10mbit

Wireless wifi
 * atheros 5000 wireless

It is very hard to recommend a completely supported motherboard because as soon as newer motherboards arrive so their features change subtly, often introducing non supported parts like ethernet and audio. It is a moving target.


 * mini-itx motherboard will only get you 1 pci or pci-e slot
 * micro mATX or uATX will have more, typically 2 pci-e or pci slots which helps if any onboard features are not supported.
 * full atx will have more slots available

N.B It is frustrating when a piece of hardware is not supported. Hardware documentation can run to over 100 pages and a lot of hardware do not have any public documentation anyway. Chips from different manufacturers for sound, graphics, SATA, etc. vary just as much, unless they follow a standard such as HDAudio codecs, AHCI etc.

Coding drivers is a far cry from Hello World programs or even a port of existing software. If you do actually want to try then get a hold of documentation on the relevant hardware and start there. Alternatively you could try to find some BSD, MIT or MPL licence drivers as a point of reference. Please, do not think you can just adapt strings in a driver for different strings, it does not work that way. You will need to start from scratch for each new bit of hardware. Device driver programming require embedded skills, like manipulation of bits within registers, good debugging skills, dealing with interrupts, lots of patience, etc.

The following specific chipsets and drivers are also available - use Tools/PCITool to confirm Vendor and Product IDs - Please let us know any mistakes or any information to be added, to this General Chat list on AROS World

x86 Native Environment

 * Brief Timeline


 * 2000-12-06 HIDD first mouse.hidd completed (Michal Schulz)
 * 2001-03-31 BOOT first boot from floppy disk with IDE device
 * 2001-10-30 BOOT first cd bootable version
 * 2002-01-27 HIDD first pci.hidd added (Michal Schulz)
 * 2002-04-13 BOOT software HDToolBox added
 * 2003-04-03 HIDD vesa2.hidd graphic modes added
 * 2004-03-08 HIDD new pci and ata (pata) devices worked on (Michal Schulz)
 * 2004-03-17 HIDD nVidia 2D driver appears (Michal Schulz)
 * 2005-01-05 AHI  AHI v6 audio system ported (Martin Blom)
 * 2005-01-06 AHI  SBLive SoundBlaster Live driver ported (Georg Steger)
 * 2005-02-04 AHI  AC97 playback only driver added (Michal Schulz)
 * 2005-06-27 NIC  amiTCP stack ported with 3com, NE2000, prism2 drivers (Neil Cafferkey)
 * 2005-08-25 NIC  nForce2 support added (Michal Schulz)
 * 2005-12-24 NIC  Intel Pro100 network driver added (Neil Cafferkey)
 * 2006-03-25 HIDD ATI radeon 2D driver added (Michal Schulz)
 * 2007-03-06 HIDD vesa 1.0 video driver added (Pavel Fedin)
 * 2007-03-08 HIDD dospackets and FAT filesystem (Rob Norris)
 * 2007-03-21 HIDD usb initial commit (Michal Schulz)


 * 2007-10-01 BOOT Installer added (Neil Cafferkey)
 * 2007-11-29 PORT 64bit x86 added  (Michal Schulz)
 * 2008-04-12 BOOT GRUB2 added (Alain Greppin and Nick Andrews)
 * 2008-08-26 NIC  RTL8139 added (Nick Andrews)
 * 2008-10-22 PORT to SAM440ep (ppc) (Michal Schulz)
 * 2009-02-25 PORT to efika (ppc) (Michal Schulz)
 * 2009-05-18 HIDD poseidon usb2.0 stack ported to AROS (Chris Hodges)
 * 2009-11-18 NIC  RTL8169 network driver arrived (Nick Andrews and Franck Charlet)
 * 2009-12-23 AHI  HDAudio based Atom CPU and netbook audio driver arrived (Davy Wentzler)
 * 2010-03-09 BOOT USB pendrive stick booting available (Neil Cafferkey)
 * 2010-05-26 HIDD Intel GMA900 2D graphics card support (Michal Schulz)
 * 2010-09-03 NIC  Wireless PCI based NIC arrived (Neil Cafferkey)
 * 2011-04-30 HIDD Nvidia 2D and 3D nouveau graphics card support (Deadwood)
 * 2011-08-30 HIDD Radeon 2D enhanced AMD driver arrives (Bearsoft)
 * 2011-09-17 NIC  Wireless USB realtek arrives (Neil Cafferkey)
 * 2011-12-09 HIDD Intel 945G 3D Gallium graphics support (Sami)


 * 2013-02-25 AHI  AC97 VIA 686 audio support (Davy Wentzler and Neil Cafferkey)
 * 2013-03-31 PORT early Raspberry PI native support (Nik Andrews)
 * 2014-01-16 AHI  Envy24 audio chipset support (Davy Wentzler and Neil Cafferkey)
 * 2017-02-17 PORT Symmetric MultiProcessing smp added for x86 64bit (Michal Schulz)
 * 2018-10-20 PORT Big Endian ARM
 * 2021-11-26 NIC  Broadcom 44xx ethernet (Neil Cafferkey)
 * 2023-01-12 NIC  Nivida MCP61 ethernet (Neil Cafferkey)

Audio Chipsets
'''If sound beeps in AHI prefs after Music set then some support is there. Select more than one channel for multiple audio streams, set frequency up to 44 kHz or higher and set the volume if not already set. Ensure you set the music unit 0 to 3 which allows the extra features of the audio card like microphone, line-out, etc).'''

1996-2000 sb128.audio aka SB16 PCI

 * 2021 5.27

as per CREATIVE's website, the model number is the first two digits on the front and first two digits on the back. my card says CT4810 and 161TK110B 995; this translates to CT4816 as the model.

The original AudioPCI 3000 card with the ES1370 had a master clock crystal for 44.1 kHz (22.5792 MHz), used an AKM codec (AK4531, non-AC97) and had 4 channel output; Creative later modified the design with a crystal for 48 kHz (24.576 MHz) and Sigmatel AC97 codec (a CT4700 SB128 with a CT5507 chip, AK4531, 22.5792 MHz crystal and TDA7360 speaker power amp). The issue with these cards involved never quite eliminate the effects of resampling on the 64V, it also shows signs of undersized coupling caps. These Ensoniq cards automatically engaged headphone amplifier (with a 4565 opamp).

Porting involved 40897, 40898 configure, 40900 bugs, 40901 further bugs, 40913 memory IO fixes, 40914 irq fix.

Revision 0x04 = ES1371 REV_ES1373_A Revision 0x06 = ES1371 REV_ES1373_B

Revision 0x07 = ES1371 REV_CT5880_A Revision 0x02 = CT5880 REV_CT5880_C Revision 0x03 = CT5880 REV_CT5880_D Revision 0x04 = CT5880 REV_CT5880_E

Revision 0x09 = ES1371 REV_ES1371_B Revision 0x00 = EV1938 REV_EV1938_A Revision 0x08 = ES1371 REV_ES1373_8

1999-2001 via-ac97.audio

 * 2021 5.10

1998-2003 emu10kx.audio - Creative Labs SoundBlaster Live! and Audigy

 * 2021 6.5

the green jack is for the main speaker pair AND headphones, so manual switching will be required If your card is wired for the "AC97" standard, then it's up to your headphone jack to switch the green speaker output in and out the headphone jack has Normally-closed contacts that will open on insertion, which breaks the signal path back to the sound card (FP_RETURN)

2000-2010 cmi8738.audio - C-Media

 * 2021 5.20


 * Read more and imported on 20th July 2011 and alsa docs.

2001-2005 ac97.audio

 * 6.4 27-12-2008

The AC97 chips were designed to be pinout interchangeable so that the sound support could change easily and quickly without motherboard redesigns

the green jack is for the main speaker pair AND headphones, so manual switching will be required If your card is wired for the "AC97" standard, then it's up to your headphone jack to switch the green speaker output in and out, the headphone jack has Normally-closed contacts that will open on insertion, which breaks the signal path back to the sound card (FP_RETURN)

The ProductID and VendorID are for the audio controller only - the important additional codec is NOT so easily identified.

2005-20xx HDAUDIO.audio

 * 6.34 2019 AROS One 1.5 upwards
 * 6.29 2018
 * 6.27 2017 update
 * 6.25 2014 used for most Icaros 2.x
 * 6.20 July 2012
 * 6.17 Nov 2011
 * 6.15 Jun 2011
 * 6.13 Sep 2010

Using Prefs/AHI ensure you set the music unit and at least Units 0 (where most audio comes from) in top left drop down menu to HDaudio - HIFI in the section below. Set Units 1 or 2 to microphone or other outputs. Plus allow more than one channel for multiple audio streams and set frequency up to 44 kHz or higher on the right hand side of the ahi prefs. If sound beeps when you press the test button then all should be OK.

Output <- Codec <- Audio Controller (HDA) <-> Computer

codecs and exact hardware identifier. As mentioned above, HDA is only part of the work here, it gets the audio out of the main chipset in digital format (on a bus called I2S). This is not enough, there is another step needed which is routing that I2S signal to the output, converting it to actual audio, amplifying it, etc. This is handled by a separate chip called a "codec". Sometimes it is initialized by the BIOS, but this is not always the case.

Most audio drivers are made up of two parts a Controller + a Codec. The ProductID and VendorID are for the audio controller only - the important additional codec is NOT so easily identified.

Some newer versions of codecs are missing at the moment.

Things to try if sound not working


 * try to connect something to the audio jack, maybe it is not playing on internal speakers or vice versa
 * make sure you try and select all music units e.g. unit0, unit1....
 * even if PCI ID's are in Prefs/Env-Archive/HDaudio.config, this doesn't mean it is working, it is the codec that matters
 * it might be internally muted

add debug=memory to grub boot line - continue booting with F10 Open a shell Tools/Debug/Bifteck > RAM:audio.txt

or

Open a shell Tools/Debug/Sashimi > RAM:audio.txt Run ahi prefs Click test tone button Stop sashimi with Ctrl-C

If the boot sound is enabled, you have to use Bifteck to capture AHI debug output. In the GRUB menu, press E on your selected entry, then add "debug=memory" to the options (alongside ATA=, vesa= etc.). Then F10 or Ctrl-X to boot. Once booted, run Tools/Debug/Bifteck again.

or


 * try adding QUERYD to the start of ENVARC:hdaudio.config file (also known as Prefs/Env-Archive/) ie. on the first line
 * OR try removing QUERY and QUERYD from the start of the hdaudio.config file
 * Reboot
 * open a shell
 * type: sys:tools/debug/sashimi > ram:debug.txt
 * open ahi prefs
 * select one of the audio modes - HIFI or otherwise
 * press the 'test sound' button
 * press ctrl-c in the shell
 * post the results to Aros-World

The HD Audio standard was designed to be hardware pinout interchangeable so that the sound support could change easily and quickly. HDA is a standard around particular chips. Each kind of chip has a certain number of DACs and pins, and even the same chip could be hooked up in different ways on different motherboards. The chips are programmable and the operating system can adjust how things are routed. Some pins aren’t even hooked up, so it makes no sense to route sound to them. Also some pins have sensors that can tell when something is plugged in, so that for example the speakers in a laptop can be muted when headphones are plugged in. Pins are also grouped, so for example all the outputs for a 5.1 sound system are grouped. Generally the HDA driver in the operating system is supposed to read the pin set up and figure out a reasonable way to set things up, and disconnected pins should be ignored, etc.

HDAudio standard has headphones on a separate DAC, and it's up to the driver.. it can even send different audio to the headphones without interrupting the main (green) outputs

Envy24 series
A little history. VIA bought the ICE created Envy chipsets VT1712 first. A few years later, they created several cheaper variants VT1724 (mixer missing), VT1721 (low end cut down), VT1720 (embedded on motherboard) and lastly the VT1723 (no support apart from Windows Envy24DT like SYBA SD-PEX63034).

There are PCI Express versions appearing.

The Envy24 is the base product that was originally designed by ICEnsemble, and it supports multi-channel hardware mixing, which is great for professional use. The HT version removes the hardware mixer (unimportant for non-professional uses). The HT-S version is almost exactly the same as the HT, it just uses cheaper DACs. The PT version is exactly the same as the HT-S version, it is just the edition used for on-board audio on motherboards.

N.B. PCI slot identification and 3.3v PCI.

Graphic GFX Chipsets
HDMI, DVI and DisplayPort monitors have a native resolution of 480p, 720p, 1080i, 1080p and up


 * HDMI 1.2 720p res.
 * HDMI 1.3 1080 resolution
 * HDMI 1.4 above 1080 res.
 * HDMI 2.0
 * HDMI 2.1

The fallback for most graphics modes is vesa if any native support does not work

2D tests performed with gfxbench in the shell type gfxbench > out.txt (40 seconds blank screen is part of the test), via FreeDoom via limit-removing engine like odamex, chocolate or vanilla doom -timedemo demo1 or doom2 -timedemo demo1, doom.exe -iwad doom2 -file mymap.wad, Duke DNRATE 640x480 windowed

3D tests performed with Demos/Mesa/, Cube 1080p, Cube 2 windowed not fullscreen 1920 x 1025, Quake3 ~ cl_drawFPS 1, Xonotic , test gl,

AGP works but faster transfers through the AGP slot are only available on a few supported motherboard chipsets
 * Faster AGP Working = SIS 650 board, Intel 865pe AGP slot on MSI 6788-050,
 * Not Supported = NForce2 chipsets, most Intel 815/820 chipsets, VIA chipsets, ALi chipsets,

Intel GMA
DVI output is not supported at the moment.

If having problems:


 * Ensure the latest version is being used.
 * Set GMA_MEM to 128 or 256 to test
 * Try the FORCEGMA ToolType for 2D, and try the FORCEGALLIUM ToolType for 3D acceleration after 2D is verified to work. ToolTypes should be applied to the Devs/Monitors/IntelGMA monitor icon.

If still having problems:


 * At GRUB boot screen edit boot line and add option: debug=memory
 * Boot.
 * Use shell command: tools/debug/bifteck > RAM:debug.txt
 * And post [GMA MONITOR DETECTION] and other related debug lines

nouveau.hidd (nvidia pci, agp, pci-e desktop)

 * Desktop, more likely hit rather than miss on very early nvidia (but not on old VIA motherboard chipsets i.e. pre 2010)
 * Laptop, limited support for very early non-optimus (i.e. just Nvidia only so no Intel/nvidia combinations)

Please note that the nouveau project is reverse engineering a graphics driver due to nVidia's limited information and design decisions (closed firmware)


 * 2011-10 - DEVS 6.11 Nouveau.hidd  7.4 Gallium.hidd  9.4 Softpipe - LIBS  2.3 Gallium  1.3 GLU  19.0 Mesa OpenCL 1.x
 * 2011-04 - DEVS 5.31 Nouveau.hidd  7.3 Gallium.hidd  9.3 Softpipe - LIBS  2.2 Gallium  1.1 GLU  18.0 Mesa OpenCL n/a

Nouveau support for AROS is limited to OpenGL 2.1 compliance even for modern GL4 capable GPUs - OpenCL supports the older NV50 (8000 9000) cards, less support in newer NVC0 cards (300 upwards)

ADoom3 graphic details ultra, benchmark while playing press the "`" key and type "Timedemo demo1" in the console

Nouveau development and actual benchmark speed tests are a lot slower than the rival AMD radeon support in 2D and 3D

On linux, Customers with NVIDIA Turing and NVIDIA Ampere Architecture GPUs can choose which modules to install. Pre-Turing (pre hardware raytrace) customers will continue to run the closed source modules. There's hope that might make it to other OSs

nouveau mobile integrated
If you purchased a notebook with an NVidia sticker on it, most of the time you have a optimus based one, ie Intel CPU melded with Nvidia GPU, Optimus was slated at one point to go into desktop PCs but the industry ended up rejecting that concept

Without something like Bumblebeehere or PRIME in AROS, most optimus laptops will default to Intel graphics


 * http://www.bumblebee-project.org/
 * https://github.com/Bumblebee-Project/Bumblebee/wiki/
 * https://github.com/Bumblebee-Project/Bumblebee/
 * https://github.com/Bumblebee-Project/bbswitch
 * https://github.com/amonakov/primus
 * https://github.com/gsgatlin/optimus-rpms

radeon.hidd
Michel Shultz 2D desktop driver (standard on most distributions) and bearsofts updated 2013 around Icaros 1.3.1

3D is not implemented by AROS but could cover these AMD chipsets


 * r300g - 9600 to X1900 - llvm not needed - r300 software driver deprecated and doubtful very useful
 * r600g Evergreen - HD 2xxx to 6xxx - llvm not necessarily needed and can use swrast - r600 software driver deprecated
 * SI - HD 7xxx and up - faster llvmpipe required (extra bounty??)
 * AMDGPU Vulkan GCN 3rd gen (GCN 1.2)

AMDGPU Vulkan
fyi if a notebooks with two graphic cards, the integrated Intel card (id 0x7d) for low power usage and a discrete Radeon card (id 0x56) which should be used for GPU-intensive applications. By default the Intel card is always used

Gallium Radeon HD is not ported yet but is really big and complex so another solution may have to be found like vulkan where support starts from very recent ISA GCN islands HD7000s cards only

What we could see in the future but not in AROS yet...
 * 2013 was a big year for the r600g gallium3d radeon driver with uvd (hardware h.264 video decoding) support via VDPAU in April and Dynamic Power Management added in July for 4000 to 7000
 * 2014 bug fixing for r600g
 * 2015 radeonSI support improved


 * Vulkan
 * Gallium

Vulkan software renderer allows to prepares the infrastructure for hardware rendering. Primary difference between software and hardware renderer is output to regular RAM vs GPU RAM, the rest is almost the same. It is possible to render to GPU RAM offscreen.

bare bones basics data flow

application,>>> api/opengl/vulkan>>>>, jit compiler, >>>>memory manger, >>>>gpu hardware

so you need to have a compiler that takes your api call/program/shaders/drawing commands and turns them into a program the gpu can render.

the vulkan to amd gpu compiler for shaders and textures is nearly os agnostic iirc as long as you have solid posix compliance

Unlike OpenGL, Vulkan do not depend on windowing system and it have driver add-on system with standardized API (Mesa also have OpenGL driver add-ons, but it have non-standard Mesa-specific API). OpenGL may need more work for windowing system related code at this point but developing Vulkan on real hardware is more strategic than developing OpenGL, since now Zink 3 running on Vulkan compensates for the lack of OpenGL support by giving performance similar to native accelerated OpenGL

RadeonGfx use client-server model with client-server thread pairs. For each client thread that calls 3D acceleration API, server side thread is created. If client thread terminates, server side thread also exit.

GeForce RTX 2070 Radeon RX 7600 Quadro RTX 5000 Radeon PRO W6600 GeForce RTX 2060 12GB Radeon PRO W7500 Quadro GP100 Radeon RX 6800S GeForce RTX 3070 Laptop GPU GeForce GTX 1080 GeForce RTX 3060 8GB Quadro RTX 4000 Radeon Pro W5700 Radeon RX 6600 GeForce RTX 2080 (Mobile) Radeon RX 7700S Radeon RX 6700S Radeon RX 6600S Quadro RTX 5000 (Mobile) GeForce GTX 1070 Ti GeForce RTX 4050 Laptop GPU Radeon Pro Vega 64X Radeon RX 5700 Radeon RX Vega 64 GeForce RTX 2060 GeForce RTX 2070 Super with Max-Q Design

Radeon RX 6600M GeForce GTX 1070 Radeon RX 6650M GeForce RTX 3060 Laptop GPU Radeon RX Vega 56 Radeon RX 6700M GeForce RTX 2080 with Max-Q Design Radeon RX 6800M GeForce GTX 980 Ti Radeon R9 Fury GeForce GTX 980 Quadro M5500 Radeon R9 390X Radeon RX 580 Radeon RX 5500 Radeon RX 6550M GeForce GTX 1660 Ti with Max-Q Design GeForce GTX 780 Ti GeForce GTX 970 Radeon R9 290X Radeon RX 480 Radeon RX 5600M Quadro RTX 3000 with Max-Q Design Radeon R9 290X / 390X Ryzen 5 4600HS with Radeon Graphics Radeon R9 290 Radeon Pro 5500 XT Radeon R9 M490 * GeForce GTX 780 Radeon RX 6500M Quadro M5500 GeForce GTX 1060 with Max-Q Design Radeon RX 6500 Radeon RX 5300 Intel Arc A770M GeForce GTX 1650 Ti Radeon Pro 580X Radeon RX 6400 GeForce RTX 2050 Ryzen 9 4900HS with Radeon Graphics Radeon Ryzen 9 6900HS GeForce GTX 980M Quadro M5000M Radeon RX 6300 GeForce GTX 1650 Ti with Max-Q Design Radeon Pro 570 Ryzen 9 6900HS with Radeon Graphics GeForce GTX 1050 Ti Quadro M4000M Radeon R9 280X 380X Radeon R9 380 GeForce GTX 1650 with Max-Q Design GeForce MX570 Radeon R9 280X Radeon R9 380 Radeon 780M GeForce GTX 960 GeForce GTX 970M Quadro M4000M * GeForce GTX 680

Radeon RX 6500M Quadro M5500 Radeon Pro WX 7100 GeForce GTX 1060 with Max-Q Design GeForce GTX 1650 Intel Arc A730M Radeon HD 7970 Radeon R9 M395X Radeon R9 M485X Radeon R9 M480 * Radeon R9 M295X Radeon R9 M390X * FirePro W7170M * Radeon R9 M395 Radeon R7 370 Radeon RX 5500M GeForce GTX 590 GeForce GTX 880M GeForce GTX 950 Radeon R9 270X GeForce GTX 660 Ti GeForce GTX 760 GeForce GTX 780M Quadro K5100M GeForce GTX 680MX Radeon HD 7870 GeForce GTX 965M Quadro M3000M * GeForce GTX 870M Radeon R9 M290X Radeon HD 8970M Radeon Ryzen 7 7735U (680M), Radeon Ryzen 7 7735HS (680M 12C) GeForce GTX 580 Radeon HD 6970 GeForce GTX 1050 GeForce GTX 680M GeForce GTX 775M GeForce GTX 1630 FirePro M6100 Radeon HD 7970M Radeon R9 M390 * GeForce GTX 750 Ti

GeForce GTX 570 GeForce GTX 480 GeForce GTX 960M Quadro M2000M * Quadro K5000M Quadro K4100M GeForce GTX 770M GeForce GTX 860M GeForce GTX 675MX GeForce GTX 950M GeForce GTX 850M Quadro M1000M Radeon R9 M280X Radeon HD 7950M * GeForce GTX 560 Ti Radeon HD 6870 GeForce GTX 470

GeForce GT 1030 GeForce MX330 Ryzen 5 PRO 5650GE with Radeon Graphics Ryzen 7 5800HS FirePro 3D V8800 GeForce MX250 Radeon Pro WX 3200 Ryzen 7 PRO 5750G with Radeon Graphics Radeon Ryzen 5 5600H Ryzen 5 Pro 4650G with Radeon Graphics Radeon Ryzen 7 5800U Ryzen 7 7730U with Radeon Graphics Radeon Ryzen 7 5825U Radeon Pro WX 4150 Radeon Ryzen 5 PRO 4655G Ryzen 5 4600G with Radeon Graphics Radeon Ryzen 5 PRO 4655GE GeForce GTX 485M FirePro W6150M Ryzen 7 5800U with Radeon Graphics Ryzen 5 7530U with Radeon Graphics Ryzen 7 4800U with Radeon Graphics Radeon R9 M470 Ryzen 3 PRO 5350G with Radeon Graphics Radeon RX Vega Ryzen 3 5300U Ryzen 7 5825U with Radeon Graphics Ryzen 5 PRO 4400G with Radeon Graphics Radeon Ryzen 7 PRO 4750GE Radeon Ryzen 7 4800U FirePro V7900 Radeon HD 5970 Radeon Ryzen 7 7700X 8-Core Radeon Ryzen 5 PRO 5650G Radeon Ryzen 5 4400G Radeon Ryzen 5 PRO 5650GE Radeon RX 550X FirePro V8800 Radeon RX Vega Ryzen 5 5500U GeForce MX150 Quadro K3100M Ryzen 7 PRO 5850U with Radeon Graphics Radeon HD 6970M Radeon R7 250X Intel HD 5600 Ryzen 3 4300GE with Radeon Graphics GeForce GTX 460 Ryzen 7 5700U with Radeon Graphics Radeon Ryzen 5 7530U Quadro K620 Ryzen 3 PRO 5350GE with Radeon Graphics Intel Iris Pro P580 Intel UHD Graphics P630 Ryzen 5 4600H with Radeon Graphics Ryzen 5 PRO 7530U with Radeon Graphics Radeon HD 5870 Radeon HD 6870 Ryzen 7 4700G with Radeon Graphics Ryzen 5 5600U with Radeon Graphics Radeon HD 7770 Ryzen 3 Pro 4350G with Radeon Graphics Radeon Ryzen 5 5625U GeForce GTX 745 Radeon Ryzen 7 4850U Mobile Radeon Ryzen 3 PRO 7330U Quadro M600M Radeon Ryzen 5 5500U Ryzen 5 5560U with Radeon Graphics Ryzen 7 4800H with Radeon Graphics

GeForce 945M Ryzen 5 PRO 4650GE with Radeon Graphics FirePro M5100 Radeon Ryzen 5 5600U Radeon Ryzen 5 PRO 4500U GeForce GTX 580M Ryzen 7 PRO 5875U with Radeon Graphics Ryzen 3 5300GE with Radeon Graphics Radeon R9 M385 Quadro 5000M Radeon Ryzen 7 4700U Ryzen 5 PRO 5650U with Radeon Graphics Radeon Ryzen 7 PRO 4750U Ryzen 7 4700U with Radeon Graphics Ryzen 7 PRO 4750U with Radeon Graphics FirePro V7800 Radeon R9 350 Ryzen 3 4300G with Radeon Graphics Radeon Vega 11 Ryzen 5 PRO 3350G Radeon Ryzen 5 5560U GeForce GTX 460 SE Radeon Pro W5500M Radeon Vega 11 Ryzen 5 PRO 3400G Ryzen 5 5500U with Radeon Graphics Ryzen 5 PRO 4500U with Radeon Graphics GeForce GT 645 GeForce GTX 765M Radeon R9 M385X Ryzen 5 5625U with Radeon Graphics Ryzen 3 PRO 7330U with Radeon Graphics Radeon HD 5850 Radeon Vega 11 Ryzen 5 PRO 2400G Intel Iris Pro 580 Radeon HD 6850 Intel Iris Xe MAX Radeon Ryzen 7 PRO 5875U Radeon Ryzen 5 7600 6-Core GeForce GTX 470M Ryzen 3 5300G with Radeon Graphics GeForce GTX 670MX Radeon RX 640 Qualcomm Adreno Gen 3 Radeon R7 450 GeForce GTX 675M Radeon Pro WX 4130 Intel Iris Xe MAX 100 Quadro 5000 Radeon RX 570X Radeon HD 7700-serie Ryzen 5 4600U with Radeon Graphics Ryzen 3 PRO 4350GE with Radeon Graphics Radeon Vega 8

GeForce MX230 GeForce GTX 765M Quadro K4000M Iris Pro Graphics P580 * Iris Pro Graphics 580 * GeForce GTX 645 Quadro M520 GeForce GTX 570M GeForce MX130 Radeon RX 540 Radeon Ryzen 5 PRO 5675U Intel UHD Graphics 770 Radeon RX Vega 11 Ryzen 7 3750H Radeon Vega 11 Ryzen 5 PRO 3400GE Radeon HD 5850 GeForce GTX 675M GeForce GTX 580M Radeon HD 6990M Radeon R9 M385X * Radeon R9 M470X * Radeon R9 M470 * Radeon R9 M385 * Radeon R9 M380 * Radeon R9 M370X Radeon R9 M275 Radeon HD 7770 GeForce GTX 485M GeForce GTX 460 768MB Radeon HD 6790 GeForce GTX 285M SLI Quadro K3100M FirePro W5170M * GeForce GTX 670MX Quadro 5010M GeForce GTX 760M GeForce GTX 670M

GeForce 940MX * Maxwell GPU (940M, GDDR5) FirePro M8900 Radeon HD 6970M Radeon R9 M270 Radeon HD 8870M Radeon HD 7870M Quadro K3000M GeForce GTX 570M FirePro M6000 FirePro M5100 Quadro K2100M Radeon HD 5770 GeForce GTX 550 Ti GeForce GTX 280M SLI Radeon HD 6950M Radeon R7 250 GeForce GT 755M GeForce GTX 660M GeForce 845M Radeon HD 8850M Radeon R9 M365X Radeon R9 M265X Ryzen 5 PRO 4400GE with Radeon Graphics FirePro W5130M * Radeon Vega 8 Ryzen 5 3500U Radeon Vega 6 Ryzen 3 3300U Radeon HD 7850M Radeon HD 8790M FirePro W4170M FirePro W4190M FirePro W4100 Quadro 4000M GeForce GTX 470M GeForce GTX 480M GeForce GT 750M Iris Pro Graphics 6200 Quadro K1100M GeForce 940M Radeon R9 M375 GeForce 930MX * Radeon R7 M380 * Radeon R7 M370 Quadro M600M * GeForce GT 650M Quadro K620M GeForce 840M Radeon R7 M275DX GeForce GT 745M Radeon HD 7770M GeForce GTX 560M Radeon R7 512 Cores (Kaveri Desktop) Radeon R7 384 Cores (Kaveri Desktop) Radeon R7 (Carrizo) * Iris Pro Graphics 5200 GeForce GT 740M GeForce 930M Radeon HD 4850

Iris Graphics 550 * GeForce 830M Iris Graphics 540 Quadro M500M * Quadro K2000M GeForce GTS 450 GeForce GTX 260M SLI GeForce GT 735M Mobility Radeon HD 5870 GeForce 825M Quadro 5000M FirePro M4000 FirePro M7820 Radeon HD 6870M GeForce 9800M GTX SLI Radeon HD 8830M * Radeon HD 8770M Radeon R7 M260X GeForce GTX 460M GeForce 920MX * GeForce GT 730M Radeon HD 7750M GeForce GT 645M * FirePro M4100 Radeon HD 8750M Radeon R6 A10-9600P 4C+6G Quadro 3000M Radeon R7 M270 Radeon R7 M265 Quadro FX 3800M GeForce GTX 285M Mobility Radeon HD 4870 GeForce GT 640M Radeon R7 (Kaveri) Radeon R8 M365DX Radeon R7 M460 * Radeon HD 7730M Radeon R7 M360 GeForce GTX 280M Radeon HD 8690M Quadro FX 3700M Radeon R7 M340 GeForce 920M Radeon R6 M340DX HD Graphics 530 HD Graphics P530 Tegra X1 Maxwell GPU Radeon R7 M260 Radeon R6 (Carrizo)

Mobility Radeon HD 4860 FirePro M7740 Mobility Radeon HD 4850 GeForce GTX 260M GeForce 9800M GTX Quadro FX 2800M Radeon HD 8670D Radeon HD 7690M XT FirePro M5950 GeForce GT 640M LE Radeon R6 (Kaveri) Radeon HD 8650M * Radeon HD 8730M Radeon HD 6770M GeForce GT 635M GeForce GT 555M Radeon R7 A10 PRO-7800B Radeon HD 5670 Mobility Radeon HD 5850 Radeon HD 6850M Quadro 2000M GeForce 9800M GT GeForce 8800M GTX Quadro FX 3600M GeForce GT 445M GeForce GTS 360M

GeForce GT 240 Radeon R7 PRO A10-9700 Radeon HD 7690M HD Graphics 5600 Radeon HD 8570D Radeon HD 8670M Radeon R6 M255DX Radeon HD 7660D Radeon HD 6750M Quadro K1000M GeForce GT 550M Radeon HD 8590M * GeForce GTS 260M GeForce GTS 160M GeForce 9800M GTS GeForce GT 430 Radeon HD 6830M Mobility Radeon HD 5830 Radeon HD 6730M * GeForce 9800M GS Mobility Radeon HD 4830 Mobility Radeon HD 5770 Radeon HD 6570M Radeon HD 8650G Radeon HD 7670M GeForce GT 630M Radeon HD 7560D GeForce GTS 150M * Radeon R5 M335 Radeon R5 M430 * Radeon R5 M330 Radeon R5 M255 Radeon Vega 3 Quadro 1000M GeForce 820M FirePro W2100 HD Graphics 520 620 Iris Graphics 6100

GeForce GT 720M GeForce 8800M GTS Radeon R5 M240 Radeon R5 M320 * Radeon R5 M230 Radeon R5 M315 * Mobility Radeon HD 5750 * Radeon HD 8570M Radeon R7 PRO A10-8850B HD Graphics 6000 Quadro K610M Radeon HD 8550M Iris Graphics 5100 GeForce GT 540M Mali-T880 MP12 * Radeon HD 8610G * Radeon HD 6650M HD Graphics 4600 Mobility Radeon HD 5730 HD Graphics 5500

Radeon R5 (Carrizo) * Radeon R5 (Kaveri) FirePro M5800 NVS 5400M GeForce 710M Radeon HD 7660G GeForce GT 435M HD Graphics 5000 Quadro K510M * Radeon HD 5570 Radeon HD 6550M Radeon HD 7590M * GeForce GTS 350M GeForce GTS 250M Radeon HD 6630M Radeon HD 7650M FirePro M2000 Radeon HD 7570M Radeon HD 7630M Quadro FX 1800M Mobility Radeon HD 5650 Radeon HD 8510G * Radeon HD 6530M Radeon HD 8550G Quadro K500M * GeForce GT 625M * GeForce GT 620M GeForce GT 525M Radeon HD 6550D * Radeon HD 7610M Radeon HD 7620G Radeon HD 8470D Radeon HD 7640G Adreno 530 GeForce ULP K1 (Tegra K1 Kepler GPU) HD Graphics 4400 HD Graphics 510 515 *

NVS 5200M Mobility Radeon HD 565v Radeon HD 7550M Mobility Radeon HD 4670 GeForce GT 425M GeForce 9700M GTS Radeon HD 6645G2 * Quadro FX 2700M GeForce GT 335M Radeon HD 7600G Mobility Radeon HD 3870 Mobility Radeon HD 4650 GeForce GT 220 GeForce GT 420M Radeon HD 7530M * Mobility Radeon HD 3850 GeForce GT 330M Quadro FX 880M Quadro NVS 5100M GeForce GT 240M Radeon HD 7490M * HD Graphics 5300 Radeon HD 7510M * GeForce Go 7950 GTX Quadro FX 3500M GeForce 8700M GT SLI GeForce 9700M GT GeForce GT 230M Mobility Radeon HD 550v Radeon HD 7480D HD Graphics 4000 Mali-T760 MP8 Radeon HD 6620G HD Graphics (Broadwell) * Adreno 430 Radeon R5 (Beema/Carrizo-L) Radeon R4 (Beema) (Kaveri) HD Graphics (Skylake) *

Radeon HD 6450 GDDR5 Radeon HD 7500G Radeon HD 8450G Radeon HD 7470M Radeon HD 6490M Radeon HD 8400 Mali-T880 MP4 GeForce GT 520MX Radeon HD 7520G GeForce GT 325M GeForce Go 7800 GTX SLI GeForce 8600M GT SLI GeForce Go 7900 GS SLI GeForce GT 130M NVS 4200M GeForce Go 7900 GTX Quadro FX 2500M Radeon HD 8350G Radeon HD 8330 GeForce 9650M GS GeForce 9650M GT Radeon R3 (Mullins/Beema) GeForce 8700M GT Quadro FX 1700M Quadro FX 1600M GeForce Go 7800 GTX GeForce Go 7900 GS Quadro NVS 320M Quadro FX 1500M GeForce 9600M GT GeForce GT 220M Quadro FX 770M GeForce GT 120M Radeon HD 7450M GeForce 610M GeForce 705M Mali-T760 MP6 Radeon HD 6470M FirePro M3900 * GeForce GT 520M Radeon HD 7420G Mobility Radeon HD 3670 Mobility FireGL V5725 PowerVR GX6450 Adreno 420 HD Graphics (Haswell)

Radeon HD 6520G Radeon HD 8310G * GeForce 320M GeForce GT 320M Mobility Radeon HD 2600 XT Mobility Radeon X1900 Mobility Radeon X1800XT Mobility Radeon X1800 GeForce Go 6800 Ultra GeForce Go 7800 GeForce 9600M GS GeForce 9500M GS Radeon HD 7400G Radeon HD 6480G * Mobility Radeon HD 2700 GeForce GT 415M GeForce 410M Radeon HD 7370M Adreno 418 HD Graphics (Cherry Trail) Radeon HD 6370M Radeon HD 8280 Mobility Radeon HD 5470 Radeon HD 6450M Radeon HD 7430M * Mobility Radeon HD 3650 Mobility FireGL V5700 Mobility Radeon HD 5145 Mobility Radeon HD 545v Radeon R6 (Mullins) * Radeon HD 8240 Radeon HD 8250 Mobility Radeon HD 4570 Quadro FX 570M Mobility Radeon HD 5450 * Radeon R2 (Mullins/Beema) * GeForce 8600M GT Mobility Radeon HD 2600 HD Graphics 3000 Quadro FX 380M GeForce 310M GeForce G210M NVS 3100M GeForce 405M GeForce 315M GeForce Go 7600 GT GeForce 9500M G GeForce 8600M GS NVS 2100M GeForce Go 7700 GeForce Go 6800 Quadro FX Go 1400 Mobility Radeon X800XT Radeon HD 6430M * Radeon HD 6380G * Mobility Radeon HD 5430 Radeon HD 8210 Mobility Radeon HD 540v Mobility Radeon HD 4550 HD Graphics 2500 HD Graphics (Ivy Bridge)

Quadro NVS 310 Radeon HD 7350M * Radeon HD 6350M * Mobility Radeon HD 4530 Mobility Radeon HD 4350 Radeon HD 4350 GeForce 305M Mobility Radeon X1700 Mobility FireGL V5250 Mobility Radeon X2500 GeForce Go 7600 Quadro NVS 300M Mobility Radeon X800 Mobility Radeon X1600 Mobility FireGL V5200 Mobility Radeon 9800 GeForce Go 6600 Mobility Radeon X1450 Mobility Radeon X700 Mobility FireGL V5000 GeForce G 110M Quadro NVS 295 Radeon HD 6330M * Mobility Radeon HD 4330 GeForce 8400M GT Quadro NVS 140M HD Graphics 2000 GeForce 9500M GE * GeForce 9400M (G) / ION (LE) HD Graphics (Sandy Bridge) *

Adreno 330 PowerVR G6430 PowerVR GX6250 PowerVR G6400 HD Graphics (Bay Trail) Mali-T628 MP6 Mali-T760 MP4 Chrome9HD * Radeon HD 7340 Radeon HD 6320 * Radeon HD 7310 Radeon HD 6310 * Radeon HD 8180 Mobility Radeon HD 3470 GeForce 9300M G ION 2 * GeForce 9300M GS Quadro FX 370M Quadro NVS 160M GeForce 9200M GS Mobility Radeon HD 3450 Mobility Radeon HD 3430 Mobility Radeon HD 3410 Mobility Radeon HD 2400 XT Radeon HD 4270 Radeon HD 4250 Radeon HD 7290 * Radeon HD 6290 * Radeon HD 4200 Graphics Media Accelerator (GMA) HD Graphics Radeon HD 6250 Quadro NVS 150M Quadro FX 360M Mobility Radeon X1350 Mobility Radeon X1400 GeForce 9100M G GeForce 8400M GS Quadro NVS 135M Mobility Radeon HD 2400 Radeon HD 3200 Radeon HD 4225 * Radeon HD 4100 * SGX554MP4 Mali-T628 MP4 Mobility Radeon HD 3400 * Radeon HD 3100 GeForce 8400M G Mali-T860 MP2 Quadro NVS 130M GeForce 8200M G Graphics Media Accelerator (GMA) 4700MHD Graphics Media Accelerator (GMA) 4500MHD Graphics Media Accelerator (GMA) 4500M Mali-T604 MP4 GeForce Go 7400 Quadro FX 350M Quadro NVS 120M GeForce Go 7300 GeForce Tegra 4 * PowerVR G6200 Adreno 405 * Quadro NVS 110M Mobility Radeon X600 Mobility FireGL V3200 Mobility FireGL V3100 Mobility Radeon HD X2300 Mobility Radeon 9700

Mobility FireGL T2e Mobility Radeon X1300 GeForce4 4200 Go Mobility Radeon 9600 Mobility FireGL T2 Mobility Radeon 9550 GeForce Go 7200 GeForce Go 6400 Mobility Radeon X300 GeForce Go 6250 GeForce Go 6200 GeForce FX Go 5700 Quadro FX Go 1000 GeForce FX Go 5600 / 5650 Radeon Xpress X1270 Radeon Xpress X1250 Radeon Xpress X1200 Graphics Media Accelerator (GMA) X3100 Mali-T624 Adreno 320 * Mali-T760 MP2 Mali-T720 MP4 Mali-450 MP4 Graphics Media Accelerator (GMA) 3650 * GeForce 7190M * GeForce 7150M Radeon Xpress 1150 GeForce Go 6150 GeForce Go 6100 GeForce 7000M Graphics Media Accelerator (GMA) 3600 * Mobility Radeon 9200 Mobility FireGL 9000 GeForce FX Go 5200 Mobility Radeon 9000 GeForce 4 488 Go GeForce 4 460 Go GeForce 4 440 Go GeForce 4 420 Go Graphics Media Accelerator (GMA) 3150 Graphics Media Accelerator (GMA) 950 SGX545 SGX544MP2 SGX543MP2 * Mali-T720 MP2 Mali-T720 Adreno 302 304 305 306 Mobility Radeon 7500 Mobility FireGL 7800 Graphics Media Accelerator (GMA) 900 Radeon Xpress 200M Radeon Xpress 1100 Mirage 3+ 672MX Mirage 3 671MX Mali-400 MP4 * GeForce ULP (Tegra 3) * VideoCore-IV * Adreno 220 225* Vivante GC1000+ Dual-Core Mali-400 MP2 * GeForce ULP (Tegra 2) * Graphics Media Accelerator (GMA) 600 * SGX540 * Graphics Media Accelerator (GMA) 500 Adreno 205 * Adreno 203 * GC800 * SGX535 SGX531 SGX530 Adreno 200 * Mali-200 * GeForce 3 Go * GeForce 2 Go 200 / 100 Mobility Radeon 9100 IGP Mobility Radeon 9000 IGP Mobility Radeon M7 Mobility Radeon M6 Chrome9 HC Extreme Graphics 2 Mobility Radeon 7000 IGP Radeon IGP 340M Radeon IGP 320M S3G UniChrome Pro II S3G UniChrome Pro Castle Rock Mirage 2 M760 Mirage M661FX S3 Graphics ProSavage8 Mobility 128 M3 SM502 *

Not supported


 * OpenGL4 with max 4.6 on AMDGPU RX 5000's / 6000s (RDNA might come to AROS) but Intel UHD, Iris Plus or Xe, Nvidia RTX (will not)
 * OpenGL3

Some support


 * OpenGL2 nvidia-nouveau,
 * OpenGL1 intel gma,

Kernel-space drivers like radeon (older AMD driver for older GPUs), amdgpu (newer driver for newer GPUs, allows using a few new features), i915, nouveau and a few others. They are what handles the gory details of talking to the GPU itself (writing to proper registers, handling its memory directly, configuring outputs, and so on). Unfortunately most of what they're exposing can be only consumed by a single user of that GPU, which is why we need...

DRM and DRI (Direct Rendering Manager/Infrastructure) controls access to the GPUs, provides interfaces for talking to the GPU concurrently by multiple apps at once (without them breaking each other) and lets the system perform the most basic tasks like setting proper resolution and such if no userspace apps understand how to talk to the GPU exposed. DRI and DRM expose the GPU interfaces mostly as-is, not in a "vendor-neutral" portable way - if you don't have an application developed specifically for a GPU you have, it won't work.

"let's create a vendor-neutral interface for graphics so that apps can ignore the GPU-specific bits and get right to the drawing!" - which is what OpenGL is. User-space drivers implement the OpenGL specification and expose it as an OpenGL library to apps (like games, browsers, etc) instead of the GPU. Mesa is the most popular collection of open-source user-space drivers and contains a few user-space drivers for different GPU families: radeonsi for most modern AMD GPUs (and r600g, r300g and others for older ones), i915/i965 for old/new Intel GPUs and nouveau for Nvidia GPUs.

There's also Gallium, which is a bunch of utilities and common code shared among these drivers - if certain things can be done once and work everywhere, they'll land in Gallium and benefit all the drivers. Most Mesa drivers use Gallium (radeonsi, nouveau, software renderers), some don't (intel).

Displaying 2D windows supports device-specific 2D drivers as well, but nowadays most of these are no longer needed as the modesetting can handle most hardware on its own. As the DRM/DRI got some additional interfaces for what used to be hardware-specific (setting resolutions, refresh rates, etc) and software requiring accelerated 2D drawing was optimized OpenGL-based renderers, dedicated 2D acceleration is slowly going away. Since around 2012, the 3D part of the graphics card deals with 2D operations.

Modern GPUs can also decode video!? There's VDPAU (NVIDIA & AMD GPUs) and VA-API (AMD & Intel GPUs) that can also talk to the GPU exposed via DRM/DRI and issue proper commands to decode/encode a given video stream. Those drivers are GPU-specific too.

So let's say you have some example GPUs, here's how example stacks could look like:


 * AMD Radeon HD8750: amdgpu -> DRM/DRI -> Mesa (radeonsi)


 * AMD Radeon HD4850: radeon kernel driver -> DRM/DRI -> Mesa (r600g, driver for older Radeon GPUs) -> games/apps/etc.


 * NVIDIA GeForce 460: nouveau kernel driver -> DRM/DRI -> Mesa (nouveau) -> games/apps.


 * Intel GMA950: i915 kernel driver -> DRM/DRI -> Mesa (i945) -> games/apps.

AMD driver name indicates the first generation of HW that the driver supports, since we generally don't know what the last generation will be at the time the driver is created, so:


 * r300 supports 3xx, 4xx, 5xx
 * r600 supports 6xx through NI
 * radeonsi supports SI, CI, VI and Polaris

Unless your computer uses a Firewire chipset manufactured by Texas Instruments, FireWire interfaces are likely to act buggy. AROS is unlikely to ever support FireWire.

Bluetooth is similarly unlikely to be ever supported due to huge cost to be certified.

No, x86 PCMCIA card.resource at the moment. Writing card.resource would be a similar amount of work to writing a typical driver. However, it might be complicated by having to support a variety of PCMCIA-controller chipsets like TI PCI1225, PCI1410, PCI1420, 1450, PCIxx12 and O2, etc. m68k card.resource does not really have many higher level functions, most functions are really simple or poke Gayle registers directly. only exception is CopyTuple. Amiga card.resource has one significant flaw: it's single-unit. would need card.resource and pccard.library. There was talk in the past of designing a new API for PCMCIA because card.resource only supports one slot, but since most modern laptops only have one slot anyway, I think it might be worthwhile to implement card.resource as-is (at least as a first step). pccard.library would be trivial to port. So, a new API is needed.