<?xml version="1.0"?>
<!-- MPLAB ICD 2 tool specific schema -->
<!-- Microchip Technology Inc. -->
<xs:schema xmlns:icd2="http://microchip.com/icd2" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           targetNamespace="http://microchip.com/icd2">
           
   <!-- ==================================================================== -->
   <!--                                Types -->
   <!-- ==================================================================== -->

   <!-- hex8 -->
   <xs:simpleType name="hex8">
      <xs:annotation>
         <xs:documentation>
			A 8 bit hexidecimal value, w or w/o the 0x prefix
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:string">
         <xs:pattern value="0[Xx][0-9A-Fa-f]{1,2}"/>
      </xs:restriction>
   </xs:simpleType>
   
   <!-- hex16 -->
   <xs:simpleType name="hex16">
      <xs:annotation>
         <xs:documentation>
			A 16 bit hexidecimal value, w or w/o the 0x prefix
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:string">
         <xs:pattern value="0[Xx][0-9A-Fa-f]{1,4}"/>
      </xs:restriction>
   </xs:simpleType>
   
   <!-- hex32 -->
   <xs:simpleType name="hex32">
      <xs:annotation>
         <xs:documentation>
			A 16 bit hexidecimal value, w or w/o the 0x prefix
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:string">
         <xs:pattern value="0[Xx][0-9A-Fa-f]{1,8}"/>
      </xs:restriction>
   </xs:simpleType>
   
   <!-- Binary value -->
   <xs:simpleType name="binary">
      <xs:annotation>
         <xs:documentation>
			A one digit binary value "0" or "1"
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:string">
         <xs:pattern value="[0-1]{1}"/>
      </xs:restriction>
   </xs:simpleType>
   
   <!-- Part ID -->
   <xs:simpleType name="partid">
      <xs:annotation>
         <xs:documentation>
			An enumeration of all the parts we support
			Basically an extra check to make sure all part ids are well formed
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:token">
         <xs:enumeration value="PIC10F200"/>
         <xs:enumeration value="PIC10F202"/>
         <xs:enumeration value="PIC10F204"/>
         <xs:enumeration value="PIC10F206"/>
         <xs:enumeration value="PIC10F220"/>
         <xs:enumeration value="PIC10F222"/>
         
         <xs:enumeration value="PIC12F508"/>
         <xs:enumeration value="PIC12F509"/>
         <xs:enumeration value="PIC12F510"/>
         <xs:enumeration value="PIC12F519"/>
         <xs:enumeration value="PIC12F520"/>
         <xs:enumeration value="PIC12F609"/>
         <xs:enumeration value="PIC12F615"/>
         <xs:enumeration value="PIC12F617"/>
         <xs:enumeration value="PIC12F629"/>
         <xs:enumeration value="PIC12F635"/>
         <xs:enumeration value="PIC12F675"/>
         <xs:enumeration value="PIC12F683"/>
         <xs:enumeration value="PIC12F1822"/>
         <xs:enumeration value="PIC12F1840"/>
         
         <xs:enumeration value="PIC12LF1822"/>
         <xs:enumeration value="PIC12LF1840"/>
         
         <xs:enumeration value="PIC12HV609"/>
         <xs:enumeration value="PIC12HV615"/>
         
         <xs:enumeration value="PIC16F54"/>
         <xs:enumeration value="PIC16F57"/>
         <xs:enumeration value="PIC16F59"/>
         <xs:enumeration value="PIC16F505"/>
         <xs:enumeration value="PIC16F506"/>
         <xs:enumeration value="PIC16F526"/>
         <xs:enumeration value="PIC16F610"/>
         <xs:enumeration value="PIC16F616"/>
         <xs:enumeration value="PIC16F627"/>
         <xs:enumeration value="PIC16F627A"/>
         <xs:enumeration value="PIC16F628"/>
         <xs:enumeration value="PIC16F628A"/>
         <xs:enumeration value="PIC16F630"/>
         <xs:enumeration value="PIC16F631"/>
         <xs:enumeration value="PIC16F636"/>
         <xs:enumeration value="PIC16F639"/>
         <xs:enumeration value="PIC16F648A"/>
         <xs:enumeration value="PIC16F676"/>
         <xs:enumeration value="PIC16F677"/>
         <xs:enumeration value="PIC16F684"/>
         <xs:enumeration value="PIC16F685"/>
         <xs:enumeration value="PIC16F687"/>
         <xs:enumeration value="PIC16F688"/>
         <xs:enumeration value="PIC16F689"/>
         <xs:enumeration value="PIC16F690"/>
         <xs:enumeration value="PIC16F707"/>
         <xs:enumeration value="PIC16F716"/>
         <xs:enumeration value="PIC16F72"/>
         <xs:enumeration value="PIC16F720"/>
         <xs:enumeration value="PIC16F721"/>
         <xs:enumeration value="PIC16F722"/>
         <xs:enumeration value="PIC16F722A"/>
         <xs:enumeration value="PIC16F723"/>
         <xs:enumeration value="PIC16F723A"/>
         <xs:enumeration value="PIC16F724"/>
         <xs:enumeration value="PIC16F726"/>
         <xs:enumeration value="PIC16F727"/>
         <xs:enumeration value="PIC16F73"/>
         <xs:enumeration value="PIC16F737"/>
         <xs:enumeration value="PIC16F74"/>
         <xs:enumeration value="PIC16F747"/>
         <xs:enumeration value="PIC16F76"/>
         <xs:enumeration value="PIC16F767"/>
         <xs:enumeration value="PIC16F77"/>
         <xs:enumeration value="PIC16F777"/>
         <xs:enumeration value="PIC16F785"/>
         <xs:enumeration value="PIC16F818"/>
         <xs:enumeration value="PIC16F819"/>
         <xs:enumeration value="PIC16F83"/>
         <xs:enumeration value="PIC16F84"/>
         <xs:enumeration value="PIC16F84A"/>
         <xs:enumeration value="PIC16F87"/>
         <xs:enumeration value="PIC16F870"/>
         <xs:enumeration value="PIC16F871"/>
         <xs:enumeration value="PIC16F872"/>
         <xs:enumeration value="PIC16F873"/>
         <xs:enumeration value="PIC16F873A"/>
         <xs:enumeration value="PIC16F874"/>
         <xs:enumeration value="PIC16F874A"/>
         <xs:enumeration value="PIC16F876"/>
         <xs:enumeration value="PIC16F876A"/>
         <xs:enumeration value="PIC16F877"/>
         <xs:enumeration value="PIC16F877A"/>
         <xs:enumeration value="PIC16F88"/>
         <xs:enumeration value="PIC16F882"/>
         <xs:enumeration value="PIC16F883"/>
         <xs:enumeration value="PIC16F884"/>
         <xs:enumeration value="PIC16F886"/>
         <xs:enumeration value="PIC16F887"/>
         <xs:enumeration value="PIC16F913"/>
         <xs:enumeration value="PIC16F914"/>
         <xs:enumeration value="PIC16F916"/>
         <xs:enumeration value="PIC16F917"/>
         <xs:enumeration value="PIC16F946"/>
         <xs:enumeration value="PIC16F1823"/>
         <xs:enumeration value="PIC16F1824"/>
         <xs:enumeration value="PIC16F1825"/>
         <xs:enumeration value="PIC16F1826"/>
         <xs:enumeration value="PIC16F1827"/>
         <xs:enumeration value="PIC16F1828"/>
         <xs:enumeration value="PIC16F1829"/>
         
         <xs:enumeration value="PIC16LF707"/>
         <xs:enumeration value="PIC16LF720"/>
         <xs:enumeration value="PIC16LF721"/>
         <xs:enumeration value="PIC16LF722"/>
         <xs:enumeration value="PIC16LF722A"/>
         <xs:enumeration value="PIC16LF723"/>
         <xs:enumeration value="PIC16LF723A"/>
         <xs:enumeration value="PIC16LF724"/>
         <xs:enumeration value="PIC16LF726"/>         
         <xs:enumeration value="PIC16LF727"/>
         <xs:enumeration value="PIC16LF1823"/>
         <xs:enumeration value="PIC16LF1824"/>
         <xs:enumeration value="PIC16LF1825"/>
         <xs:enumeration value="PIC16LF1826"/>
         <xs:enumeration value="PIC16LF1827"/>
         <xs:enumeration value="PIC16LF1828"/>
         <xs:enumeration value="PIC16LF1829"/>
         <xs:enumeration value="PIC16F1933"/>
         <xs:enumeration value="PIC16F1934"/>
         <xs:enumeration value="PIC16F1936"/>
         <xs:enumeration value="PIC16F1937"/>
         <xs:enumeration value="PIC16F1938"/>
         <xs:enumeration value="PIC16F1939"/>
         <xs:enumeration value="PIC16F1946"/>
         <xs:enumeration value="PIC16F1947"/>
         <xs:enumeration value="PIC16LF1933"/>
         <xs:enumeration value="PIC16LF1934"/>
         <xs:enumeration value="PIC16LF1936"/>
         <xs:enumeration value="PIC16LF1937"/>
         <xs:enumeration value="PIC16LF1938"/>
         <xs:enumeration value="PIC16LF1939"/>
         <xs:enumeration value="PIC16LF1946"/>
         <xs:enumeration value="PIC16LF1947"/>
         
         <xs:enumeration value="PIC16HV610"/>
         <xs:enumeration value="PIC16HV616"/>
         <xs:enumeration value="PIC16HV785"/>
         
         <xs:enumeration value="PIC18C601"/>
         <xs:enumeration value="PIC18C801"/>
         
         <xs:enumeration value="PIC18F1220"/>
         <xs:enumeration value="PIC18F1230"/>
         <xs:enumeration value="PIC18F1320"/>
         <xs:enumeration value="PIC18F1330"/>
         <xs:enumeration value="PIC18F13K22"/>
         <xs:enumeration value="PIC18F13K50"/>
         <xs:enumeration value="PIC18F14K22"/>
         <xs:enumeration value="PIC18F14K50"/>
         <xs:enumeration value="PIC18F2220"/>
         <xs:enumeration value="PIC18F2221"/>
         <xs:enumeration value="PIC18F2320"/>
         <xs:enumeration value="PIC18F2321"/>
         <xs:enumeration value="PIC18F2331"/>
         <xs:enumeration value="PIC18F2410"/>
         <xs:enumeration value="PIC18F242"/>
         <xs:enumeration value="PIC18F2420"/>
         <xs:enumeration value="PIC18F2423"/>
         <xs:enumeration value="PIC18F2431"/>
         <xs:enumeration value="PIC18F2439"/>
         <xs:enumeration value="PIC18F2450"/>
         <xs:enumeration value="PIC18F2455"/>
         <xs:enumeration value="PIC18F2458"/>
         <xs:enumeration value="PIC18F248"/>
         <xs:enumeration value="PIC18F2480"/>
         <xs:enumeration value="PIC18F24J10"/>
         <xs:enumeration value="PIC18F24J11"/>
         <xs:enumeration value="PIC18F24J50"/>
         <xs:enumeration value="PIC18F23K20"/>
         <xs:enumeration value="PIC18F23K22"/>
         <xs:enumeration value="PIC18F24K20"/>
         <xs:enumeration value="PIC18F24K22"/>
         <xs:enumeration value="PIC18F2510"/>
         <xs:enumeration value="PIC18F2515"/>
         <xs:enumeration value="PIC18F252"/>
         <xs:enumeration value="PIC18F2520"/>
         <xs:enumeration value="PIC18F2523"/>
         <xs:enumeration value="PIC18F2525"/>
         <xs:enumeration value="PIC18F2539"/>
         <xs:enumeration value="PIC18F2550"/>
         <xs:enumeration value="PIC18F2553"/>
         <xs:enumeration value="PIC18F258"/>
         <xs:enumeration value="PIC18F2580"/>
         <xs:enumeration value="PIC18F2585"/>
         <xs:enumeration value="PIC18F25J10"/>
         <xs:enumeration value="PIC18F25J11"/>
         <xs:enumeration value="PIC18F25J50"/>
         <xs:enumeration value="PIC18F25K20"/>
         <xs:enumeration value="PIC18F25K22"/>
         <xs:enumeration value="PIC18F25K80"/>
         <xs:enumeration value="PIC18F2610"/>
         <xs:enumeration value="PIC18F2620"/>
         <xs:enumeration value="PIC18F2680"/>
         <xs:enumeration value="PIC18F2682"/>
         <xs:enumeration value="PIC18F2685"/>
         <xs:enumeration value="PIC18F26J11"/>
         <xs:enumeration value="PIC18F26J13"/>
         <xs:enumeration value="PIC18F26J50"/>
         <xs:enumeration value="PIC18F26J53"/>
         <xs:enumeration value="PIC18F26K20"/>
         <xs:enumeration value="PIC18F26K22"/>
         <xs:enumeration value="PIC18F26K80"/>
         <xs:enumeration value="PIC18F27J13"/>
         <xs:enumeration value="PIC18F27J53"/>
         <xs:enumeration value="PIC18F4220"/>
         <xs:enumeration value="PIC18F4221"/>
         <xs:enumeration value="PIC18F4320"/>
         <xs:enumeration value="PIC18F4321"/>
         <xs:enumeration value="PIC18F4331"/>
         <xs:enumeration value="PIC18F4410"/>
         <xs:enumeration value="PIC18F442"/>
         <xs:enumeration value="PIC18F4420"/>
         <xs:enumeration value="PIC18F4423"/>
         <xs:enumeration value="PIC18F4431"/>
         <xs:enumeration value="PIC18F4439"/>
         <xs:enumeration value="PIC18F4450"/>
         <xs:enumeration value="PIC18F4455"/>
         <xs:enumeration value="PIC18F4458"/>
         <xs:enumeration value="PIC18F448"/>
         <xs:enumeration value="PIC18F4480"/>
         <xs:enumeration value="PIC18F44J10"/>
         <xs:enumeration value="PIC18F44J11"/>
         <xs:enumeration value="PIC18F44J50"/>
         <xs:enumeration value="PIC18F43K20"/>
         <xs:enumeration value="PIC18F43K22"/>
         <xs:enumeration value="PIC18F44K20"/>
         <xs:enumeration value="PIC18F44K22"/>
         <xs:enumeration value="PIC18F4510"/>
         <xs:enumeration value="PIC18F4515"/>
         <xs:enumeration value="PIC18F452"/>
         <xs:enumeration value="PIC18F4520"/>
         <xs:enumeration value="PIC18F4523"/>
         <xs:enumeration value="PIC18F4525"/>
         <xs:enumeration value="PIC18F4539"/>
         <xs:enumeration value="PIC18F4550"/>
         <xs:enumeration value="PIC18F4553"/>
         <xs:enumeration value="PIC18F458"/>
         <xs:enumeration value="PIC18F4580"/>
         <xs:enumeration value="PIC18F4585"/>
         <xs:enumeration value="PIC18F45J10"/>
         <xs:enumeration value="PIC18F45J11"/>
         <xs:enumeration value="PIC18F45J50"/>
         <xs:enumeration value="PIC18F45K20"/>
         <xs:enumeration value="PIC18F45K22"/>
         <xs:enumeration value="PIC18F45K80"/>
         <xs:enumeration value="PIC18F4610"/>
         <xs:enumeration value="PIC18F4620"/>
         <xs:enumeration value="PIC18F4680"/>
         <xs:enumeration value="PIC18F4682"/>
         <xs:enumeration value="PIC18F4685"/>
         <xs:enumeration value="PIC18F46J11"/>
         <xs:enumeration value="PIC18F46J13"/>
         <xs:enumeration value="PIC18F46J50"/>
         <xs:enumeration value="PIC18F46J53"/>
         <xs:enumeration value="PIC18F46K20"/>
         <xs:enumeration value="PIC18F46K22"/>
         <xs:enumeration value="PIC18F46K80"/>
         <xs:enumeration value="PIC18F47J13"/>
         <xs:enumeration value="PIC18F47J53"/>
         <xs:enumeration value="PIC18F6310"/>
         <xs:enumeration value="PIC18F6313"/>
         <xs:enumeration value="PIC18F6390"/>
         <xs:enumeration value="PIC18F6393"/>
         <xs:enumeration value="PIC18F63J11"/>
         <xs:enumeration value="PIC18F63J90"/>
         <xs:enumeration value="PIC18F6410"/>
         <xs:enumeration value="PIC18F6413"/>
         <xs:enumeration value="PIC18F6490"/>
         <xs:enumeration value="PIC18F6493"/>
         <xs:enumeration value="PIC18F64J11"/>
         <xs:enumeration value="PIC18F64J90"/>
         <xs:enumeration value="PIC18F6520"/>
         <xs:enumeration value="PIC18F6525"/>
         <xs:enumeration value="PIC18F6527"/>
         <xs:enumeration value="PIC18F6585"/>
         <xs:enumeration value="PIC18F65J10"/>
         <xs:enumeration value="PIC18F65J11"/>
         <xs:enumeration value="PIC18F65J15"/>
         <xs:enumeration value="PIC18F65J50"/>
         <xs:enumeration value="PIC18F65J90"/>
         <xs:enumeration value="PIC18F65K80"/>
         <xs:enumeration value="PIC18F6620"/>
         <xs:enumeration value="PIC18F6621"/>
         <xs:enumeration value="PIC18F6622"/>
         <xs:enumeration value="PIC18F6627"/>
         <xs:enumeration value="PIC18F6628"/>
         <xs:enumeration value="PIC18F6680"/>
         <xs:enumeration value="PIC18F66J10"/>
         <xs:enumeration value="PIC18F66J11"/>
         <xs:enumeration value="PIC18F66J15"/>
         <xs:enumeration value="PIC18F66J16"/>
         <xs:enumeration value="PIC18F66J50"/>
         <xs:enumeration value="PIC18F66J55"/>
         <xs:enumeration value="PIC18F66J60"/>
         <xs:enumeration value="PIC18F66J65"/>
         <xs:enumeration value="PIC18F66J90"/>
         <xs:enumeration value="PIC18F66J93"/>
         <xs:enumeration value="PIC18F66K80"/>
         <xs:enumeration value="PIC18F6720"/>
         <xs:enumeration value="PIC18F6722"/>
         <xs:enumeration value="PIC18F6723"/>
         <xs:enumeration value="PIC18F67J10"/>
         <xs:enumeration value="PIC18F67J11"/>
         <xs:enumeration value="PIC18F67J50"/>
         <xs:enumeration value="PIC18F67J60"/>
         <xs:enumeration value="PIC18F67J90"/>
         <xs:enumeration value="PIC18F67J93"/>
         <xs:enumeration value="PIC18F8310"/>
         <xs:enumeration value="PIC18F8313"/>
         <xs:enumeration value="PIC18F8390"/>
         <xs:enumeration value="PIC18F8393"/>
         <xs:enumeration value="PIC18F83J11"/>
         <xs:enumeration value="PIC18F83J90"/>
         <xs:enumeration value="PIC18F8410"/>
         <xs:enumeration value="PIC18F8413"/>
         <xs:enumeration value="PIC18F8490"/>
         <xs:enumeration value="PIC18F8493"/>
         <xs:enumeration value="PIC18F8493"/>
         <xs:enumeration value="PIC18F84J11"/>
         <xs:enumeration value="PIC18F84J90"/>
         <xs:enumeration value="PIC18F8520"/>
         <xs:enumeration value="PIC18F8525"/>
         <xs:enumeration value="PIC18F8527"/>
         <xs:enumeration value="PIC18F8585"/>
         <xs:enumeration value="PIC18F85J10"/>
         <xs:enumeration value="PIC18F85J11"/>
         <xs:enumeration value="PIC18F85J15"/>
         <xs:enumeration value="PIC18F85J50"/>
         <xs:enumeration value="PIC18F85J90"/>
         <xs:enumeration value="PIC18F8620"/>
         <xs:enumeration value="PIC18F8621"/>
         <xs:enumeration value="PIC18F8622"/>
         <xs:enumeration value="PIC18F8627"/>
         <xs:enumeration value="PIC18F8628"/>
         <xs:enumeration value="PIC18F8680"/>
         <xs:enumeration value="PIC18F86J10"/>
         <xs:enumeration value="PIC18F86J11"/>
         <xs:enumeration value="PIC18F86J15"/>
         <xs:enumeration value="PIC18F86J16"/>
         <xs:enumeration value="PIC18F86J50"/>
         <xs:enumeration value="PIC18F86J55"/>
         <xs:enumeration value="PIC18F86J60"/>
         <xs:enumeration value="PIC18F86J65"/>
         <xs:enumeration value="PIC18F86J90"/>
         <xs:enumeration value="PIC18F86J93"/>
         <xs:enumeration value="PIC18F8720"/>
         <xs:enumeration value="PIC18F8722"/>
         <xs:enumeration value="PIC18F8723"/>
         <xs:enumeration value="PIC18F87J10"/>
         <xs:enumeration value="PIC18F87J11"/>
         <xs:enumeration value="PIC18F87J50"/>
         <xs:enumeration value="PIC18F87J60"/>
         <xs:enumeration value="PIC18F87J90"/>
         <xs:enumeration value="PIC18F87J93"/>
         <xs:enumeration value="PIC18F97J72"/>
         <xs:enumeration value="PIC18F96J72"/>
         <xs:enumeration value="PIC18F87J72"/>
         <xs:enumeration value="PIC18F86J72"/>
         <xs:enumeration value="PIC18F96J60"/>
         <xs:enumeration value="PIC18F96J65"/>
         <xs:enumeration value="PIC18F97J60"/>
         <xs:enumeration value="PIC18F65K22"/>
         <xs:enumeration value="PIC18F65K90"/>
         <xs:enumeration value="PIC18F66K22"/>
         <xs:enumeration value="PIC18F66K27"/>
         <xs:enumeration value="PIC18F66K90"/>
         <xs:enumeration value="PIC18F66K95"/>
         <xs:enumeration value="PIC18F67K22"/>
         <xs:enumeration value="PIC18F67K90"/>
         <xs:enumeration value="PIC18F85K22"/>
         <xs:enumeration value="PIC18F85K90"/>
         <xs:enumeration value="PIC18F86K22"/>
         <xs:enumeration value="PIC18F86K27"/>
         <xs:enumeration value="PIC18F86K90"/>
         <xs:enumeration value="PIC18F86K95"/>
         <xs:enumeration value="PIC18F87K22"/>
         <xs:enumeration value="PIC18F87K90"/>
         
         <xs:enumeration value="PIC18LF13K22"/>
         <xs:enumeration value="PIC18LF13K50"/>
         <xs:enumeration value="PIC18LF14K22"/>
         <xs:enumeration value="PIC18LF14K50"/>
         <xs:enumeration value="PIC18LF25K22"/>
         <xs:enumeration value="PIC18LF23K22"/>
         <xs:enumeration value="PIC18LF24J10"/>
         <xs:enumeration value="PIC18LF24J11"/>
         <xs:enumeration value="PIC18LF24K22"/>
         <xs:enumeration value="PIC18LF24J50"/>
         <xs:enumeration value="PIC18LF25J10"/>
         <xs:enumeration value="PIC18LF25J11"/>
         <xs:enumeration value="PIC18LF25J50"/>
         <xs:enumeration value="PIC18LF25K80"/>
         <xs:enumeration value="PIC18LF26J11"/>
         <xs:enumeration value="PIC18LF26J13"/>
         <xs:enumeration value="PIC18LF26J50"/>
         <xs:enumeration value="PIC18LF26J53"/>
         <xs:enumeration value="PIC18LF26K22"/>
         <xs:enumeration value="PIC18LF26K80"/>
         <xs:enumeration value="PIC18LF27J13"/>
         <xs:enumeration value="PIC18LF27J53"/>
         <xs:enumeration value="PIC18LF43K22"/>
         <xs:enumeration value="PIC18LF44J10"/>
         <xs:enumeration value="PIC18LF44J11"/>
         <xs:enumeration value="PIC18LF44K22"/>
         <xs:enumeration value="PIC18LF44J50"/>
         <xs:enumeration value="PIC18LF45J10"/>
         <xs:enumeration value="PIC18LF45J11"/>
         <xs:enumeration value="PIC18LF45K22"/>
         <xs:enumeration value="PIC18LF45J50"/>
         <xs:enumeration value="PIC18LF45K80"/>
         <xs:enumeration value="PIC18LF46J11"/>
         <xs:enumeration value="PIC18LF46J53"/>
         <xs:enumeration value="PIC18LF46J13"/>
         <xs:enumeration value="PIC18LF46J50"/>
         <xs:enumeration value="PIC18LF46K22"/>
         <xs:enumeration value="PIC18LF46K80"/>
         <xs:enumeration value="PIC18LF47J13"/>
         <xs:enumeration value="PIC18LF47J53"/>
         <xs:enumeration value="PIC18LF65K80"/>
         <xs:enumeration value="PIC18LF66K80"/>
         
         <xs:enumeration value="PIC24F04KA200"/>
         <xs:enumeration value="PIC24F04KA201"/>
         <xs:enumeration value="PIC24F08KA101"/>
         <xs:enumeration value="PIC24F08KA102"/>
         <xs:enumeration value="PIC24F16KA301"/>
         <xs:enumeration value="PIC24F16KA302"/>
         <xs:enumeration value="PIC24F16KA304"/>
         <xs:enumeration value="PIC24F32KA301"/>
         <xs:enumeration value="PIC24F32KA302"/>
         <xs:enumeration value="PIC24F32KA304"/>

         <xs:enumeration value="PIC24FV04KA200"/>
         <xs:enumeration value="PIC24FV04KA201"/>
         <xs:enumeration value="PIC24FV08KA101"/>
         <xs:enumeration value="PIC24FV08KA102"/>
         <xs:enumeration value="PIC24FV16KA301"/>
         <xs:enumeration value="PIC24FV16KA302"/>
         <xs:enumeration value="PIC24FV16KA304"/>
         <xs:enumeration value="PIC24FV32KA301"/>
         <xs:enumeration value="PIC24FV32KA302"/>
         <xs:enumeration value="PIC24FV32KA304"/>
         
         <xs:enumeration value="PIC24LF16KA301"/>
         <xs:enumeration value="PIC24LF16KA302"/>
         <xs:enumeration value="PIC24LF16KA304"/>
         <xs:enumeration value="PIC24LF32KA301"/>
         <xs:enumeration value="PIC24LF32KA302"/>
         <xs:enumeration value="PIC24LF32KA304"/>
         
         <xs:enumeration value="PIC24LFV16KA301"/>
         <xs:enumeration value="PIC24LFV16KA302"/>
         <xs:enumeration value="PIC24LFV16KA304"/>
         <xs:enumeration value="PIC24LFV32KA301"/>
         <xs:enumeration value="PIC24LFV32KA302"/>
         <xs:enumeration value="PIC24LFV32KA304"/>
         
         <xs:enumeration value="PIC24FJ128GA006"/>
         <xs:enumeration value="PIC24FJ128GA008"/>
         <xs:enumeration value="PIC24FJ128GA010"/>
         <xs:enumeration value="PIC24FJ32GA102"/>
         <xs:enumeration value="PIC24FJ32GA104"/>
         <xs:enumeration value="PIC24FJ64GA102"/>
         <xs:enumeration value="PIC24FJ64GA104"/>
         <xs:enumeration value="PIC24FJ32GB002"/>
         <xs:enumeration value="PIC24FJ32GB004"/>
         <xs:enumeration value="PIC24FJ64GB002"/>                           
         <xs:enumeration value="PIC24FJ64GB004"/>
         <xs:enumeration value="PIC24FJ16GA002"/>
         <xs:enumeration value="PIC24FJ16GA004"/>
         <xs:enumeration value="PIC24F16KA101"/>
         <xs:enumeration value="PIC24F16KA102"/>
         <xs:enumeration value="PIC24FJ32GA002"/>
         <xs:enumeration value="PIC24FJ32GA004"/>
         <xs:enumeration value="PIC24F32KA101"/>
         <xs:enumeration value="PIC24F32KA102"/>
         <xs:enumeration value="PIC24FJ48GA002"/>
         <xs:enumeration value="PIC24FJ48GA004"/>
         <xs:enumeration value="PIC24FJ64GA002"/>
         <xs:enumeration value="PIC24FJ64GA004"/>
         <xs:enumeration value="PIC24FJ64GA006"/>
         <xs:enumeration value="PIC24FJ64GA008"/>
         <xs:enumeration value="PIC24FJ64GA010"/>
         <xs:enumeration value="PIC24FJ96GA006"/>
         <xs:enumeration value="PIC24FJ96GA008"/>
         <xs:enumeration value="PIC24FJ96GA010"/>
         <xs:enumeration value="PIC24FJ64GA106"/>
         <xs:enumeration value="PIC24FJ128GA106"/>
         <xs:enumeration value="PIC24FJ192GA106"/>
         <xs:enumeration value="PIC24FJ256GA106"/>
         <xs:enumeration value="PIC24FJ64GA108"/>
         <xs:enumeration value="PIC24FJ128GA108"/>
         <xs:enumeration value="PIC24FJ192GA108"/>
         <xs:enumeration value="PIC24FJ256GA108"/>
         <xs:enumeration value="PIC24FJ64GA110"/>
         <xs:enumeration value="PIC24FJ128GA110"/>
         <xs:enumeration value="PIC24FJ192GA110"/>
         <xs:enumeration value="PIC24FJ256GA110"/>
         <xs:enumeration value="PIC24FJ64GB106"/>
         <xs:enumeration value="PIC24FJ128GB106"/>
         <xs:enumeration value="PIC24FJ192GB106"/>
         <xs:enumeration value="PIC24FJ256GB106"/>
         <xs:enumeration value="PIC24FJ64GB108"/>
         <xs:enumeration value="PIC24FJ128GB108"/>
         <xs:enumeration value="PIC24FJ192GB108"/>
         <xs:enumeration value="PIC24FJ256GB108"/>
         <xs:enumeration value="PIC24FJ64GB110"/>
         <xs:enumeration value="PIC24FJ128GB110"/>
         <xs:enumeration value="PIC24FJ192GB110"/>
         <xs:enumeration value="PIC24FJ256GB110"/>
         <xs:enumeration value="PIC24FJ256DA210"/>
         <xs:enumeration value="PIC24FJ256DA206"/>
         <xs:enumeration value="PIC24FJ256DA110"/>
         <xs:enumeration value="PIC24FJ256DA106"/>
         <xs:enumeration value="PIC24FJ128DA210"/>
         <xs:enumeration value="PIC24FJ128DA206"/>
         <xs:enumeration value="PIC24FJ128DA110"/>
         <xs:enumeration value="PIC24FJ128DA106"/>
         <xs:enumeration value="PIC24FJ256GB210"/>
         <xs:enumeration value="PIC24FJ256GB206"/>
         <xs:enumeration value="PIC24FJ128GB210"/>
         <xs:enumeration value="PIC24FJ128GB206"/>
         
         <xs:enumeration value="PIC24HJ12GP201"/>
         <xs:enumeration value="PIC24HJ12GP202"/>
         <xs:enumeration value="PIC24HJ16GP304"/>
         <xs:enumeration value="PIC24HJ32GP202"/>
         <xs:enumeration value="PIC24HJ32GP204"/>
         <xs:enumeration value="PIC24HJ32GP302"/>
         <xs:enumeration value="PIC24HJ32GP304"/>
         <xs:enumeration value="PIC24HJ128GP202"/>
         <xs:enumeration value="PIC24HJ128GP204"/>
         <xs:enumeration value="PIC24HJ128GP206"/>
         <xs:enumeration value="PIC24HJ128GP206A"/>
         <xs:enumeration value="PIC24HJ128GP210"/>
         <xs:enumeration value="PIC24HJ128GP210A"/>
         <xs:enumeration value="PIC24HJ128GP306"/>
         <xs:enumeration value="PIC24HJ128GP306A"/>
         <xs:enumeration value="PIC24HJ128GP310"/>
         <xs:enumeration value="PIC24HJ128GP310A"/>
         <xs:enumeration value="PIC24HJ128GP502"/>
         <xs:enumeration value="PIC24HJ128GP504"/>
         <xs:enumeration value="PIC24HJ128GP506"/>
         <xs:enumeration value="PIC24HJ128GP506A"/>
         <xs:enumeration value="PIC24HJ128GP510"/>
         <xs:enumeration value="PIC24HJ128GP510A"/>
         <xs:enumeration value="PIC24HJ256GP206"/>
         <xs:enumeration value="PIC24HJ256GP206A"/>
         <xs:enumeration value="PIC24HJ256GP210"/>
         <xs:enumeration value="PIC24HJ256GP210A"/>
         <xs:enumeration value="PIC24HJ256GP610"/>
         <xs:enumeration value="PIC24HJ256GP610A"/>
         <xs:enumeration value="PIC24HJ64GP202"/>
         <xs:enumeration value="PIC24HJ64GP204"/>
         <xs:enumeration value="PIC24HJ64GP206"/>
         <xs:enumeration value="PIC24HJ64GP206A"/>
         <xs:enumeration value="PIC24HJ64GP210"/>
         <xs:enumeration value="PIC24HJ64GP210A"/>
         <xs:enumeration value="PIC24HJ64GP502"/>
         <xs:enumeration value="PIC24HJ64GP504"/>
         <xs:enumeration value="PIC24HJ64GP506"/>
         <xs:enumeration value="PIC24HJ64GP506A"/>
         <xs:enumeration value="PIC24HJ64GP510"/>
         <xs:enumeration value="PIC24HJ64GP510A"/>
         
         <xs:enumeration value="PIC32MX320F032H"/>
         <xs:enumeration value="PIC32MX320F064H"/>
         <xs:enumeration value="PIC32MX320F128H"/>
         <xs:enumeration value="PIC32MX320F128L"/>
         <xs:enumeration value="PIC32MX340F128H"/>
         <xs:enumeration value="PIC32MX340F128L"/>
         <xs:enumeration value="PIC32MX340F256H"/>
         <xs:enumeration value="PIC32MX340F512H"/>
         <xs:enumeration value="PIC32MX360F256L"/>
         <xs:enumeration value="PIC32MX360F512L"/>
         <xs:enumeration value="PIC32MX420F032H"/>
         <xs:enumeration value="PIC32MX440F128H"/>
         <xs:enumeration value="PIC32MX440F128L"/>
         <xs:enumeration value="PIC32MX440F256H"/>
         <xs:enumeration value="PIC32MX440F512H"/>
         <xs:enumeration value="PIC32MX460F256L"/>
         <xs:enumeration value="PIC32MX460F512L"/>
         
         <xs:enumeration value="PS200"/>
         <xs:enumeration value="PS500"/>
         <xs:enumeration value="PS810"/>
         
         <xs:enumeration value="dsPIC30F1010"/>
         <xs:enumeration value="dsPIC30F2010"/>
         <xs:enumeration value="dsPIC30F2011"/>
         <xs:enumeration value="dsPIC30F2012"/>
         <xs:enumeration value="dsPIC30F2020"/>
         <xs:enumeration value="dsPIC30F2023"/>
         <xs:enumeration value="dsPIC30F3010"/>
         <xs:enumeration value="dsPIC30F3011"/>
         <xs:enumeration value="dsPIC30F3012"/>
         <xs:enumeration value="dsPIC30F3013"/>
         <xs:enumeration value="dsPIC30F3014"/>
         <xs:enumeration value="dsPIC30F4011"/>
         <xs:enumeration value="dsPIC30F4012"/>
         <xs:enumeration value="dsPIC30F4013"/>
         <xs:enumeration value="dsPIC30F5011"/>
         <xs:enumeration value="dsPIC30F5013"/>
         <xs:enumeration value="dsPIC30F5015"/>
         <xs:enumeration value="dsPIC30F5016"/>
         <xs:enumeration value="dsPIC30F6010"/>
         <xs:enumeration value="dsPIC30F6010A"/>
         <xs:enumeration value="dsPIC30F6011"/>
         <xs:enumeration value="dsPIC30F6011A"/>
         <xs:enumeration value="dsPIC30F6012"/>
         <xs:enumeration value="dsPIC30F6012A"/>
         <xs:enumeration value="dsPIC30F6013"/>
         <xs:enumeration value="dsPIC30F6013A"/>
         <xs:enumeration value="dsPIC30F6014"/>
         <xs:enumeration value="dsPIC30F6014A"/>
         <xs:enumeration value="dsPIC30F6015"/>
         
         <xs:enumeration value="dsPIC33FJ06GS101"/>
         <xs:enumeration value="dsPIC33FJ06GS102"/>
         <xs:enumeration value="dsPIC33FJ06GS202"/>
         <xs:enumeration value="dsPIC33FJ12GP201"/>
         <xs:enumeration value="dsPIC33FJ12GP202"/>
         <xs:enumeration value="dsPIC33FJ12MC201"/>
         <xs:enumeration value="dsPIC33FJ12MC202"/>
         <xs:enumeration value="dsPIC33FJ16GP304"/>
         <xs:enumeration value="dsPIC33FJ16GS402"/>
         <xs:enumeration value="dsPIC33FJ16GS404"/>
         <xs:enumeration value="dsPIC33FJ16GS502"/>
         <xs:enumeration value="dsPIC33FJ16GS504"/>
         <xs:enumeration value="dsPIC33FJ32GS406"/>
         <xs:enumeration value="dsPIC33FJ64GS406"/>
         <xs:enumeration value="dsPIC33FJ32GS606"/>
         <xs:enumeration value="dsPIC33FJ64GS606"/>
         <xs:enumeration value="dsPIC33FJ32GS608"/>
         <xs:enumeration value="dsPIC33FJ64GS608"/>
         <xs:enumeration value="dsPIC33FJ32GS610"/>
         <xs:enumeration value="dsPIC33FJ64GS610"/>
         <xs:enumeration value="dsPIC33FJ16MC304"/>
         <xs:enumeration value="dsPIC33FJ32GP202"/>
         <xs:enumeration value="dsPIC33FJ32GP204"/>
         <xs:enumeration value="dsPIC33FJ32GP302"/>
         <xs:enumeration value="dsPIC33FJ32GP304"/>
         <xs:enumeration value="dsPIC33FJ32MC202"/>
         <xs:enumeration value="dsPIC33FJ32MC204"/>
         <xs:enumeration value="dsPIC33FJ32MC302"/>
         <xs:enumeration value="dsPIC33FJ32MC304"/>
         <xs:enumeration value="dsPIC33FJ128GP202"/>
         <xs:enumeration value="dsPIC33FJ128GP204"/>
         <xs:enumeration value="dsPIC33FJ128GP206"/>
         <xs:enumeration value="dsPIC33FJ128GP206A"/>
         <xs:enumeration value="dsPIC33FJ128GP306"/>
         <xs:enumeration value="dsPIC33FJ128GP306A"/>
         <xs:enumeration value="dsPIC33FJ128GP310"/>
         <xs:enumeration value="dsPIC33FJ128GP310A"/>
         <xs:enumeration value="dsPIC33FJ128GP706"/>
         <xs:enumeration value="dsPIC33FJ128GP706A"/>
         <xs:enumeration value="dsPIC33FJ128GP708"/>
         <xs:enumeration value="dsPIC33FJ128GP708A"/>
         <xs:enumeration value="dsPIC33FJ128GP710"/>
         <xs:enumeration value="dsPIC33FJ128GP710A"/>
         <xs:enumeration value="dsPIC33FJ128GP802"/>
         <xs:enumeration value="dsPIC33FJ128GP804"/>
         <xs:enumeration value="dsPIC33FJ128MC202"/>
         <xs:enumeration value="dsPIC33FJ128MC204"/>
         <xs:enumeration value="dsPIC33FJ128MC506"/>
         <xs:enumeration value="dsPIC33FJ128MC506A"/>
         <xs:enumeration value="dsPIC33FJ128MC510"/>
         <xs:enumeration value="dsPIC33FJ128MC510A"/>
         <xs:enumeration value="dsPIC33FJ128MC706"/>
         <xs:enumeration value="dsPIC33FJ128MC706A"/>
         <xs:enumeration value="dsPIC33FJ128MC708"/>
         <xs:enumeration value="dsPIC33FJ128MC708A"/>
         <xs:enumeration value="dsPIC33FJ128MC710"/>
         <xs:enumeration value="dsPIC33FJ128MC710A"/>
         <xs:enumeration value="dsPIC33FJ128MC802"/>
         <xs:enumeration value="dsPIC33FJ128MC804"/>
         <xs:enumeration value="dsPIC33FJ256GP506"/>
         <xs:enumeration value="dsPIC33FJ256GP506A"/>
         <xs:enumeration value="dsPIC33FJ256GP510"/>
         <xs:enumeration value="dsPIC33FJ256GP510A"/>
         <xs:enumeration value="dsPIC33FJ256GP710"/>
         <xs:enumeration value="dsPIC33FJ256GP710A"/>
         <xs:enumeration value="dsPIC33FJ256MC510"/>
         <xs:enumeration value="dsPIC33FJ256MC510A"/>
         <xs:enumeration value="dsPIC33FJ256MC710"/>
         <xs:enumeration value="dsPIC33FJ256MC710A"/>
         <xs:enumeration value="dsPIC33FJ64GP202"/>
         <xs:enumeration value="dsPIC33FJ64GP204"/>
         <xs:enumeration value="dsPIC33FJ64GP206"/>
         <xs:enumeration value="dsPIC33FJ64GP206A"/>
         <xs:enumeration value="dsPIC33FJ64GP306"/>
         <xs:enumeration value="dsPIC33FJ64GP306A"/>
         <xs:enumeration value="dsPIC33FJ64GP310"/>
         <xs:enumeration value="dsPIC33FJ64GP310A"/>
         <xs:enumeration value="dsPIC33FJ64GP706"/>
         <xs:enumeration value="dsPIC33FJ64GP706A"/>
         <xs:enumeration value="dsPIC33FJ64GP708"/>
         <xs:enumeration value="dsPIC33FJ64GP708A"/>
         <xs:enumeration value="dsPIC33FJ64GP710"/>
         <xs:enumeration value="dsPIC33FJ64GP710A"/>
         <xs:enumeration value="dsPIC33FJ64GP802"/>
         <xs:enumeration value="dsPIC33FJ64GP804"/>
         <xs:enumeration value="dsPIC33FJ64MC202"/>
         <xs:enumeration value="dsPIC33FJ64MC204"/>
         <xs:enumeration value="dsPIC33FJ64MC506"/>
         <xs:enumeration value="dsPIC33FJ64MC506A"/>
         <xs:enumeration value="dsPIC33FJ64MC508"/>
         <xs:enumeration value="dsPIC33FJ64MC508A"/>
         <xs:enumeration value="dsPIC33FJ64MC510"/>
         <xs:enumeration value="dsPIC33FJ64MC510A"/>
         <xs:enumeration value="dsPIC33FJ64MC706"/>
         <xs:enumeration value="dsPIC33FJ64MC706A"/>
         <xs:enumeration value="dsPIC33FJ64MC710"/>
         <xs:enumeration value="dsPIC33FJ64MC710A"/>
         <xs:enumeration value="dsPIC33FJ64MC802"/>
         <xs:enumeration value="dsPIC33FJ64MC804"/>
         
         <xs:enumeration value="rfPIC12F675F"/>
         <xs:enumeration value="rfPIC12F675H"/>
         <xs:enumeration value="rfPIC12F675K"/>
         
         <xs:enumeration value="Daytona512"/>
         
         <xs:enumeration value="MCV20USB"/>
         <xs:enumeration value="MCV08A"/>
         <xs:enumeration value="MCV14A"/>
         <xs:enumeration value="MCV18A"/>
         <xs:enumeration value="MCV18E"/>
         <xs:enumeration value="MCV28A"/>
      </xs:restriction>
   </xs:simpleType>
   
   <!-- Firmware ID -->
   <xs:simpleType name="fwtype">
      <xs:annotation>
         <xs:documentation>
			An enumeration of all the firmwares we support
			Basically an extra check to make sure all fw ids are well formed
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:token">
         <xs:enumeration value="1"/>   <!-- 16F -->
         <!-- <xs:enumeration value="2"/> -->  <!-- 30FA2 -->
         <!-- <xs:enumeration value="3"/> -->  <!-- 30F -->
         <xs:enumeration value="4"/>   <!-- 18F -->
         <xs:enumeration value="5"/>   <!-- 18F_EGG -->
         <xs:enumeration value="6"/>   <!-- 18C -->
         <xs:enumeration value="7"/>   <!-- 12F -->
         <xs:enumeration value="8"/>   <!-- 16F_PS3 -->
         <xs:enumeration value="9"/>   <!-- BASE_MID_CALMEM -->
         <xs:enumeration value="10"/>  <!-- 30F_B1 -->
         <xs:enumeration value="11"/>  <!-- 18F_TSMC -->
         <xs:enumeration value="12"/>  <!-- LEGACY -->
         <xs:enumeration value="14"/>  <!-- 33F -->
         <xs:enumeration value="15"/>  <!-- 24F -->
         <xs:enumeration value="16"/>  <!-- 18FK -->
         <xs:enumeration value="17"/>  <!-- 30FPS -->
         <xs:enumeration value="18"/>  <!-- 30F2020 -->
         <xs:enumeration value="20"/>  <!-- Daytona -->
         <xs:enumeration value="21"/>  <!-- 24FK -->
         <xs:enumeration value="22"/>  <!-- Cooper -->
         <xs:enumeration value="23"/>  <!-- PIC12F520 -->
         <xs:enumeration value="24"/>  <!-- PIC24*DA* -->
      </xs:restriction>
   </xs:simpleType>
   
   <!-- Controller ID -->
   <xs:simpleType name="contid">
      <xs:annotation>
         <xs:documentation>
			The ICD2 controller handles functions which are specific
			to a given family of parts.  The various controllers are
			specialized (through inheritence) to handle different scenarios
			which arise due to different parts.  This type is used to
			specify which one of the controllers will be used 
			when dealing with a specific part
			  </xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:token">
         <xs:enumeration value="BASIC"/>
         <xs:enumeration value="12F"/>
         <xs:enumeration value="16F"/>
         <xs:enumeration value="16F505"/>
         <xs:enumeration value="16F506"/>
         <xs:enumeration value="16F526"/>
         <xs:enumeration value="16F62XA"/>
         <!-- <xs:enumeration value="16F716"/> -->
         <xs:enumeration value="16F72X"/>
         <xs:enumeration value="16FEv1"/>
         <xs:enumeration value="16FEv2"/>
         <xs:enumeration value="18C"/>
         <xs:enumeration value="18F"/>
         <xs:enumeration value="18FEgg"/>
         <xs:enumeration value="18Fxx31"/>
         <xs:enumeration value="18F_TSMC"/>
         <xs:enumeration value="18Fv2"/>
         <xs:enumeration value="24F"/>
         <xs:enumeration value="24F_KA"/>
         <xs:enumeration value="24Fv4"/>
         <xs:enumeration value="30F2020PS"/>
         <xs:enumeration value="30F"/>
         <xs:enumeration value="33F"/>
         <xs:enumeration value="33Fv4"/>
         <xs:enumeration value="DAYTONA"/>
      </xs:restriction>
   </xs:simpleType>
   
   <!-- Family -->
   <xs:simpleType name="familyid">
      <xs:annotation>
         <xs:documentation>
         This family id is passed to the firmware to help differentiate minor
         differences between parts processed by a given firmware
         </xs:documentation>
      </xs:annotation>
      <xs:restriction base="icd2:hex8">
         <xs:enumeration value="0x03"/>
         <xs:enumeration value="0x04"/>
         <xs:enumeration value="0x05"/>
         <xs:enumeration value="0x06"/>
         <xs:enumeration value="0x08"/>
         <xs:enumeration value="0x09"/>
         <xs:enumeration value="0x0A"/>
         <xs:enumeration value="0x0B"/>
         <xs:enumeration value="0x0C"/>
         <xs:enumeration value="0x0E"/>
         <xs:enumeration value="0x0F"/>
         <xs:enumeration value="0x10"/>
         <xs:enumeration value="0x11"/>
         <xs:enumeration value="0x12"/>
         <xs:enumeration value="0x14"/>
         <xs:enumeration value="0x15"/>
         <xs:enumeration value="0x18"/>
         <xs:enumeration value="0x19"/>
         <xs:enumeration value="0x1A"/>
         <xs:enumeration value="0x1B"/>
         <xs:enumeration value="0x1C"/>
         <xs:enumeration value="0x1D"/>
         <xs:enumeration value="0x1E"/>
         <xs:enumeration value="0x20"/>
         <xs:enumeration value="0x21"/>
         <xs:enumeration value="0x40"/>
         <xs:enumeration value="0x41"/>
         <xs:enumeration value="0x42"/>
         <xs:enumeration value="0x43"/>
         <xs:enumeration value="0x44"/>
         <xs:enumeration value="0x81"/>
         <xs:enumeration value="0x82"/>
         <xs:enumeration value="0x83"/>
         <xs:enumeration value="0x84"/>
         <xs:enumeration value="0x85"/>
         <xs:enumeration value="0x86"/>
         <xs:enumeration value="0x87"/>
         <xs:enumeration value="0x88"/>
         <xs:enumeration value="0x89"/>
         <xs:enumeration value="0x8A"/>
         <xs:enumeration value="0x8B"/>
         <xs:enumeration value="0x8C"/>
         <xs:enumeration value="0x8D"/>
         <xs:enumeration value="0x8E"/>
         <xs:enumeration value="0x8F"/>
         <xs:enumeration value="0x90"/>
         <xs:enumeration value="0x91"/>
         <xs:enumeration value="0x92"/>
         <xs:enumeration value="0x93"/>
         <xs:enumeration value="0x94"/>
         <xs:enumeration value="0x95"/>
         <xs:enumeration value="0x96"/>
         <xs:enumeration value="0x97"/>
         <xs:enumeration value="0x98"/>
         <xs:enumeration value="0x99"/>
         <xs:enumeration value="0x9A"/>
         <xs:enumeration value="0x9B"/>
         <xs:enumeration value="0x9C"/>         
         <xs:enumeration value="0x9D"/>         
         <xs:enumeration value="0x9E"/>         
         <xs:enumeration value="0x9F"/>         
         <xs:enumeration value="0xA0"/>         
         <xs:enumeration value="0xA1"/>         
         <xs:enumeration value="0xA2"/>         
         <xs:enumeration value="0xA3"/>         
         <xs:enumeration value="0xA4"/>         
         <xs:enumeration value="0xA5"/>         
         <xs:enumeration value="0xA6"/>         
         <xs:enumeration value="0xA7"/>         
         <xs:enumeration value="0xA9"/>         
         <xs:enumeration value="0xAA"/>         
         <xs:enumeration value="0xAB"/>         
         <xs:enumeration value="0xAC"/>         
         <xs:enumeration value="0xAD"/>         
         <xs:enumeration value="0xBB"/>
         <xs:enumeration value="0xDA"/>
      </xs:restriction>
   </xs:simpleType>
   
   <!-- Debug Executives -->
   <xs:simpleType name="debugexecid">
      <xs:annotation>
         <xs:documentation>
			An enumeration of all the debug executives
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:token">
         <xs:enumeration value="de12f629.hex"/>
         <xs:enumeration value="de12f635.hex"/>
         <xs:enumeration value="de16f505.hex"/>
         <xs:enumeration value="de16f506.hex"/>
         <xs:enumeration value="de16f631.hex"/>
         <xs:enumeration value="de16f648a.hex"/>
         <xs:enumeration value="de16f676.hex"/>
         <xs:enumeration value="de16f684.hex"/>
         <xs:enumeration value="de16f688.hex"/>
         <xs:enumeration value="de16f716.hex"/>
         <xs:enumeration value="de16f7x7.hex"/>
         <xs:enumeration value="de16f819.hex"/>
         <xs:enumeration value="de16f872.hex"/>
         <xs:enumeration value="de16f874.hex"/>
         <xs:enumeration value="de16f877.hex"/>
         <xs:enumeration value="de16f88.hex"/>
         <xs:enumeration value="de16f882.hex"/>
         <xs:enumeration value="de16f884.hex"/>
         <xs:enumeration value="de16f886.hex"/>
         <xs:enumeration value="de16f916.hex"/>
         <xs:enumeration value="de18cx01.hex"/>
         <xs:enumeration value="de18f_bank00.hex"/>
         <xs:enumeration value="de18f_bank01.hex"/>
         <xs:enumeration value="de18f_bank02.hex"/>
         <xs:enumeration value="de18f_bank03.hex"/>
         <xs:enumeration value="de18f_bank03a.hex"/>
         <xs:enumeration value="de18f_bank05.hex"/>
         <xs:enumeration value="de18f_bank07.hex"/>
         <xs:enumeration value="de18f_bank12.hex"/>
         <xs:enumeration value="de18f_bank14.hex"/>
         <xs:enumeration value="DE_18F_K_Bank01.HEX"/>
         <xs:enumeration value="DE_18F_K_Bank02.HEX"/>
         <xs:enumeration value="DE_18F_K_Bank05.HEX"/>
         <xs:enumeration value="DE_18F_K_Bank14.HEX"/>
         <xs:enumeration value="de18fj_bank13.hex"/>
         <xs:enumeration value="de18fj_bank14.hex"/>
         <xs:enumeration value="de18fj_bank3.hex"/>
         <xs:enumeration value="de18fj_bank7.hex"/>
         <xs:enumeration value="de24f.hex"/>
         <xs:enumeration value="de30f.hex"/>
         <xs:enumeration value="de30f_revb.hex"/>
         <xs:enumeration value="de30f_smps.hex"/>
         <xs:enumeration value="de33f.hex"/>
         <xs:enumeration value="de_pic24fj256da210.hex"/>
         <xs:enumeration value="DE_72X_2K_B1.hex"/>
         <xs:enumeration value="DE_72X_4K_B2.hex"/>
         <xs:enumeration value="DE_72X_8K_B3.hex"/>
         <xs:enumeration value="DE_720_2K_B1.hex"/>
         <xs:enumeration value="DE_721_4K_B2.hex"/>
         <xs:enumeration value="DE_ICD_v2_PIC16F727-ICE.HEX"/>
         <xs:enumeration value="DE_ICD_v2.hex"/>
         <xs:enumeration value="DE_ICD_v2_r2.hex"/>
         <xs:enumeration value="DE_icd_enhmid_v1_Bank_1.hex"/>
         <xs:enumeration value="DE_icd_enhmid_v1_Bank_2.hex"/>
         <xs:enumeration value="DE_icd_enhmid_v1_Bank_4.hex"/>
         <xs:enumeration value="DE_icd_enhmid_v1_Bank_6.hex"/>
         <xs:enumeration value="DE_icd_enhmid_v2.hex"/>
         <xs:enumeration value="DE_PIC16F616-ICD_1K_B0.hex"/>
         <xs:enumeration value="DE_PIC16F616-ICD_2K_B1.hex"/>
         <xs:enumeration value="DE_PIC24FJ64GA004.hex"/>
         <xs:enumeration value="32DE.hex"/>
      </xs:restriction>
   </xs:simpleType>

   <!-- Memory IDs -->
   <xs:simpleType name="memoryid">
      <xs:annotation>
         <xs:documentation>
			An enumeration of all the memory types
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:token">
         <xs:enumeration value="MT_PROGRAM"/>
         <xs:enumeration value="MT_FILE_REGISTERS"/>
         <xs:enumeration value="MT_EXTERNAL"/>
         <xs:enumeration value="MT_EEPROM"/>
         <xs:enumeration value="MT_STACK"/>
         <xs:enumeration value="MT_CONFIGURATION"/>
         <xs:enumeration value="MT_USER_ID"/>
         <xs:enumeration value="MT_DEVICE_ID"/>
         <xs:enumeration value="MT_TEST"/>
         <xs:enumeration value="MT_NMMR"/>
         <xs:enumeration value="MT_BOOT_RAM"/>
         <xs:enumeration value="MT_CALIBRATION"/>
         <xs:enumeration value="MT_BKBUG_VECTOR"/>
         <xs:enumeration value="MT_EMULATION_REGISTERS"/>
         <xs:enumeration value="MT_CONFIGURATION_WORM"/>
         <xs:enumeration value="MT_BOOT_CONFIG"/>
         <xs:enumeration value="MT_DATA_FLASH"/>
         <xs:enumeration value="MT_PERIPH"/>
      </xs:restriction>
   </xs:simpleType>
   
   <!-- Debug Set IDs -->
   <xs:simpleType name="debugsetid">
      <xs:annotation>
         <xs:documentation>
			An enumeration of all the debug sets
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:token">
         <xs:enumeration value="DS_BASELINE"/>
         <xs:enumeration value="DS_12F"/>
         <xs:enumeration value="DS_16F"/>
         <xs:enumeration value="DS_16FEv1"/>
         <xs:enumeration value="DS_16F_NOLVP"/>
         <xs:enumeration value="DS_16F716"/>
         <xs:enumeration value="DS_16F872"/>
         <xs:enumeration value="DS_18C"/>
         <xs:enumeration value="DS_18F"/>
         <xs:enumeration value="DS_18F_NOVEC"/>
         <xs:enumeration value="DS_DSPIC"/>
         <xs:enumeration value="DS_24_33"/>
         <xs:enumeration value="DS_32F"/>
      </xs:restriction>
   </xs:simpleType>
   
   <!-- Capability IDs -->
   <xs:simpleType name="capid">
      <xs:annotation>
         <xs:documentation>
			An enumeration of all the capabilities
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:token">
         <xs:enumeration value="CAPID_BACKGROUNDDEBUG"/>
         <xs:enumeration value="CAPID_DEBUGEXECVECTOR"/>
         <xs:enumeration value="CAPID_RSBUG"/>
         <xs:enumeration value="CAPID_SHDW"/>
         <xs:enumeration value="CAPID_BREAKPOINT"/>
         <xs:enumeration value="CAPID_LVP"/>
         <xs:enumeration value="CAPID_WDT"/>
         <xs:enumeration value="CAPID_WREG"/>
         <xs:enumeration value="CAPID_FREEZE"/>
      </xs:restriction>
   </xs:simpleType>
   
   <!-- endianess -->
   <xs:simpleType name="endianess">
      <xs:annotation>
         <xs:documentation>
			An enumeration of the types of endianess
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:token">
         <xs:enumeration value="little"/>
         <xs:enumeration value="big"/>
      </xs:restriction>
   </xs:simpleType>
   
   <!-- MemoryAccessBlockID -->
   <xs:simpleType name="MemAccessBlockID">
      <xs:annotation>
         <xs:documentation>
			An enumeration of the memory access blocks
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:token">
         <xs:enumeration value="MA_16F"/>
         <xs:enumeration value="MA_16F_4"/>
         <xs:enumeration value="MA_16F_4_TEST"/>
         <xs:enumeration value="MA_16F_16"/>
         <xs:enumeration value="MA_16F_NRE_2"/>
         <xs:enumeration value="MA_16FA"/>
         <xs:enumeration value="MA_18C"/>
         <xs:enumeration value="MA_18F"/>
         <xs:enumeration value="MA_18FEGG"/>
         <xs:enumeration value="MA_18FEGG_4"/>
         <xs:enumeration value="MA_18FEGG_64"/>
         <xs:enumeration value="MA_18FTSMC"/>
         <xs:enumeration value="MA_24F"/>
         <xs:enumeration value="MA_33F"/>
         <xs:enumeration value="MA_30F"/>
         <xs:enumeration value="MA_30FA2"/>
         <xs:enumeration value="MA_32F"/>
      </xs:restriction>
   </xs:simpleType>
   
   <!-- Memory access types -->
   <xs:simpleType name="memaccesstype">
      <xs:annotation>
         <xs:documentation>
			An enumeration of the types of memory access
			</xs:documentation>
      </xs:annotation>
      <xs:restriction base="xs:token">
         <xs:enumeration value="ICSP"/>
         <xs:enumeration value="Debug"/>
         <xs:enumeration value="Bootload"/>
      </xs:restriction>
   </xs:simpleType>
   
   
   <!-- ==================================================================== -->
   <!--                               Elements -->
   <!-- ==================================================================== -->

   <!-- Document node -->
   <xs:element name="icd2doc">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - main document node
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="icd2:version"/>
            <xs:element ref="icd2:part"                        maxOccurs="unbounded"/>
            <xs:element ref="icd2:FWDescriptor"                minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="icd2:DebugExecDescriptor"         maxOccurs="unbounded"/>
            <xs:element ref="icd2:DebugSetDescriptor"          maxOccurs="unbounded"/>
            <xs:element ref="icd2:MemoryAccessBlockDescriptor" maxOccurs="unbounded"/>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   
   <!-- Version element -->
   <xs:element name="version">
      <xs:annotation>
         <xs:documentation>
         The version of the XML document
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="major" type="xs:nonNegativeInteger" use="required"/>
         <xs:attribute name="minor" type="xs:nonNegativeInteger" use="required"/>
         <xs:attribute name="rev"   type="xs:nonNegativeInteger" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- Part element -->
   <xs:element name="part">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - part element
			Contains all the information needed by MPLAB ICD 2 to support the
			associated part
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:sequence>
            <!-- I really don't want to use a sequence here, but... -->
            <xs:element ref="icd2:fw"/>
            <xs:element ref="icd2:cont"              minOccurs="0"/>
            <xs:element ref="icd2:family"            minOccurs="0"/>
            <xs:element ref="icd2:erasetimeout"      minOccurs="0"/>
            <xs:element ref="icd2:debugexec"         minOccurs="0"/>
            <xs:element ref="icd2:altdebugexec"      minOccurs="0"/>
            <xs:element ref="icd2:altdeoffset"       minOccurs="0"/>
            <xs:element ref="icd2:dememtypeoverride" minOccurs="0"/>
            <xs:element ref="icd2:debugset"          minOccurs="0"/>
            <xs:element ref="icd2:memaccessblock"    minOccurs="0"/>
            <xs:element ref="icd2:bootloader"        minOccurs="0"/>
            <xs:element ref="icd2:testcal"           minOccurs="0"/>
            <xs:element ref="icd2:icdpower"          minOccurs="0"/>
            <xs:element ref="icd2:usepe"             minOccurs="0"/>
            <xs:element ref="icd2:specwarn"          minOccurs="0"  maxOccurs="unbounded"/>
         </xs:sequence>
         <xs:attribute name="id" type="icd2:partid" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- FW Descriptor -->
   <xs:element name="FWDescriptor">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - This element gives information specific
			to a given firmware.
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="icd2:PeriphFreezeSupported" minOccurs="0"/>
         </xs:sequence>
         <xs:attribute name="id" type="icd2:fwtype" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- Debug Exec Descriptor -->
   <xs:element name="DebugExecDescriptor">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - This element gives information specific
			to a given debug executive.
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="icd2:desize"/>
            <xs:element ref="icd2:deoffset" minOccurs="0"/>
            <xs:element ref="icd2:dememtype"/>
            <xs:element ref="icd2:depcadd"/>
            <xs:element ref="icd2:dewregadd"/>
            <xs:element ref="icd2:dereservedrange"       minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="icd2:deremap"               minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="icd2:dereadonly"            minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="icd2:denoaccess"            minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="icd2:deshadow"              minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="icd2:denmmrremap"           minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="icd2:PeriphFreezeSupported" minOccurs="0"/>
            <xs:element ref="icd2:deForceFreeze"         minOccurs="0"/>
         </xs:sequence>
         <xs:attribute name="id" type="icd2:debugexecid" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- Debug Set -->
   <xs:element name="debugset">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - Specifies the debug exec file used
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="id" type="icd2:debugsetid" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- Debug Set Descriptor -->
   <xs:element name="DebugSetDescriptor">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - Debug set contains debug capability descriptors
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="icd2:capability" maxOccurs="unbounded"/>
         </xs:sequence>
         <xs:attribute name="set" type="icd2:debugsetid" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- Memory Access Block -->
   <xs:element name="memaccessblock">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - Specifies a memory access block to be
			associated with a given part
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="id" type="icd2:MemAccessBlockID" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- Memory Access Block -->
   <xs:element name="MemoryAccessBlockDescriptor">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - contians information on how to access
			various memories (word size, block size etc.)
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="icd2:memaccess" minOccurs="0" maxOccurs="unbounded"/>
         </xs:sequence>
         <xs:attribute name="id" type="icd2:MemAccessBlockID" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- Memory Access -->
   <xs:element name="memaccess">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - Describes how to access a specific memory
			rws = read word size (in bytes)
			rbs = read block size (in words)
			rms = read max size (in words)
			wws = write word size (in bytes)
			wbs = write block size (in words)
			wms = write max size (in words)
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="mem"    type="icd2:memoryid"         use="required"/>
         <xs:attribute name="access" type="icd2:memaccesstype"    use="required"/>
         <xs:attribute name="rws"    type="xs:nonNegativeInteger" use="optional" default="1"/>
         <xs:attribute name="rbs"    type="xs:nonNegativeInteger" use="optional" default="1"/>
         <xs:attribute name="rms"    type="xs:nonNegativeInteger" use="optional"/>
         <xs:attribute name="wws"    type="xs:nonNegativeInteger" use="optional" default="1"/>
         <xs:attribute name="wbs"    type="xs:nonNegativeInteger" use="optional" default="1"/>
         <xs:attribute name="wms"    type="xs:nonNegativeInteger" use="optional"/>
      </xs:complexType>
   </xs:element>

   <!-- Capability -->
   <xs:element name="capability">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - Capability descriptor
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="cap"  type="icd2:capid"            use="required"/>
         <xs:attribute name="add"  type="icd2:hex32"            use="required"/>
         <xs:attribute name="mask" type="icd2:hex32"            use="required"/>
         <xs:attribute name="mem"  type="icd2:memoryid"         use="required"/>
         <!-- <xs:attribute name="cont" type="xs:boolean"            use="optional" default="true"/> -->
         <xs:attribute name="def"  type="icd2:hex32"            use="optional" default="0x0"/>
         <xs:attribute name="dis"  type="icd2:hex32"            use="optional" default="0x0"/>
         <xs:attribute name="end"  type="icd2:endianess"        use="optional" default="little"/>
         <xs:attribute name="size" type="xs:positiveInteger"    use="optional" default="1"/>
         <xs:attribute name="shft" type="xs:nonNegativeInteger" use="optional" default="0"/>
      </xs:complexType>
   </xs:element>

   <!-- FW -->
   <xs:element name="fw">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - fw specifier element
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="id" type="icd2:fwtype" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- PeriphFreezeSupported -->
   <xs:element name="PeriphFreezeSupported">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - Specifies that periph freeze is supported
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="supported" type="xs:boolean" use="optional" default="true"/>
      </xs:complexType>
   </xs:element>
   
   <!-- Controller -->
   <xs:element name="cont">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - Specifies which controller
			is used by a part.  The ID field must be a icd2:contid.
			Default is CT_BASIC.
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="id" type="icd2:contid" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- Family -->
   <xs:element name="family">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - Specifies the family type to 
			send to the firmware.
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="id" type="icd2:familyid" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- Erase time out -->
   <xs:element name="erasetimeout">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - Specifies the erase timeout value
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="val" type="xs:nonNegativeInteger" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- Debug Exec -->
   <xs:element name="debugexec">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - Specifies the debug exec file used
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="id" type="icd2:debugexecid" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- Debug Memory Type Override -->
   <xs:element name="dememtypeoverride">
      <xs:annotation>
         <xs:documentation>
			The type of memory the DE is stored in (overrides dememtype)
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="memtype" type="icd2:memoryid" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- Alt Debug Exec-->
   <xs:element name="altdebugexec">
      <xs:annotation>
         <xs:documentation>
			MPLAB ICD 2 tool database - Specifies the debug exec file used when using
			upgraded -ICE header parts.
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="id" type="icd2:debugexecid" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <xs:element name="altdeoffset">
      <xs:annotation>
         <xs:documentation>
         Overrides the offset of the selected debug exec
         </xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="offset" type="icd2:hex32" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- desize -->
   <xs:element name="desize">
      <xs:annotation>
         <xs:documentation>
			A size value
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="size" type="icd2:hex16" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- deoffset -->
   <xs:element name="deoffset">
      <xs:annotation>
         <xs:documentation>
			Usually deoffset is calculated by subtracting the desize from the
			end address of the memory region.  Sometimes however the deoffset
			is simply set in stone (e.g. 16 and 32 bit parts)
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="offset" type="icd2:hex32" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- dememtype -->
   <xs:element name="dememtype">
      <xs:annotation>
         <xs:documentation>
			The type of memory the DE is stored in
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="memtype" type="icd2:memoryid" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- depcadd -->
   <xs:element name="depcadd">
      <xs:annotation>
         <xs:documentation>
			The address the DE will store the PC at
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="address" type="icd2:hex32" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- dewregadd -->
   <xs:element name="dewregadd">
      <xs:annotation>
         <xs:documentation>
			The address the DE will store the WREG at
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="address" type="icd2:hex32" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- dereservedrange -->
   <xs:element name="dereservedrange">
      <xs:annotation>
         <xs:documentation>
			Specifies a range of addresses reserved by the DE
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="start" type="icd2:hex32" use="required"/>
         <xs:attribute name="end"   type="icd2:hex32" use="required"/>
         <xs:attribute name="inDE"  type="xs:boolean" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- deremap -->
   <xs:element name="deremap">
      <xs:annotation>
         <xs:documentation>
			Used to specify that the DE saves the contents of a file register
			at a specified address.  When MPLAB attempts to access this register
			it should read/write from the saved address rather than the real address
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="realadd"  type="icd2:hex32" use="required"/>
         <xs:attribute name="savedadd" type="icd2:hex32" use="required"/>
      </xs:complexType>
   </xs:element>

   <!-- denmmrremap" -->
   <xs:element name="denmmrremap">
      <xs:annotation>
         <xs:documentation>
         This element specifies that an MPLAB NMMR address should be remapped
         to a specific File Register location on the target.
         The optional range is used to indicate that the remapping continues
         for the specified number of words, else 1 word is assumed
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="nmmradd"  type="icd2:hex32" use="required"/>
         <xs:attribute name="targadd"  type="icd2:hex32" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- dereadonly -->
   <xs:element name="dereadonly">
      <xs:annotation>
         <xs:documentation>
         Specifies that the ICD can only read but not write the range specified.
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="start" type="icd2:hex32" use="required"/>
         <xs:attribute name="end"   type="icd2:hex32" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- denoaccess -->
   <xs:element name="denoaccess">
      <xs:annotation>
         <xs:documentation>
         Specifies that the ICD can shouldn't read or write the range specified
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="start" type="icd2:hex32" use="required"/>
         <xs:attribute name="end"   type="icd2:hex32" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- deshadow -->
   <xs:element name="deshadow">
      <xs:annotation>
         <xs:documentation>
         Specifies that the range specified is hidden by the background debug shadow bit
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="start" type="icd2:hex32" use="required"/>
         <xs:attribute name="end"   type="icd2:hex32" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- deForceFreeze -->
   <xs:element name="deForceFreeze">
      <xs:annotation>
         <xs:documentation>
         Specifies that the DE forces the shadow bit to the indicated value
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="value" type="icd2:binary" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- Bootloader file descriptor -->
   <xs:element name="bootloader">
      <xs:annotation>
         <xs:documentation>
			Indicates that the part uses a bootloader file and gives
			the information associated with it.
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="file"     type="xs:string"  use="required"/>
         <xs:attribute name="loadaddr" type="icd2:hex32" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- test calibration page needed -->
   <xs:element name="testcal">
      <xs:annotation>
         <xs:documentation>
			If this record exists, then the part needs the test calibration page.
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="use" type="xs:boolean" use="optional" default="false"/>
      </xs:complexType>
   </xs:element>
   
   <!-- ICD power -->
   <xs:element name="icdpower">
      <xs:annotation>
         <xs:documentation>
         Specifies whether ICD power is allowed or not.
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="allowed" type="xs:boolean" use="optional" default="true"/>
      </xs:complexType>
   </xs:element>
   
   <!-- Special Warns -->
   <xs:element name="specwarn">
      <xs:annotation>
         <xs:documentation>
         Specifies that the indicated warning is applicable to this part.  This is
         used for warnings that should only apply to certain parts.
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="id" type="xs:positiveInteger" use="required"/>
      </xs:complexType>
   </xs:element>
   
   <!-- UsePE -->
   <xs:element name="usepe">
      <xs:annotation>
         <xs:documentation>
         Specifies that this part either should or should not use the PE.  This element
         is intended to be an override not a specification.  Most parts shouldn't use
         it.  It was introduced to turn off PE useage for 4 parts that needed to be
         released but didn't have working PEs yet.
			</xs:documentation>
      </xs:annotation>
      <xs:complexType>
         <xs:attribute name="use" type="xs:boolean" use="required"/>
      </xs:complexType>
   </xs:element>
   
</xs:schema>
