]> git.sur5r.net Git - cc65/blobdiff - src/common/cpu.c
One more place where OutputNameUsed must be flagged.
[cc65] / src / common / cpu.c
index 1d127bcc1d179e61cfc20f566fac6ad874036d02..9f38f07ceab4cd67eb73b263c73dbe59d2a7eb85 100644 (file)
@@ -1,15 +1,15 @@
 /*****************************************************************************/
 /*                                                                           */
-/*                                   cpu.c                                 */
+/*                                   cpu.c                                   */
 /*                                                                           */
 /*                            CPU specifications                             */
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2003      Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
+/* (C) 2003-2009, Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
 
 
 
-#include <string.h>
-
 /* common */
+#include "addrsize.h"
+#include "check.h"
 #include "cpu.h"
+#include "strutil.h"
 
 
 
@@ -51,11 +52,28 @@ cpu_t CPU = CPU_UNKNOWN;
 
 /* Table with target names */
 const char* CPUNames[CPU_COUNT] = {
+    "none",
     "6502",
+    "6502X",
     "65SC02",
     "65C02",
     "65816",
     "sunplus",
+    "sweet16",
+    "huc6280",
+};
+
+/* Tables with CPU instruction sets */
+const unsigned CPUIsets[CPU_COUNT] = {
+    CPU_ISET_NONE,
+    CPU_ISET_6502,
+    CPU_ISET_6502 | CPU_ISET_6502X,
+    CPU_ISET_6502 | CPU_ISET_65SC02,
+    CPU_ISET_6502 | CPU_ISET_65SC02 | CPU_ISET_65C02,
+    CPU_ISET_6502 | CPU_ISET_65SC02 | CPU_ISET_65C02 | CPU_ISET_65816,
+    CPU_ISET_SUNPLUS,
+    CPU_ISET_SWEET16,
+    CPU_ISET_6502 | CPU_ISET_65SC02 | CPU_ISET_65C02 | CPU_ISET_HUC6280,
 };
 
 
@@ -66,6 +84,39 @@ const char* CPUNames[CPU_COUNT] = {
 
 
 
+int ValidAddrSizeForCPU (unsigned char AddrSize)
+/* Check if the given address size is valid for the current CPU */
+{
+    switch (AddrSize) {
+        case ADDR_SIZE_DEFAULT:
+            /* Always supported */
+            return 1;
+
+        case ADDR_SIZE_ZP:
+            /* Not supported by None and Sweet16 */
+            return (CPU != CPU_NONE && CPU != CPU_SWEET16);
+
+        case ADDR_SIZE_ABS:
+            /* Not supported by None */
+            return (CPU != CPU_NONE);
+
+        case ADDR_SIZE_FAR:
+            /* Only supported by 65816 */
+            return (CPU == CPU_65816);
+
+        case ADDR_SIZE_LONG:
+            /* Not supported by any CPU */
+            return 0;
+
+        default:
+            FAIL ("Invalid address size");
+            /* NOTREACHED */
+            return 0;
+    }
+}
+
+
+
 cpu_t FindCPU (const char* Name)
 /* Find a CPU by name and return the target id. CPU_UNKNOWN is returned if
  * the given name is no valid target.
@@ -75,7 +126,7 @@ cpu_t FindCPU (const char* Name)
 
     /* Check all CPU names */
     for (I = 0; I < CPU_COUNT; ++I) {
-       if (strcmp (CPUNames [I], Name) == 0) {
+       if (StrCaseCmp (CPUNames [I], Name) == 0) {
            return (cpu_t)I;
        }
     }