diff --git a/README.md b/README.md
index 998b8cc..7bfb504 100644
--- a/README.md
+++ b/README.md
@@ -40,16 +40,16 @@
 You can either write your own `.config`, link one of the shipped files
 in `configs/`, e.g.:
 
-    $ ln -s configs/posix libhwbase/.config
+    $ ln -s configs/linux libhwbase/.config
 
 or overwrite the config filename by specifying `cnf=<configfile>` on
 the make command line.
 
-Let's install *libhwbase*. We'll need `configs/posix` to build regular
+Let's install *libhwbase*. We'll need `configs/linux` to build regular
 Linux executables:
 
     $ cd libhwbase
-    $ make cnf=configs/posix install
+    $ make cnf=configs/linux install
 
 By default this installs into a new subdirectory `dest`. You can however
 overwrite this decision by specifying `DESTDIR=`.
@@ -80,11 +80,12 @@
 command line or with *i915* blacklisted). After running *i915* it
 only works by chance.
 
-When running `gfx_test` (as root), it will ask for a single argument:
-The path to a sysfs PCI-device node, where it will find the graphics
-hardware. Usually this is PCI device 00:02.0:
+When running `gfx_test` (as root), it will access the graphics hard-
+ware through the sysfs PCI interface. The path is
 
-    $ sudo build/gfx_test /sys/devices/pci0000:00/0000:00:02.0/
+    /sys/devices/pci0000:00/0000:00:02.0/
+
+for all supported platforms.
 
 If you chose the right config above, you should be presented with a
 nice test image. However, `gfx_test` is one-way only: The graphics
diff --git a/gfxtest/Makefile.inc b/gfxtest/Makefile.inc
index 158665a..ff7fa8e 100644
--- a/gfxtest/Makefile.inc
+++ b/gfxtest/Makefile.inc
@@ -1,4 +1,4 @@
-gfxinit-y += gfx_test.adb
-gfxinit-y += gfx_test.ads
+gfxinit-y += hw-gfx-gma-gfx_test.adb
+gfxinit-y += hw-gfx-gma-gfx_test.ads
 
 gfxinit-main-y = gfx_test_main.adb
diff --git a/gfxtest/gfx_test.ads b/gfxtest/gfx_test.ads
deleted file mode 100644
index 52e268e..0000000
--- a/gfxtest/gfx_test.ads
+++ /dev/null
@@ -1,5 +0,0 @@
-package GFX_Test is
-
-   procedure Main;
-
-end GFX_Test;
diff --git a/gfxtest/gfx_test_main.adb b/gfxtest/gfx_test_main.adb
index d3666c9..2e1d5da 100644
--- a/gfxtest/gfx_test_main.adb
+++ b/gfxtest/gfx_test_main.adb
@@ -1,6 +1,6 @@
-with GFX_Test;
+with HW.GFX.GMA.GFX_Test;
 
 procedure GFX_Test_Main is
 begin
-   GFX_Test.Main;
+   HW.GFX.GMA.GFX_Test.Main;
 end GFX_Test_Main;
diff --git a/gfxtest/gfx_test.adb b/gfxtest/hw-gfx-gma-gfx_test.adb
similarity index 69%
rename from gfxtest/gfx_test.adb
rename to gfxtest/hw-gfx-gma-gfx_test.adb
index e7fb80c..b7060ec 100644
--- a/gfxtest/gfx_test.adb
+++ b/gfxtest/hw-gfx-gma-gfx_test.adb
@@ -1,24 +1,18 @@
-with System.Storage_Elements;
+with Ada.Unchecked_Conversion;
 with Ada.Command_Line;
 with Interfaces.C;
 
-with HW.File;
 with HW.Debug;
+with HW.PCI.Dev;
+with HW.MMIO_Range;
 with HW.GFX.GMA;
 with HW.GFX.GMA.Display_Probing;
 
-use HW;
-use HW.GFX;
+package body HW.GFX.GMA.GFX_Test
+is
+   pragma Disable_Atomic_Synchronization;
 
