/* */
/* */
/* */
-/* (C) 1998-2000 Ullrich von Bassewitz */
-/* Wacholderweg 14 */
-/* D-70597 Stuttgart */
-/* EMail: uz@musoftware.de */
+/* (C) 1998-2003 Ullrich von Bassewitz */
+/* Römerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
-/* The current CPU and an array with instruction tables */
-static enum CPUType CPU = CPU_6502;
+/* An array with instruction tables */
static const InsTable* InsTabs[CPU_COUNT] = {
(const InsTable*) &InsTab6502,
(const InsTable*) &InsTab65SC02,
-void SetCPU (enum CPUType NewCPU)
+void SetCPU (cpu_t NewCPU)
/* Set a new CPU */
{
/* Make sure the parameter is correct */
-enum CPUType GetCPU (void)
+cpu_t GetCPU (void)
/* Return the current CPU */
{
return CPU;
/*****************************************************************************/
/* */
-/* instr.h */
+/* instr.h */
/* */
/* Instruction encoding for the ca65 macroassembler */
/* */
/* */
/* */
-/* (C) 1998-2000 Ullrich von Bassewitz */
-/* Wacholderweg 14 */
-/* D-70597 Stuttgart */
-/* EMail: uz@musoftware.de */
+/* (C) 1998-2003 Ullrich von Bassewitz */
+/* Römerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
+/* common */
+#include "cpu.h"
+
+
+
/*****************************************************************************/
-/* Data */
+/* Data */
/*****************************************************************************/
-/* Supported CPUs */
-enum CPUType {
- CPU_6502,
- CPU_65C02,
- CPU_65816,
- CPU_SUNPLUS, /* Not in the freeware version - sorry */
- CPU_COUNT /* Count of different CPUs */
-};
-
/* Constants for the addressing mode. If an opcode is available in zero page
* and absolut adressing mode, both bits are set. When checking for valid
* modes, the zeropage bit is checked first. Similar, the implicit bit is set
-void SetCPU (enum CPUType NewCPU);
+void SetCPU (cpu_t NewCPU);
/* Set a new CPU */
-enum CPUType GetCPU (void);
+cpu_t GetCPU (void);
/* Return the current CPU */
int FindInstruction (const char* Ident);
exit (EXIT_FAILURE);
}
+ /* If no CPU given, use the default CPU for the target */
+ if (GetCPU () == CPU_UNKNOWN) {
+ if (Target != TGT_UNKNOWN) {
+ SetCPU (DefaultCPU[Target]);
+ } else {
+ SetCPU (CPU_6502);
+ }
+ }
+
/* Intialize the target translation tables */
TgtTranslateInit ();
/* common */
#include "check.h"
+#include "cpu.h"
#include "strbuf.h"
#include "version.h"
#include "xmalloc.h"
#include "asmlabel.h"
#include "casenode.h"
#include "codeseg.h"
-#include "cpu.h"
#include "dataseg.h"
#include "error.h"
#include "global.h"
void g_fileinfo (const char* Name, unsigned long Size, unsigned long MTime)
/* If debug info is enabled, place a file info into the source */
-{
+{
if (DebugInfo) {
/* We have to place this into the global text segment, so it will
* appear before all .dbg line statements.
/* common */
#include "abend.h"
#include "chartype.h"
+#include "cpu.h"
#include "print.h"
#include "xmalloc.h"
#include "xsprintf.h"
#include "coptstore.h"
#include "coptsub.h"
#include "copttest.h"
-#include "cpu.h"
#include "error.h"
#include "global.h"
#include "codeopt.h"
+/* common */
+#include "cpu.h"
+
/* cc65 */
#include "codeent.h"
#include "codeinfo.h"
#include "codeopt.h"
-#include "cpu.h"
#include "error.h"
#include "coptind.h"
#include <stdlib.h>
+/* common */
+#include "cpu.h"
+
/* cc65 */
#include "codeent.h"
#include "codeinfo.h"
-#include "cpu.h"
#include "coptsize.h"
+++ /dev/null
-/*****************************************************************************/
-/* */
-/* cpu.c */
-/* */
-/* CPU type definitions */
-/* */
-/* */
-/* */
-/* (C) 2000 Ullrich von Bassewitz */
-/* Wacholderweg 14 */
-/* D-70597 Stuttgart */
-/* EMail: uz@musoftware.de */
-/* */
-/* */
-/* This software is provided 'as-is', without any expressed or implied */
-/* warranty. In no event will the authors be held liable for any damages */
-/* arising from the use of this software. */
-/* */
-/* Permission is granted to anyone to use this software for any purpose, */
-/* including commercial applications, and to alter it and redistribute it */
-/* freely, subject to the following restrictions: */
-/* */
-/* 1. The origin of this software must not be misrepresented; you must not */
-/* claim that you wrote the original software. If you use this software */
-/* in a product, an acknowledgment in the product documentation would be */
-/* appreciated but is not required. */
-/* 2. Altered source versions must be plainly marked as such, and must not */
-/* be misrepresented as being the original software. */
-/* 3. This notice may not be removed or altered from any source */
-/* distribution. */
-/* */
-/*****************************************************************************/
-
-
-
-#include "cpu.h"
-
-
-
-/*****************************************************************************/
-/* Data */
-/*****************************************************************************/
-
-
-
-/* Current CPU */
-CPUType CPU = CPU_6502;
-
-
-
+++ /dev/null
-/*****************************************************************************/
-/* */
-/* cpu.h */
-/* */
-/* CPU type definitions */
-/* */
-/* */
-/* */
-/* (C) 2000 Ullrich von Bassewitz */
-/* Wacholderweg 14 */
-/* D-70597 Stuttgart */
-/* EMail: uz@musoftware.de */
-/* */
-/* */
-/* This software is provided 'as-is', without any expressed or implied */
-/* warranty. In no event will the authors be held liable for any damages */
-/* arising from the use of this software. */
-/* */
-/* Permission is granted to anyone to use this software for any purpose, */
-/* including commercial applications, and to alter it and redistribute it */
-/* freely, subject to the following restrictions: */
-/* */
-/* 1. The origin of this software must not be misrepresented; you must not */
-/* claim that you wrote the original software. If you use this software */
-/* in a product, an acknowledgment in the product documentation would be */
-/* appreciated but is not required. */
-/* 2. Altered source versions must be plainly marked as such, and must not */
-/* be misrepresented as being the original software. */
-/* 3. This notice may not be removed or altered from any source */
-/* distribution. */
-/* */
-/*****************************************************************************/
-
-
-
-#ifndef CPU_H
-#define CPU_H
-
-
-
-/*****************************************************************************/
-/* Data */
-/*****************************************************************************/
-
-
-
-/* Supported CPUs */
-typedef enum CPUType {
- CPU_6502,
- CPU_65C02
-} CPUType;
-
-/* Current CPU */
-extern CPUType CPU;
-
-
-
-/* End of cpu.h */
-
-#endif
-
-
-
#include "abend.h"
#include "chartype.h"
#include "cmdline.h"
+#include "cpu.h"
#include "debugflag.h"
#include "fname.h"
#include "print.h"
#include "asmcode.h"
#include "compile.h"
#include "codeopt.h"
-#include "cpu.h"
#include "error.h"
#include "global.h"
#include "incpath.h"
static void OptCPU (const char* Opt, const char* Arg)
/* Handle the --cpu option */
{
- if (strcmp (Arg, "6502") == 0) {
- CPU = CPU_6502;
- } else if (strcmp (Arg, "65C02") == 0) {
- CPU = CPU_65C02;
- } else {
+ CPU = FindCPU (Arg);
+ if (CPU != CPU_6502 && CPU != CPU_65C02) {
AbEnd ("Invalid argument for %s: `%s'", Opt, Arg);
}
}
OutputFile = MakeFilename (InputFile, ".s");
}
+ /* If no CPU given, use the default CPU for the target */
+ if (CPU == CPU_UNKNOWN) {
+ if (Target != TGT_UNKNOWN) {
+ CPU = DefaultCPU[Target];
+ } else {
+ CPU = CPU_6502;
+ }
+ }
+
/* Go! */
Compile (InputFile);
/* Create the output file if we didn't had any errors */
if (ErrorCount == 0 || Debug) {
- FILE* F;
-
-#if 0
- /* Optimize the output if requested */
- if (Optimize) {
- OptDoOpt ();
- }
-#endif
-
/* Open the file */
- F = fopen (OutputFile, "w");
+ FILE* F = fopen (OutputFile, "w");
if (F == 0) {
Fatal ("Cannot open output file `%s': %s", OutputFile, strerror (errno));
}
coptstore.o \
coptsub.o \
copttest.o \
- cpu.o \
dataseg.o \
datatype.o \
declare.o \
coptstore.obj \
coptsub.obj \
copttest.obj \
- cpu.obj \
dataseg.obj \
datatype.obj \
declare.obj \
/* common */
#include "check.h"
+#include "cpu.h"
/* cc65 */
#include "codeinfo.h"
-#include "cpu.h"
#include "error.h"
#include "opcodes.h"
--- /dev/null
+/*****************************************************************************/
+/* */
+/* cpu.c */
+/* */
+/* CPU specifications */
+/* */
+/* */
+/* */
+/* (C) 2003 Ullrich von Bassewitz */
+/* Römerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
+/* */
+/* */
+/* This software is provided 'as-is', without any expressed or implied */
+/* warranty. In no event will the authors be held liable for any damages */
+/* arising from the use of this software. */
+/* */
+/* Permission is granted to anyone to use this software for any purpose, */
+/* including commercial applications, and to alter it and redistribute it */
+/* freely, subject to the following restrictions: */
+/* */
+/* 1. The origin of this software must not be misrepresented; you must not */
+/* claim that you wrote the original software. If you use this software */
+/* in a product, an acknowledgment in the product documentation would be */
+/* appreciated but is not required. */
+/* 2. Altered source versions must be plainly marked as such, and must not */
+/* be misrepresented as being the original software. */
+/* 3. This notice may not be removed or altered from any source */
+/* distribution. */
+/* */
+/*****************************************************************************/
+
+
+
+#include <string.h>
+
+/* common */
+#include "cpu.h"
+
+
+
+/*****************************************************************************/
+/* Data */
+/*****************************************************************************/
+
+
+
+/* CPU used */
+cpu_t CPU = CPU_UNKNOWN;
+
+/* Table with target names */
+const char* CPUNames [CPU_COUNT] = {
+ "6502"
+ "65C02",
+ "65816",
+ "sunplus",
+};
+
+
+
+/*****************************************************************************/
+/* Code */
+/*****************************************************************************/
+
+
+
+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.
+ */
+{
+ unsigned I;
+
+ /* Check all CPU names */
+ for (I = 0; I < CPU_COUNT; ++I) {
+ if (strcmp (CPUNames [I], Name) == 0) {
+ return (cpu_t)I;
+ }
+ }
+
+ /* Not found */
+ return CPU_UNKNOWN;
+}
+
+
+
--- /dev/null
+/*****************************************************************************/
+/* */
+/* cpu.h */
+/* */
+/* CPU specifications */
+/* */
+/* */
+/* */
+/* (C) 2003 Ullrich von Bassewitz */
+/* Römerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
+/* */
+/* */
+/* This software is provided 'as-is', without any expressed or implied */
+/* warranty. In no event will the authors be held liable for any damages */
+/* arising from the use of this software. */
+/* */
+/* Permission is granted to anyone to use this software for any purpose, */
+/* including commercial applications, and to alter it and redistribute it */
+/* freely, subject to the following restrictions: */
+/* */
+/* 1. The origin of this software must not be misrepresented; you must not */
+/* claim that you wrote the original software. If you use this software */
+/* in a product, an acknowledgment in the product documentation would be */
+/* appreciated but is not required. */
+/* 2. Altered source versions must be plainly marked as such, and must not */
+/* be misrepresented as being the original software. */
+/* 3. This notice may not be removed or altered from any source */
+/* distribution. */
+/* */
+/*****************************************************************************/
+
+
+
+#ifndef CPU_H
+#define CPU_H
+
+
+
+/*****************************************************************************/
+/* Data */
+/*****************************************************************************/
+
+
+
+/* CPUs */
+typedef enum {
+ CPU_UNKNOWN = -1, /* Not specified or invalid target */
+ CPU_6502,
+ CPU_65C02,
+ CPU_65816,
+ CPU_SUNPLUS, /* Not in the freeware version - sorry */
+ CPU_COUNT /* Number of different CPUs */
+} cpu_t;
+
+/* CPU used */
+extern cpu_t CPU;
+
+/* Table with target names */
+extern const char* CPUNames [CPU_COUNT];
+
+
+
+/*****************************************************************************/
+/* Code */
+/*****************************************************************************/
+
+
+
+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.
+ */
+
+
+
+/* End of cpu.h */
+
+#endif
+
+
+
check.o \
cmdline.o \
coll.o \
+ cpu.o \
debugflag.o \
exprdefs.o \
filepos.o \
check.obj \
cmdline.obj \
coll.obj \
+ cpu.obj \
debugflag.obj \
exprdefs.obj \
filepos.obj \
/* */
/* */
/* */
-/* (C) 2000-2002 Ullrich von Bassewitz */
-/* Wacholderweg 14 */
-/* D-70597 Stuttgart */
-/* EMail: uz@musoftware.de */
+/* (C) 2000-2003 Ullrich von Bassewitz */
+/* Römerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
"geos",
"lunix",
"atmos"
-};
+};
+
+
+
+/* Table with default CPUs per target */
+const cpu_t DefaultCPU[TGT_COUNT] = {
+ CPU_6502, /* none */
+ CPU_6502, /* module */
+ CPU_6502, /* atari */
+ CPU_6502, /* vic20 */
+ CPU_6502, /* c16 */
+ CPU_6502, /* c64 */
+ CPU_6502, /* c128 */
+ CPU_6502, /* ace */
+ CPU_6502, /* plus4 */
+ CPU_6502, /* cbm510 */
+ CPU_6502, /* cbm610 */
+ CPU_6502, /* pet */
+ CPU_6502, /* bbc */
+ CPU_6502, /* apple2 */
+ CPU_6502, /* geos */
+ CPU_6502, /* lunix */
+ CPU_6502, /* atmos */
+};
/* */
/* */
/* */
-/* (C) 2000-2002 Ullrich von Bassewitz */
-/* Wacholderweg 14 */
-/* D-70597 Stuttgart */
-/* EMail: uz@musoftware.de */
+/* (C) 2000-2003 Ullrich von Bassewitz */
+/* Römerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
+/* common */
+#include "cpu.h"
+
+
+
/*****************************************************************************/
/* Data */
/*****************************************************************************/
extern target_t Target;
/* Table with target names */
-extern const char* TargetNames [TGT_COUNT];
+extern const char* TargetNames[TGT_COUNT];
+
+/* Table with default CPUs per target */
+extern const cpu_t DefaultCPU[TGT_COUNT];