From 4bdcad03a07369cc5a54675363906ba4e82c7e7d Mon Sep 17 00:00:00 2001 From: uz Date: Wed, 28 Dec 2011 13:33:38 +0000 Subject: [PATCH] Added TGT_GEOS_CBM and TGT_GEOS_APPLE. Added new targets to the geos resource compiler already prepared by Oliver. Changed the target module to allow target name aliases and consolidated target properties into a TargetProperties structure kept in that module. Numeric targets are now gone. git-svn-id: svn://svn.cc65.org/cc65/trunk@5338 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/ca65/main.c | 10 +- src/cc65/main.c | 12 ++- src/cl65/main.c | 10 +- src/common/target.c | 224 +++++++++++++++++++++++++++++------------- src/common/target.h | 24 +++-- src/common/tgttrans.c | 89 +---------------- src/grc65/grc65.c | 4 +- 7 files changed, 200 insertions(+), 173 deletions(-) diff --git a/src/ca65/main.c b/src/ca65/main.c index 6b16dd98b..b86147a2d 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -251,9 +251,15 @@ static void SetSys (const char* Sys) NewSymbol ("__APPLE2ENH__", 1); break; - case TGT_GEOS: + case TGT_GEOS_CBM: /* Do not handle as a CBM system */ NewSymbol ("__GEOS__", 1); + NewSymbol ("__GEOS_CBM__", 1); + break; + + case TGT_GEOS_APPLE: + NewSymbol ("__GEOS__", 1); + NewSymbol ("__GEOS_APPLE__", 1); break; case TGT_LUNIX: @@ -1002,7 +1008,7 @@ int main (int argc, char* argv []) /* If no CPU given, use the default CPU for the target */ if (GetCPU () == CPU_UNKNOWN) { if (Target != TGT_UNKNOWN) { - SetCPU (DefaultCPU[Target]); + SetCPU (GetTargetProperties (Target)->DefaultCPU); } else { SetCPU (CPU_6502); } diff --git a/src/cc65/main.c b/src/cc65/main.c index 85ca5170a..4165bc857 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* (C) 2000-2010, Ullrich von Bassewitz */ +/* (C) 2000-2011, Ullrich von Bassewitz */ /* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ @@ -210,9 +210,15 @@ static void SetSys (const char* Sys) DefineNumericMacro ("__APPLE2ENH__", 1); break; - case TGT_GEOS: + case TGT_GEOS_CBM: /* Do not handle as a CBM system */ DefineNumericMacro ("__GEOS__", 1); + DefineNumericMacro ("__GEOS_CBM__", 1); + break; + + case TGT_GEOS_APPLE: + DefineNumericMacro ("__GEOS__", 1); + DefineNumericMacro ("__GEOS_APPLE__", 1); break; case TGT_LUNIX: @@ -950,7 +956,7 @@ int main (int argc, char* argv[]) /* If no CPU given, use the default CPU for the target */ if (CPU == CPU_UNKNOWN) { if (Target != TGT_UNKNOWN) { - CPU = DefaultCPU[Target]; + CPU = GetTargetProperties (Target)->DefaultCPU; } else { CPU = CPU_6502; } diff --git a/src/cl65/main.c b/src/cl65/main.c index d5d1191cd..a3a137e09 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -306,7 +306,7 @@ static void CmdSetOutput (CmdDesc* Cmd, const char* File) static void CmdSetTarget (CmdDesc* Cmd, target_t Target) /* Set the output file in a command desc */ { - CmdAddArg2 (Cmd, "-t", TargetNames[Target]); + CmdAddArg2 (Cmd, "-t", GetTargetName (Target)); } @@ -335,7 +335,7 @@ static void SetTargetFiles (void) if (Target != TGT_NONE) { /* Get a pointer to the system name and its length */ - const char* TargetName = TargetNames [Target]; + const char* TargetName = GetTargetName (Target); unsigned TargetNameLen = strlen (TargetName); /* Set the library file */ @@ -1021,11 +1021,11 @@ static void OptListTargets (const char* Opt attribute ((unused)), const char* Arg attribute ((unused))) /* List all targets */ { - unsigned I; + target_t T; /* List the targets */ - for (I = TGT_NONE; I < TGT_COUNT; ++I) { - printf ("%s\n", TargetNames[I]); + for (T = TGT_NONE; T < TGT_COUNT; ++T) { + printf ("%s\n", GetTargetName (T)); } /* Terminate */ diff --git a/src/common/target.c b/src/common/target.c index 2c07eb993..2c553fbaa 100644 --- a/src/common/target.c +++ b/src/common/target.c @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* (C) 2000-2009, Ullrich von Bassewitz */ +/* (C) 2000-2011, Ullrich von Bassewitz */ /* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ @@ -36,106 +36,194 @@ #include #include +/* common */ #include "chartype.h" +#include "check.h" #include "target.h" /*****************************************************************************/ -/* Data */ +/* Data */ /*****************************************************************************/ -/* Target system */ -target_t Target = TGT_NONE; +/* Translation table with direct (no) translation */ +static unsigned char CTNone[256] = { + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, + 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, + 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, + 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, + 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, + 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, + 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, + 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, +}; -/* Table with target names */ -const char* TargetNames [TGT_COUNT] = { - "none", - "module", - "atari", - "vic20", - "c16", - "c64", - "c128", - "plus4", - "cbm510", - "cbm610", - "pet", - "bbc", - "apple2", - "apple2enh", - "geos", - "lunix", - "atmos", - "nes", - "supervision", - "lynx" +/* Translation table ISO-8859-1 -> ATASCII */ +static const unsigned char CTAtari [256] = { + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0xFD,0x08,0x7F,0x9B,0x0B,0x7D,0x0D,0x0E,0x0F, + 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, + 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, + 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, + 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, + 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, + 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, + 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, }; +/* Translation table ISO-8859-1 -> PETSCII */ +static const unsigned char CTPET [256] = { + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x14,0x09,0x0D,0x11,0x93,0x0A,0x0E,0x0F, + 0x10,0x0B,0x12,0x13,0x08,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, + 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, + 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, + 0x40,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0x5B,0xBF,0x5D,0x5E,0xA4, + 0xAD,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, + 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0xB3,0xDD,0xAB,0xB1,0xDF, + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, + 0x90,0x91,0x92,0x0C,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, + 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, + 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, +}; + + +/* One entry in the target map */ +typedef struct TargetEntry TargetEntry; +struct TargetEntry { + char Name[12]; /* Target name */ + target_t Id; /* Target id */ +}; -/* 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, /* plus4 */ - CPU_6502, /* cbm510 */ - CPU_6502, /* cbm610 */ - CPU_6502, /* pet */ - CPU_6502, /* bbc */ - CPU_6502, /* apple2 */ - CPU_65C02, /* apple2enh */ - CPU_6502, /* geos */ - CPU_6502, /* lunix */ - CPU_6502, /* atmos */ - CPU_6502, /* nes */ - CPU_65SC02, /* supervision */ - CPU_65C02, /* lynx */ +/* Table that maps target names to ids. Sorted alphabetically for bsearch. + * Allows mupltiple entries for one target id (target name aliases). + */ +static const TargetEntry TargetMap[] = { + { "apple2enh", TGT_APPLE2ENH }, + { "apple2", TGT_APPLE2 }, + { "atari", TGT_ATARI }, + { "atmos", TGT_ATMOS }, + { "bbc", TGT_BBC }, + { "c128", TGT_C128 }, + { "c16", TGT_C16 }, + { "c64", TGT_C64 }, + { "cbm510", TGT_CBM510 }, + { "cbm610", TGT_CBM610 }, + { "geos", TGT_GEOS_CBM }, + { "geos-apple", TGT_GEOS_APPLE }, + { "geos-cbm", TGT_GEOS_CBM }, + { "lunix", TGT_LUNIX }, + { "lynx", TGT_LYNX }, + { "module", TGT_MODULE }, + { "nes", TGT_NES }, + { "none", TGT_NONE }, + { "pet", TGT_PET }, + { "plus4", TGT_PLUS4 }, + { "supervision", TGT_SUPERVISION }, + { "vc20", TGT_VIC20 }, + { "vic20", TGT_VIC20 }, +}; +#define MAP_ENTRY_COUNT (sizeof (TargetMap) / sizeof (TargetMap[0])) + + +/* Table with target properties by target id */ +static const TargetProperties PropertyTable[TGT_COUNT] = { + { "none", CPU_6502, CTNone }, + { "module", CPU_6502, CTNone }, + { "atari", CPU_6502, CTAtari }, + { "vic20", CPU_6502, CTPET }, + { "c16", CPU_6502, CTPET }, + { "c64", CPU_6502, CTPET }, + { "c128", CPU_6502, CTPET }, + { "plus4", CPU_6502, CTPET }, + { "cbm510", CPU_6502, CTPET }, + { "cbm610", CPU_6502, CTPET }, + { "pet", CPU_6502, CTPET }, + { "bbc", CPU_6502, CTNone }, + { "apple2", CPU_6502, CTNone }, + { "apple2enh", CPU_65C02, CTNone }, + { "geos-cbm", CPU_6502, CTNone }, + { "geos-apple2", CPU_6502, CTNone }, + { "lunix", CPU_6502, CTNone }, + { "atmos", CPU_6502, CTNone }, + { "nes", CPU_6502, CTNone }, + { "supervision", CPU_65SC02, CTNone }, + { "lynx", CPU_65C02, CTNone }, }; +/* Target system */ +target_t Target = TGT_NONE; + /*****************************************************************************/ -/* Code */ +/* Code */ /*****************************************************************************/ +static int Compare (const void* Key, const void* Entry) +/* Compare function for bsearch */ +{ + return strcmp ((const char*) Key, ((const TargetEntry*)Entry)->Name); +} + + + target_t FindTarget (const char* Name) /* Find a target by name and return the target id. TGT_UNKNOWN is returned if * the given name is no valid target. */ { - unsigned I; - - /* Check for a numeric target */ - if (IsDigit (*Name)) { - int Target = atoi (Name); - if (Target >= 0 && Target < TGT_COUNT) { - return (target_t)Target; - } - } - - /* Check for a target string */ - for (I = 0; I < TGT_COUNT; ++I) { - if (strcmp (TargetNames [I], Name) == 0) { - return (target_t)I; - } - } - - /* Not found */ - return TGT_UNKNOWN; + /* Search for the name in the map */ + const TargetEntry* T; + T = bsearch (Name, TargetMap, MAP_ENTRY_COUNT, sizeof (TargetMap[0]), Compare); + + /* Return the target id */ + return (T == 0)? TGT_UNKNOWN : T->Id; } +const TargetProperties* GetTargetProperties (target_t Target) +/* Return the properties for a target */ +{ + /* Must have a valid target id */ + PRECONDITION (Target >= 0 && Target < TGT_COUNT); + + /* Return the array entry */ + return &PropertyTable[Target]; +} +const char* GetTargetName (target_t Target) +/* Return the name of a target */ +{ + /* Return the array entry */ + return GetTargetProperties (Target)->Name; +} + diff --git a/src/common/target.h b/src/common/target.h index 134e19ff4..fa1d42964 100644 --- a/src/common/target.h +++ b/src/common/target.h @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* (C) 2000-2009, Ullrich von Bassewitz */ +/* (C) 2000-2011, Ullrich von Bassewitz */ /* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ @@ -66,7 +66,8 @@ typedef enum { TGT_BBC, TGT_APPLE2, TGT_APPLE2ENH, - TGT_GEOS, + TGT_GEOS_CBM, + TGT_GEOS_APPLE, TGT_LUNIX, TGT_ATMOS, TGT_NES, @@ -75,12 +76,17 @@ typedef enum { TGT_COUNT /* Number of target systems */ } target_t; +/* Collection of target properties */ +typedef struct TargetProperties TargetProperties; +struct TargetProperties { + const char Name[12]; /* Name of the target */ + cpu_t DefaultCPU; /* Default CPU for this target */ + const unsigned char* CharMap; /* Character translation table */ +}; + /* Target system */ extern target_t Target; -/* Table with target names */ -extern const char* TargetNames[TGT_COUNT]; - /* Table with default CPUs per target */ extern const cpu_t DefaultCPU[TGT_COUNT]; @@ -97,12 +103,16 @@ target_t FindTarget (const char* Name); * the given name is no valid target. */ +const TargetProperties* GetTargetProperties (target_t Target); +/* Return the properties for a target */ +const char* GetTargetName (target_t Target); +/* Return the name of a target */ -/* End of target.h */ -#endif +/* End of target.h */ +#endif diff --git a/src/common/tgttrans.c b/src/common/tgttrans.c index 9d061ef92..c184f0dfb 100644 --- a/src/common/tgttrans.c +++ b/src/common/tgttrans.c @@ -36,7 +36,6 @@ #include /* common */ -#include "abend.h" #include "check.h" #include "target.h" #include "tgttrans.h" @@ -49,67 +48,7 @@ -/* Translation table with direct (no) translation */ -static unsigned char CTNone[256] = { - 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, - 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, - 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, - 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, - 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, - 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, - 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, - 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, - 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, - 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, - 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, - 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, - 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, - 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -}; - -/* Translation table ISO-8859-1 -> ATASCII */ -static const unsigned char CTAtari [256] = { - 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0xFD,0x08,0x7F,0x9B,0x0B,0x7D,0x0D,0x0E,0x0F, - 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, - 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, - 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, - 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, - 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, - 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, - 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, - 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, - 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, - 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, - 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, - 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, - 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, - 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -}; - -/* Translation table ISO-8859-1 -> PETSCII */ -static const unsigned char CTPET [256] = { - 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x14,0x09,0x0D,0x11,0x93,0x0A,0x0E,0x0F, - 0x10,0x0B,0x12,0x13,0x08,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, - 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, - 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, - 0x40,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, - 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0x5B,0xBF,0x5D,0x5E,0xA4, - 0xAD,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, - 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0xB3,0xDD,0xAB,0xB1,0xDF, - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, - 0x90,0x91,0x92,0x0C,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, - 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, - 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, - 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, - 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, - 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, - 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, -}; - -/* Translation table actually used. Default is the same as CTNone */ +/* Translation table actually used. Default is no translation */ static unsigned char Tab[256] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, @@ -140,30 +79,8 @@ static unsigned char Tab[256] = { void TgtTranslateInit (void) /* Initialize the translation tables */ { - switch (Target) { - case TGT_NONE: memcpy (Tab, CTNone, sizeof (Tab)); break; - case TGT_MODULE: memcpy (Tab, CTNone, sizeof (Tab)); break; - case TGT_ATARI: memcpy (Tab, CTAtari, sizeof (Tab)); break; - case TGT_VIC20: memcpy (Tab, CTPET, sizeof (Tab)); break; - case TGT_C16: memcpy (Tab, CTPET, sizeof (Tab)); break; - case TGT_C64: memcpy (Tab, CTPET, sizeof (Tab)); break; - case TGT_C128: memcpy (Tab, CTPET, sizeof (Tab)); break; - case TGT_PLUS4: memcpy (Tab, CTPET, sizeof (Tab)); break; - case TGT_CBM510: memcpy (Tab, CTPET, sizeof (Tab)); break; - case TGT_CBM610: memcpy (Tab, CTPET, sizeof (Tab)); break; - case TGT_PET: memcpy (Tab, CTPET, sizeof (Tab)); break; - case TGT_BBC: memcpy (Tab, CTNone, sizeof (Tab)); break; - case TGT_APPLE2: memcpy (Tab, CTNone, sizeof (Tab)); break; - case TGT_APPLE2ENH: memcpy (Tab, CTNone, sizeof (Tab)); break; - case TGT_GEOS: memcpy (Tab, CTNone, sizeof (Tab)); break; - case TGT_LUNIX: memcpy (Tab, CTNone, sizeof (Tab)); break; - case TGT_ATMOS: memcpy (Tab, CTNone, sizeof (Tab)); break; - case TGT_NES: memcpy (Tab, CTNone, sizeof (Tab)); break; - case TGT_SUPERVISION: memcpy (Tab, CTNone, sizeof (Tab)); break; - case TGT_LYNX: memcpy (Tab, CTNone, sizeof (Tab)); break; - default: - AbEnd ("Internal error: Target system unknown (%d)", Target); - } + /* Copy the translation for the selected target */ + memcpy (Tab, GetTargetProperties (Target)->CharMap, sizeof (Tab)); } diff --git a/src/grc65/grc65.c b/src/grc65/grc65.c index 9268bd133..dea06205b 100644 --- a/src/grc65/grc65.c +++ b/src/grc65/grc65.c @@ -788,10 +788,10 @@ int main(int argc, char *argv[]) { break; case 't': switch (FindTarget(argv[++i])) { - case TGT_GEOS: /* todo: TGT_GEOS-CBM */ + case TGT_GEOS_CBM: apple = 0; break; - case TGT_COUNT: /* todo: TGT_GEOS-APPLE */ + case TGT_GEOS_APPLE: apple = 1; break; default: -- 2.39.5