diff --git a/rtl/amicommon/sysos.inc b/rtl/amicommon/sysos.inc
index 5254402e39..894d3ab370 100644
--- a/rtl/amicommon/sysos.inc
+++ b/rtl/amicommon/sysos.inc
@@ -28,12 +28,18 @@
                            AmigaOS functions
 *****************************************************************************}
 
-{ exec.library functions }
-
 {$include execf.inc}
 {$include doslibf.inc}
 
 
+{*****************************************************************************
+                             CPU specific
+*****************************************************************************}
+
+{$ifdef cpum68k}
+{$include m68kamiga.inc}
+{$endif}
+
 {*****************************************************************************
                     System Dependent Structures/Consts
 *****************************************************************************}
diff --git a/rtl/amiga/m68k/m68kamiga.inc b/rtl/amiga/m68k/m68kamiga.inc
index aa0b4ed748..24905dc66b 100644
--- a/rtl/amiga/m68k/m68kamiga.inc
+++ b/rtl/amiga/m68k/m68kamiga.inc
@@ -1,9 +1,9 @@
 {
     This file is part of the Free Pascal run time library.
-    Copyright (c) 2015 by Karoly Balogh,
+    Copyright (c) 2015-2016 by Karoly Balogh,
     member of the Free Pascal development team.
 
-    m68k/Amiga atomic operations implementation
+    Amiga specific m68k functions
 
     See the file COPYING.FPC, included in this distribution,
     for details about the copyright.
@@ -20,6 +20,7 @@
   the ops themselves. It of course won't be hardware-atomic, but should
   be safe for multithreading. (KB) }
 
+{$DEFINE FPC_SYSTEM_HAS_INTERLOCKEDFUNCS}
 function InterLockedDecrement (var Target: longint) : longint;
   begin
     Forbid;
@@ -64,3 +65,25 @@ function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comp
       Target := NewValue;
     Permit;
   end;
+
+
+{ AmigaOS tells us what CPU we run on, so just use that }
+{$DEFINE FPC_SYSTEM_HAS_TEST68K}
+procedure Test68k(var CPU: byte; var FPU: byte);
+  var
+    flags: DWord;
+  begin
+    flags:=PExecBase(AOS_ExecBase)^.AttnFlags;
+
+    CPU:=0;
+    if (flags and AFF_68010) > 0 then CPU:=1;
+    if (flags and AFF_68020) > 0 then CPU:=2;
+    if (flags and AFF_68030) > 0 then CPU:=3;
+    if (flags and AFF_68040) > 0 then CPU:=4;
+    if (flags and AFF_68060) > 0 then CPU:=6;
+
+    FPU:=0;
+    if (flags and AFF_68881) > 0 then FPU:=1;
+    if (flags and AFF_68882) > 0 then FPU:=2;
+    if (flags and AFF_FPU40) > 0 then FPU:=CPU; // 040 or 060 with FPU
+  end;
diff --git a/rtl/amiga/system.pp b/rtl/amiga/system.pp
index 37337802fe..cfec78cff8 100644
--- a/rtl/amiga/system.pp
+++ b/rtl/amiga/system.pp
@@ -115,9 +115,6 @@ implementation
 
 {$I system.inc}
 {$I osdebug.inc}
-{$ifdef cpum68k}
-{$I m68kamiga.inc}
-{$endif}
 
 {$IFDEF AMIGAOS4}
   // Required to allow opening of utility library interface...
@@ -318,6 +315,9 @@ begin
 { Setup heap }
   InitHeap;
   SysInitExceptions;
+{$ifdef cpum68k}
+  fpc_cpucodeinit;
+{$endif}
   initunicodestringmanager;
 { Setup stdin, stdout and stderr }
   SysInitStdIO;
diff --git a/rtl/m68k/m68k.inc b/rtl/m68k/m68k.inc
index 00c23cbeaf..c4cce4fa82 100644
--- a/rtl/m68k/m68k.inc
+++ b/rtl/m68k/m68k.inc
@@ -371,7 +371,7 @@ asm
 end;
 {$endif}
 
-{$IFNDEF HASAMIGA}
+{$IFNDEF FPC_SYSTEM_HAS_INTERLOCKEDFUNCS}
 function InterLockedDecrement (var Target: longint) : longint;
   begin
   {$warning FIX ME}
@@ -411,7 +411,16 @@ function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comp
     if Target = Comperand then
       Target := NewValue;
   end;
-{$ENDIF HASAMIGA}
+{$ENDIF FPC_SYSTEM_HAS_INTERLOCKEDFUNCS}
+
+{$ifndef FPC_SYSTEM_HAS_TEST68K}
+procedure Test68k(var CPU: byte; var FPU: byte);
+begin
+  {$warning Implement me!}
+  CPU:=0;
+  FPU:=0;
+end;
+{$endif}
 
 {$if defined(CPUM68K_HAS_BYTEREV) or defined(CPUM68K_HAS_ROLROR)}
 { Disabled for now, because not all cases below were tested. (KB) }
@@ -585,3 +594,8 @@ asm
 {$endif}
 end;
 {$endif FPC_SYSTEM_HAS_SWAPENDIAN}
+
+procedure fpc_cpucodeinit;
+  begin
+    Test68k(Test68000,Test68881);
+  end;