/*****************************************************************************/
/*                                                                           */
/*                                 target.h                                  */
/*                                                                           */
/*                           Target specification                            */
/*                                                                           */
/*                                                                           */
/*                                                                           */
/* (C) 2000-2011, Ullrich von Bassewitz                                      */
/*                Roemerstrasse 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 TARGET_H
#define TARGET_H



/* common */
#include "cpu.h"



/*****************************************************************************/
/*                                   Data                                    */
/*****************************************************************************/



/* Supported target systems */
typedef enum {
    TGT_UNKNOWN = -1,           /* Not specified or invalid target */
    TGT_NONE,
    TGT_MODULE,
    TGT_ATARI,
    TGT_ATARI2600,
    TGT_ATARI5200,
    TGT_ATARIXL,
    TGT_VIC20,
    TGT_C16,
    TGT_C64,
    TGT_C128,
    TGT_PLUS4,
    TGT_CBM510,
    TGT_CBM610,
    TGT_OSIC1P,
    TGT_PET,
    TGT_BBC,
    TGT_APPLE2,
    TGT_APPLE2ENH,
    TGT_GEOS_CBM,
    TGT_CREATIVISION,
    TGT_GEOS_APPLE,
    TGT_LUNIX,
    TGT_ATMOS,
    TGT_TELESTRAT,
    TGT_NES,
    TGT_SUPERVISION,
    TGT_LYNX,
    TGT_SIM6502,
    TGT_SIM65C02,
    TGT_PCENGINE,
    TGT_GAMATE,
    TGT_C65,
    TGT_CX16,
    TGT_COUNT                   /* Number of target systems */
} target_t;

/* Collection of target properties */
typedef struct TargetProperties TargetProperties;
struct TargetProperties {
    const char              Name[13];   /* Name of the target */
    cpu_t                   DefaultCPU; /* Default CPU for this target */
    unsigned char           BinFmt;     /* Default binary format for this target */
    const unsigned char*    CharMap;    /* Character translation table */
};

/* Target system */
extern target_t         Target;

/* Types of available output formats */
#define BINFMT_DEFAULT          0       /* Default (binary) */
#define BINFMT_BINARY           1       /* Straight binary format */
#define BINFMT_O65              2       /* Andre Fachat's o65 format */
#define BINFMT_ATARIEXE         3       /* Standard Atari binary load */



/*****************************************************************************/
/*                                   Code                                    */
/*****************************************************************************/



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.
*/

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
