]> git.sur5r.net Git - cc65/blobdiff - src/common/cpu.c
Support for the Mitsubishi 740 CPU for da65. Written and contributed by
[cc65] / src / common / cpu.c
index 81f285e947f57de7f39980807650522f57836a5d..3ac1108a5a48bf817ed0e3b9611d525110eb1ab5 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-2011, 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 */              
+/* common */
+#include "addrsize.h"
+#include "check.h"
 #include "cpu.h"
+#include "strutil.h"
 
 
 
 cpu_t CPU = CPU_UNKNOWN;
 
 /* Table with target names */
-const char* CPUNames [CPU_COUNT] = {
-    "6502"
+const char* CPUNames[CPU_COUNT] = {
+    "none",
+    "6502",
+    "6502X",
+    "65SC02",
     "65C02",
     "65816",
     "sunplus",
+    "sweet16",
+    "huc6280",
+    "m740",
+};
+
+/* 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,
+    CPU_ISET_6502 | CPU_ISET_M740,
 };
 
 
@@ -65,6 +86,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.
@@ -74,7 +128,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;
        }
     }