/*-----------------------------------------------------------------------*/
/*                                   TIGA                                */
/*      Copyright (C) 1990-1991  Texas Instruments Incorporated.         */
/*                           All Rights Reserved                         */
/*-----------------------------------------------------------------------*/
#define TMS34010            0
#define TMS34020            1
#define MAGIC               0x8214
#define MAX_STR             64

//#define NAME_TIGA           "TIGA"
#define NAME_OF_TIGA        "TIGA"
#define TIGACFG_FILE        "tiga.cfg"
#define MAX_TIGACFG_SIZE    8192
#define READ_MODES          -6

int SetMode( int );  /* function prototype for the setmode function */
int TiCFG( int );

typedef struct
{
	unsigned short disp_hres;
	unsigned short disp_vres;
	unsigned long  palet_size;
	unsigned short num_pages;
	unsigned long  pixel_mask;
	unsigned long  pixel_size;
} MODE;

typedef struct
{
    unsigned short      magic_num;
    unsigned short      proc_id;
    unsigned short      mode_count;
    unsigned short      irq_count;
    unsigned short      busw_count;
    unsigned short      iob_count;
    unsigned short      mem1b_count;
    unsigned short      mem2b_count;
    unsigned short      gta_count;
    unsigned short      mon_count;
    unsigned short      mem_count;
    unsigned short      io_range;
    unsigned long       mem1_range;
    unsigned long       mem2_range;
    unsigned char       text[MAX_STR];
    unsigned long       offset_irq;
    unsigned long       offset_busw;
    unsigned long       offset_iob;
    unsigned long       offset_mem1b;
    unsigned long       offset_mem2b;
    unsigned long       offset_gta;
    unsigned long       offset_aux_config;
    unsigned long       offset_mon;
    unsigned long       offset_mem;
    unsigned long       offset_mode[1];
} CL_HDR;

typedef struct
{
    unsigned short       irq[1];
} IRQ_SECT;

typedef struct
{
    unsigned short       busw[1];
} BUSW_SECT;

typedef struct
{
    unsigned short       iob[1];
} IOB_SECT;

typedef struct
{
    unsigned long        mem1b[1];
} MEM1B_SECT;

typedef struct
{
    unsigned long        mem2b[1];
} MEM2B_SECT;

typedef struct
{
    unsigned short       gta[1];
} GTA_SECT;

typedef struct
{
    struct {
            unsigned short      width;
            unsigned short      height;
            unsigned char       text[MAX_STR];
           } monitor[1];
} MON_SECT;

typedef struct
{
    struct {
            unsigned short      mem_id;
            unsigned char       text[MAX_STR];
           } memory[1];
} MEM_SECT;

typedef struct
{
    unsigned short      alt_video;
    unsigned short      emulation;
    short               mem_mapped;
    struct   {
                 unsigned long   base;
                 unsigned long   range;
             } mem[8];
    short               io_mapped;
    struct   {
                 unsigned short  base;
                 unsigned short  range;
             } io[8];
} AUX_CONFIG;

typedef struct
{
    unsigned short      x_aspect;
    unsigned short      y_aspect;
    unsigned short      diag_aspect;
    unsigned short      hesync;
    unsigned short      heblnk;
    unsigned short      hsblnk;
    unsigned short      htotal;
    unsigned short      vesync;
    unsigned short      veblnk;
    unsigned short      vsblnk;
    unsigned short      vtotal;
    unsigned short      dpyctl;
    unsigned short      sync_delay;
    unsigned short      flags;
} MON_DATA10;

typedef struct
{
    unsigned short      x_aspect;
    unsigned short      y_aspect;
    unsigned short      diag_aspect;
    unsigned short      vesync;
    unsigned short      hesync;
    unsigned short      veblnk;
    unsigned short      heblnk;
    unsigned short      vsblnk;
    unsigned short      hsblnk;
    unsigned short      vtotal;
    unsigned short      htotal;
    unsigned short      dpyctl;
    unsigned short      dinclo;
    unsigned short      dinchi;
    unsigned short      heserr;
    unsigned short      dpymsk;
    unsigned short      sync_delay;
    unsigned short      flags;
} MON_DATA20;

typedef struct
{
    unsigned long       size;
    unsigned short      mem_id;
    unsigned short      page_count;
    unsigned short      os_count;
    unsigned short      overlay_mask_count;
    unsigned long       offset_mem;
    unsigned long       offset_mode;
    unsigned long       offset_mon;
    unsigned long       offset_page;
    unsigned long       offset_os;
    unsigned long       offset_oem;
} MODE_HDR;

typedef struct
{
    unsigned short      dram;
    unsigned short      vram;
    unsigned long       data[2];
} MODE_MEM;

typedef struct
{
    unsigned long       dpitch;
    unsigned short      hres;
    unsigned short      vres;
    unsigned short      pix_size;
    unsigned long       pix_mask;
    unsigned short      pal_gun_depth;
    unsigned long       pal_size;
    unsigned short      pal_inset;
    unsigned short      silicon;
    unsigned short      c_class;
    unsigned long       r_mask;
    unsigned long       g_mask;
    unsigned long       b_mask;
    unsigned long       wkspc_addr;
    unsigned long       wkspc_pitch;
    unsigned long       overlay_masks[8];
} MODE_MODE;

typedef struct
{
    struct   {
                 unsigned short  dpyctl;
                 unsigned long   offset;
             } mon[1];
} MODE_MON;

typedef struct
{
    unsigned long    addr;
    unsigned long    dpystrt;
} MODE_PAGE;

typedef struct
{
    unsigned long    addr;
    unsigned short    x;
    unsigned short    y;
} MODE_OS;

typedef struct
{
    unsigned short      magic_num;
    unsigned long       file_len;
    unsigned short      proc_id;
    unsigned short      mode_count;
    unsigned short      default_mode;
    unsigned long       offset_setup;
    unsigned long       offset_mon;
    unsigned long       offset_cd;
    unsigned long       offset_mode[1];
} CFG_HDR;

typedef struct
{
    unsigned short  width;
    unsigned short  height;
} CFG_MON;

typedef struct
{
    unsigned short  int_level;
    unsigned short  io_base;
    unsigned short  bus_width;
    unsigned short  gta_pages;
    unsigned long   hostseg_addr;
    unsigned long   hostseg2_addr;
    AUX_CONFIG      aux;
} CFG_CD;

typedef struct
{
    unsigned char   oem_text[MAX_STR];
    short           mon_choice;
    short           mon_count;
    short           irq_choice;
    short           busw_choice;
    short           iob_choice;
    short           mem1b_choice;
    short           mem2b_choice;
    short           gta_choice;
    short           mem_choice;
} CFG_SETUP;
