]> git.sur5r.net Git - cc65/blobdiff - src/common/cpu.c
Fixed LinuxDoc Tools issues in some verbatim blocks in the Atari document.
[cc65] / src / common / cpu.c
index 52ad2bb5bff8a8d8d0740e92694d08ff75e5d1fb..b055fae88b3cad6eec8e4e4ec7dcbda3d71b5075 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2003-2004 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 */
+#include "addrsize.h"
+#include "check.h"
 #include "cpu.h"
+#include "strutil.h"
 
 
 
 /*****************************************************************************/
-/*                                          Data                                    */
+/*                                   Data                                    */
 /*****************************************************************************/
 
 
@@ -51,51 +52,87 @@ cpu_t CPU = CPU_UNKNOWN;
 
 /* Table with target names */
 const char* CPUNames[CPU_COUNT] = {
+    "none",
     "6502",
     "6502X",
     "65SC02",
     "65C02",
     "65816",
-    "sunplus",
     "sweet16",
+    "huc6280",
+    "m740",
+    "4510",
 };
 
 /* 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,
+    CPU_ISET_6502 | CPU_ISET_65SC02 | CPU_ISET_65C02 | CPU_ISET_4510,
 };
 
 
 
 /*****************************************************************************/
-/*                                          Code                                    */
+/*                                   Code                                    */
 /*****************************************************************************/
 
 
 
+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.
- */
+** the given name is no valid target.
+*/
 {
     unsigned I;
 
     /* Check all CPU names */
     for (I = 0; I < CPU_COUNT; ++I) {
-       if (strcmp (CPUNames [I], Name) == 0) {
-           return (cpu_t)I;
-       }
+        if (StrCaseCmp (CPUNames [I], Name) == 0) {
+            return (cpu_t)I;
+        }
     }
 
     /* Not found */
     return CPU_UNKNOWN;
 }
-
-
-