-package body GFX_Test is
-
-   MMIO_Size : constant := 2 * 1024 * 1024;
-   subtype MMIO_Range is Natural range 0 .. MMIO_Size - 1;
-   subtype MMIO_Buffer is Buffer (MMIO_Range);
-   MMIO_Dummy : MMIO_Buffer
-   with
-      Alignment => 16#1000#,
-      Volatile;
+   package Dev is new PCI.Dev (PCI.Address'(0, 2, 0));
 
    type Pixel_Type is record
       Red   : Byte;
@@ -34,16 +28,23 @@
       Alpha at 3 range 0 .. 7;
    end record;
 
+   function Pixel_To_Word (P : Pixel_Type) return Word32
+   with
+      SPARK_Mode => Off
+   is
+      function To_Word is new Ada.Unchecked_Conversion (Pixel_Type, Word32);
+   begin
+      return To_Word (P);
+   end Pixel_To_Word;
+
    Max_W    : constant := 4096;
    Max_H    : constant := 2160;
    FB_Align : constant := 16#0004_0000#;
-   type Screen_Type is
-      array (0 .. 3 * (Max_W * Max_H + FB_Align / 4) - 1) of Pixel_Type;
+   subtype Screen_Index is Natural range
+      0 .. 3 * (Max_W * Max_H + FB_Align / 4) - 1;
+   type Screen_Type is array (Screen_Index) of Word32;
 
-   Screen : Screen_Type
-   with
-      Alignment => 16#1000#,
-      Volatile;
+   package Screen is new MMIO_Range (0, Word32, Screen_Index, Screen_Type);
 
    Pipes : GMA.Pipe_Configs;
 
@@ -76,7 +77,6 @@
      (Framebuffer : Framebuffer_Type;
       Pipe        : GMA.Pipe_Index)
    is
-      use type HW.Word32;
       P        : Pixel_Type;
       -- We have pixel offset wheras the framebuffer has a byte offset
       Offset_Y : Natural := Natural (Framebuffer.Offset / 4);
@@ -90,7 +90,7 @@
             else
                P := Fill (X, Y, Framebuffer, Pipe);
             end if;
-            Screen (Offset) := P;
+            Screen.Write (Offset, Pixel_To_Word (P));
             Offset := Offset + 1;
          end loop;
          Offset_Y := Offset_Y + Natural (Framebuffer.Stride);
@@ -102,8 +102,6 @@
       Mode     : in     Mode_Type;
       Offset   : in out Word32)
    is
-      use type HW.Int32;
-      use type HW.Word32;
    begin
       Offset := (Offset + FB_Align - 1) and not (FB_Align - 1);
       FB :=
@@ -119,7 +117,7 @@
    is
       use type HW.GFX.GMA.Port_Type;
 
-      Offset : HW.Word32 := 0;
+      Offset : Word32 := 0;
    begin
       GMA.Display_Probing.Scan_Ports (Pipes);
 
@@ -135,65 +133,46 @@
       GMA.Dump_Configs (Pipes);
    end Prepare_Configs;
 
-   procedure Print_Usage is
-   begin
-      Debug.Put_Line
-        ("Usage: " & Ada.Command_Line.Command_Name & " <sysfs-pci-path>");
-      Debug.New_Line;
-   end Print_Usage;
-
    procedure Main
    is
-      use System.Storage_Elements;
-
       use type HW.GFX.GMA.Port_Type;
+      use type HW.Word64;
       use type Interfaces.C.int;
 
-      MMIO_Mapped,
-      Screen_Mapped,
+      Res_Addr : Word64;
+
+      Dev_Init,
       Initialized : Boolean;
 
       function iopl (level : Interfaces.C.int) return Interfaces.C.int;
       pragma Import (C, iopl, "iopl");
    begin
-      if Ada.Command_Line.Argument_Count /= 1 then
-         Print_Usage;
-         return;
-      end if;
-
       if iopl (3) /= 0 then
          Debug.Put_Line ("Failed to change i/o privilege level.");
          return;
       end if;
 
-      File.Map
-        (Path     => Ada.Command_Line.Argument (1) & "/resource0",
-         Addr     => Word64 (To_Integer (MMIO_Dummy'Address)),
-         Len      => MMIO_Dummy'Size / 8,
-         Readable => True,
-         Writable => True,
-         Success  => MMIO_Mapped);
-      if not MMIO_Mapped then
-         Debug.Put_Line
-           ("Failed to map '" & Ada.Command_Line.Argument (1) & "/resource0'.");
+      Dev.Initialize (Dev_Init);
+      if not Dev_Init then
+         Debug.Put_Line ("Failed to map PCI config.");
          return;
       end if;
 
-      File.Map
-        (Path     => Ada.Command_Line.Argument (1) & "/resource2",
-         Addr     => Word64 (To_Integer (Screen'Address)),
-         Len      => Screen'Size / 8,
-         Readable => True,
-         Writable => True,
-         Success  => Screen_Mapped);
-      if not Screen_Mapped then
-         Debug.Put_Line
-           ("Failed to map '" & Ada.Command_Line.Argument (1) & "/resource2'.");
+      Dev.Map (Res_Addr, PCI.Res2, WC => True);
+      if Res_Addr = 0 then
+         Debug.Put_Line ("Failed to map PCI resource2.");
+         return;
+      end if;
+      Screen.Set_Base_Address (Res_Addr);
+
+      Dev.Map (Res_Addr, PCI.Res0);
+      if Res_Addr = 0 then
+         Debug.Put_Line ("Failed to map PCI resource0.");
          return;
       end if;
 
       GMA.Initialize
-        (MMIO_Base   => Word64 (To_Integer (MMIO_Dummy'Address)),
+        (MMIO_Base   => Res_Addr,
          Clean_State => True,
          Success     => Initialized);
 
@@ -212,4 +191,4 @@
       end if;
    end Main;
 
-end GFX_Test;
+end HW.GFX.GMA.GFX_Test;
diff --git a/gfxtest/hw-gfx-gma-gfx_test.ads b/gfxtest/hw-gfx-gma-gfx_test.ads
new file mode 100644
index 0000000..71da057
--- /dev/null
+++ b/gfxtest/hw-gfx-gma-gfx_test.ads
@@ -0,0 +1,5 @@
+package HW.GFX.GMA.GFX_Test is
+
+   procedure Main;
+
+end HW.GFX.GMA.GFX_Test;
