/* GNU PIC processor definitions
   Copyright (C) 2001, 2002, 2003, 2004, 2005
   Craig Franklin

This file is part of gputils.

gputils is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

gputils is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with gputils; see the file COPYING.  If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.  */

#ifndef __GPPROCESSOR_H__
#define __GPPROCESSOR_H__

enum proc_class {
  PROC_CLASS_UNKNOWN,   /* Unknown device */
  PROC_CLASS_EEPROM8,   /* 8 bit EEPROM */
  PROC_CLASS_GENERIC,   /* 12 bit device */
  PROC_CLASS_PIC12,     /* 12 bit devices */
  PROC_CLASS_SX,        /* 12 bit devices */
  PROC_CLASS_PIC14,     /* 14 bit devices */
  PROC_CLASS_PIC16,     /* 16 bit devices */
  PROC_CLASS_PIC16E     /* enhanced 16 bit devices */
};

/* XXXPRO: Need to add an entry for any extra processors.  Please keep
   this list sorted! */

enum pic_processor {
  no_processor,
  eeprom8,
  generic,
  pic10f200,
  pic10f202,
  pic10f204,
  pic10f206,
  pic10f220,
  pic10f222,
  pic12c508,
  pic12c508a,
  pic12c509,
  pic12c509a,
  pic12c671,
  pic12c672,
  pic12ce518,
  pic12ce519,
  pic12ce673,
  pic12ce674,
  pic12cr509a,
  pic12f508,
  pic12f509,
  pic12f510,
  pic12f629,
  pic12f635,
  pic12f675,
  pic12f683,
  pic14000,
  pic16c5x,
  pic16cxx,
  pic16c432,
  pic16c433,
  pic16c505,
  pic16c54,
  pic16c52,
  pic16c54a,
  pic16c54b,
  pic16c54c,
  pic16c55,
  pic16c55a,
  pic16c554,
  pic16c557,
  pic16c558,
  pic16c56,
  pic16c56a,
  pic16c57,
  pic16c57c,
  pic16c58a,
  pic16c58b,
  pic16c61,
  pic16c62,
  pic16c62a,
  pic16c62b,
  pic16c620,
  pic16c620a,
  pic16c621,
  pic16c621a,
  pic16c622,
  pic16c622a,
  pic16c63,
  pic16c63a,
  pic16c64,
  pic16c64a,
  pic16c642,
  pic16c65,
  pic16c65a,
  pic16c65b,
  pic16c66,
  pic16c662,
  pic16c67,
  pic16c71,
  pic16c710,
  pic16c711,
  pic16c712,
  pic16c715,
  pic16c716,
  pic16c717,
  pic16c72,
  pic16c72a,
  pic16c73,
  pic16c73a,
  pic16c73b,
  pic16c74,
  pic16c745,
  pic16c74a,
  pic16c74b,
  pic16c76,
  pic16c765,
  pic16c77,
  pic16c770,
  pic16c771,
  pic16c773,
  pic16c774,
  pic16c781,
  pic16c782,
  pic16c84,
  pic16c923,
  pic16c924,
  pic16c925,
  pic16c926,
  pic16ce623,
  pic16ce624,
  pic16ce625,
  pic16cr54,
  pic16cr54a,
  pic16cr54b,
  pic16cr54c,
  pic16cr56a,
  pic16cr57a,
  pic16cr57b,
  pic16cr57c,
  pic16cr58a,
  pic16cr58b,
  pic16cr62,
  pic16cr620a,
  pic16cr63,
  pic16cr64,
  pic16cr65,
  pic16cr72,
  pic16cr83,
  pic16cr84,
  pic16f505,
  pic16f54,
  pic16f57,
  pic16f59,
  pic16f610,
  pic16f627,
  pic16f627a,
  pic16f628,
  pic16f628a,
  pic16f630,
  pic16f636,
  pic16f639,
  pic16f648a,
  pic16f676,
  pic16f684,
  pic16f685,
  pic16f687,
  pic16f688,
  pic16f689,
  pic16f690,
  pic16f716,
  pic16f72,
  pic16f73,
  pic16f737,
  pic16f74,
  pic16f747,
  pic16f76,
  pic16f767,
  pic16f77,
  pic16f777,
  pic16f785,
  pic16f818,
  pic16f819,
  pic16f83,
  pic16f84,
  pic16f87,
  pic16f84a,
  pic16f870,
  pic16f871,
  pic16f872,
  pic16f873,
  pic16f873a,
  pic16f874,
  pic16f874a,
  pic16f876,
  pic16f876a,
  pic16f877,
  pic16f877a,
  pic16f88,
  pic16f882,
  pic16f883,
  pic16f884,
  pic16f886,
  pic16f887,
  pic16f913,
  pic16f914,
  pic16f916,
  pic16f917,
  pic16hv540,
  pic17cxx,
  pic17c42,
  pic17c42a,
  pic17c43,
  pic17c44,
  pic17c752,
  pic17c756,
  pic17c756a,
  pic17c762,
  pic17c766,
  pic17cr42,
  pic17cr43,
  pic18cxx,
  pic18c242,
  pic18c252,
  pic18c442,
  pic18c452,
  pic18c601,
  pic18c658,
  pic18c801,
  pic18c858,
  pic18f1220,
  pic18f1230,
  pic18f1320,
  pic18f1330,
  pic18f2220,
  pic18f2320,
  pic18f2331,
  pic18f2410,
  pic18f242,
  pic18f2420,
  pic18f2431,
  pic18f2439,
  pic18f2455,
  pic18f248,
  pic18f2480,
  pic18f24j10,
  pic18f2510,
  pic18f2515,
  pic18f252,
  pic18f2525,
  pic18f2539,
  pic18f2550,
  pic18f2520,
  pic18f258,
  pic18f2580,
  pic18f2585,
  pic18f25j10,
  pic18f2610,
  pic18f2620,
  pic18f2680,
  pic18f2681,
  pic18f2682,
  pic18f2685,
  pic18f4220,
  pic18f4320,
  pic18f4331,
  pic18f4410,
  pic18f442,
  pic18f4420,
  pic18f4431,
  pic18f4439,
  pic18f4455,
  pic18f448,
  pic18f4480,
  pic18f44j10,
  pic18f4510,
  pic18f4515,
  pic18f452,
  pic18f4520,
  pic18f4525,
  pic18f4539,
  pic18f4550,
  pic18f458,
  pic18f4580,
  pic18f4585,
  pic18f45j10,
  pic18f4610,
  pic18f4620,
  pic18f4680,
  pic18f4681,
  pic18f4682,
  pic18f4685,
  pic18f6310,
  pic18f6390,
  pic18f6410,
  pic18f6490,
  pic18f64j15,
  pic18f6520,
  pic18f6525,
  pic18f6585,
  pic18f65j10,
  pic18f65j15,
  pic18f6620,
  pic18f6621,
  pic18f6627,
  pic18f6680,
  pic18f66j10,
  pic18f66j15,
  pic18f6720,
  pic18f6722,
  pic18f67j10,
  pic18f8310,
  pic18f8390,
  pic18f8410,
  pic18f8490,
  pic18f84j15,
  pic18f8520,
  pic18f8525,
  pic18f8585,
  pic18f85j10,
  pic18f85j15,
  pic18f8620,
  pic18f8621,
  pic18f8627,
  pic18f8680,
  pic18f86j10,
  pic18f86j15,
  pic18f8720,
  pic18f8722,
  pic18f87j10,
  rf509af,
  rf509ag,
  rf675f,
  rf675h,
  rf675k,
  sx18,
  sx20,
  sx28,
  sx48,
  sx52
};

#define MAX_NAMES 3 /* Maximum number of names a processor can have */
#if !defined(NULL)
#  define NULL 0
#endif

struct px {
  enum pic_processor tag;
  enum proc_class pclass;
  const char *defined_as;
  const char *names[MAX_NAMES];
  unsigned long coff_type;
  int num_pages;
  int num_banks;
  long maxrom;
  const char *script;
};
extern const px pics[];

#endif
