]> 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 064614253276531aee24e9ca2c7a4c32ed6e2f50..3ac1108a5a48bf817ed0e3b9611d525110eb1ab5 100644 (file)
@@ -6,8 +6,8 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2003-2005, Ullrich von Bassewitz                                      */
-/*                Römerstrasse 52                                            */
+/* (C) 2003-2011, Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
 /*                                                                           */
@@ -34,6 +34,8 @@
 
 
 /* common */
+#include "addrsize.h"
+#include "check.h"
 #include "cpu.h"
 #include "strutil.h"
 
@@ -59,6 +61,7 @@ const char* CPUNames[CPU_COUNT] = {
     "sunplus",
     "sweet16",
     "huc6280",
+    "m740",
 };
 
 /* Tables with CPU instruction sets */
@@ -72,6 +75,7 @@ const unsigned CPUIsets[CPU_COUNT] = {
     CPU_ISET_SUNPLUS,
     CPU_ISET_SWEET16,
     CPU_ISET_6502 | CPU_ISET_65SC02 | CPU_ISET_65C02 | CPU_ISET_HUC6280,
+    CPU_ISET_6502 | CPU_ISET_M740,
 };
 
 
@@ -82,6 +86,39 @@ const unsigned CPUIsets[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.