format=0.1
# DOS: DOS-00603 
# PS:  
# DS:  DS-39762

vpp (range=2.125-3.500 dflt=3.250)
vdd (range=2.125-3.500 dfltrange=2.125-3.500 nominal=3.250)

IsChecksumless=1

pgming (memtech=ee tries=1 panelsize=0x0 pkgthresh=2.75)
   wait (pgm=3000 eedata=10000 cfg=10000 userid=10000 erase=600)
   # erase is actually 600ms but we only have U16 to use so I'm making it ms base instead for TSMC parts
   latches(pgm=64 eedata=2 cfg=2)   
   

pgmmem (region=0x0-0x0fff7)     # fff8-ffff are cfg bits
cfgmem (region=0x0fff8-0x0ffff)
cfgwormmem (region=0x300000-0x300006)
extpgmmem  (region=0x20000-0x1FFFFF modeaddr=0x300004)

# No eedata according to the programming spec
#eedata (region=0x00-0xf5f)
testmem (region=0x200000-0x2003FF)

# The end address has been changed from a 0x2B to a 0x37 for the ICD2
bkbgvectmem (region=0x200028-0x200037)

devid (region=0x3FFFFE-0x3FFFFF idmask=0xFFE0 id=0x1820)

NumBanks=16
UnusedBankMask=0x0000
AccessBankSplitOffset=0x60

UnusedRegs (0xfd4-0xfd4)
UnusedRegs (0xfa8-0xfaa)
UnusedRegs (0xeff-0xeff)
UnusedRegs (0xefc-0xefc)
UnusedRegs (0xef8-0xefa)
UnusedRegs (0xeda-0xee1)
UnusedRegs (0xed6-0xef7)
UnusedRegs (0xed2-0xed3)
UnusedRegs (0xeba-0xebf)
UnusedRegs (0xeb5-0xeb5)
UnusedRegs (0xeb3-0xeb3)
UnusedRegs (0xeac-0xeb0)
UnusedRegs (0xea5-0xea5)
UnusedRegs (0xea1-0xea1)
UnusedRegs (0xe9a-0xe9f)
UnusedRegs (0xe8b-0xe96)
UnusedRegs (0xe86-0xe89)

ICDStr= ICDDevID=0x1FC0 ICDDevIDMustUse=0 ICDDevCfgAddr=0x1FFF8 ICDDevSelVal=0x94
                               # ---------------#
#------------------------------# CORE Registers #------------------------------------------------#
                               # ---------------#

sfr (key=TOS addr=0xFFD size=3 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='- - - TOS' width='1 1 1 21')
sfr (key=TOSU addr=0xFFF size=1 access='u u u rw rw rw rw rw')
    reset (por='---00000' mclr='---00000')
    bit (names='- - - TOSU' width='1 1 1 5')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=TOSH addr=0xFFE size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='TOSH' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=TOSL addr=0xFFD size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='TOSL' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)

sfr (key=STKPTR addr=0xFFC size=1 access='rc rc u rw rw rw rw rw')
    reset (por='00-00000' mclr='00-00000')
    bit (names='STKFUL STKUNF - STKPTR' width='1 1 1 5')
    stimulus (scl=rwb regfiles=w pcfiles=rw)

sfr (key=PCLAT addr=0xFF9 size=3 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='- - - PCLAT' width='1 1 1 21')
sfr (key=PCLATU addr=0xFFB size=1 access='u u u rw rw rw rw rw')
    reset (por='---00000' mclr='---00000')
    bit (names='- - - PCU' width='1 1 1 5')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=PCLATH addr=0xFFA size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='PCH' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=PCL addr=0xFF9 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='PCL' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)

sfr (key=TBLPTR addr=0xFF6 size=3 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='- - ACSS TBLPTR' width='1 1 1 21')
sfr (key=TBLPTRU addr=0xFF8 size=1 access='u u rw rw rw rw rw rw')
    # NOTE: The ACSS bit allows access to the device configuration bits
    reset (por='--000000' mclr='--000000')
    bit (names='- - ACSS TBLPTRU' width='1 1 1 5')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=TBLPTRH addr=0xFF7 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='TBLPTRH' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=TBLPTRL addr=0xFF6 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='TBLPTRL' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)

sfr (key=TABLAT addr=0xFF5 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='TABLAT' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)

sfr (key=PROD addr=0xFF3 size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='PROD' width='16')
sfr (key=PRODH addr=0xFF4 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='PRODH' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=PRODL addr=0xFF3 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='PRODL' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)

sfr (key=INTCON addr=0xFF2 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='0000000x' mclr='0000000u')
    bit (names='GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF')
    # NOTE: When IPEN (bit 7) in the RCON register is 0 use the following bit names
    qbit (names='GIE PEIE TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF')
    # NOTE: When IPEN (bit 7) in the RCON register is 1 use the following bit names
    qbit (names='GIEH GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF')
    bit (tag=scl names='GIE_GIEH PEIE_GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=INTCON2 addr=0xFF1 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11111111' mclr='11111111')
    bit (names='nRBPU INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IP INT3IP RBIP')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=INTCON3 addr=0xFF0 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11000000' mclr='11000000')
    bit (names='INT2IP INT1IP INT3IE INT2IE INT1IE INT3IF INT2IF INT1IF')
    stimulus (scl=rwb regfiles=w pcfiles=rw)


sfr (key=INDF0 addr=0xFEF size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='INDF0' width='8')
sfr (key=POSTINC0 addr=0xFEE size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='POSTINC0' width='8')
sfr (key=POSTDEC0 addr=0xFED size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='POSTDEC0' width='8')
sfr (key=PREINC0 addr=0xFEC size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='PREINC0' width='8')
sfr (key=PLUSW0 addr=0xFEB size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='PLUSW0' width='8')

sfr (key=FSR0 addr=0xFE9 size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='- - - - FSR0' width='1 1 1 1 12')
sfr (key=FSR0H addr=0xFEA size=1 access='u u u u rw rw rw rw')
    reset (por='----0000' mclr='----uuuu')
    bit (names='- - - - FSR0H' width='1 1 1 1 4')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=FSR0L addr=0xFE9 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='FSR0L' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)

sfr (key=WREG addr=0xFE8 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='WREG' width='8')
    stimulus (scl=rwb type=int regfiles=w pcfiles=rw)
sfr (key=INDF1 addr=0xFE7 size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='INDF1' width='8')
sfr (key=POSTINC1 addr=0xFE6 size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='POSTINC1' width='8')
sfr (key=POSTDEC1 addr=0xFE5 size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='POSTDEC1' width='8')
sfr (key=PREINC1 addr=0xFE4 size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='PREINC1' width='8')
sfr (key=PLUSW1 addr=0xFE3 size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='PLUSW1' width='8')

sfr (key=FSR1 addr=0xFE1 size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='- - - - FSR1' width='1 1 1 1 12')
sfr (key=FSR1H addr=0xFE2 size=1 access='u u u u rw rw rw rw')
    reset (por='----0000' mclr='----uuuu')
    bit (names='- - - - FSR1H' width='1 1 1 1 4')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=FSR1L addr=0xFE1 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='FSR1L' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)

sfr (key=BSR addr=0xFE0 size=1 access='u u u u rw rw rw rw')
    reset (por='----0000' mclr='----0000')
    bit (names='- - - - BSR' width='1 1 1 1 4')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=INDF2 addr=0xFDF size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='INDF2' width='8')
sfr (key=POSTINC2 addr=0xFDE size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='POSTINC2' width='8')
sfr (key=POSTDEC2 addr=0xFDD size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='POSTDEC2' width='8')
sfr (key=PREINC2 addr=0xFDC size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='PREINC2' width='8')
sfr (key=PLUSW2 addr=0xFDB size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='PLUSW2' width='8')

sfr (key=FSR2 addr=0xFD9 size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='- - - - FSR2' width='1 1 1 1 12')
sfr (key=FSR2H addr=0xFDA size=1 access='u u u u rw rw rw rw')
    reset (por='----0000' mclr='----0000')
    bit (names='- - - - FSR2H' width='1 1 1 1 4')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=FSR2L addr=0xFD9 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='FSR2L' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)

sfr (key=STATUS addr=0xFD8 size=1 access='u u u rw rw rw rw rw')
    reset (por='---xxxxx' mclr='---uuuuu')
    bit (names='- - - N OV Z DC C')

sfr (key=WDTCON addr=0xFD1 size=1 access='u u u u u u u rw')
    reset (por='-------0' mclr='-------0')
    bit (names='- - - - - - - SWDTEN')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=RCON addr=0xFD0 size=1 access='rw u u rw rw rw rw rw')
    reset (por='0--11100' mclr='0--uqquu')
    bit (names='IPEN - - nRI nTO nPD nPOR nBOR')
    stimulus (scl=r regfiles=w pcfiles=rw)

sfr (key=EECON2 addr=0xFA7 size=1 flags=w access='w w w w w w w w')
    reset (por='--------' mclr='--------')
    bit (names='EECON2' width='8')
sfr (key=EECON1 addr=0xFA6 size=1 access='u u u rw rw rw rs u')
    reset (por='0000x000' mclr='0000x000')
    bit (names='- - - FREE WRERR WREN WR -' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=IPR3 addr=0xFA5 size=1 access='u rw rw rw rw rw rw rw')
    reset (por='-1111111' mclr='-1111111')
    bit (names='- BCL2IP RC2IP TX2IP TMR4IP CCP5IP CCP4IP CCP3IP')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=PIR3 addr=0xFA4 size=1 access='u rw r rw rw rw rw rw')
    reset (por='-0000000' mclr='-0000000')
    bit (names='- BCL2IF RC2IF TX2IF TMR4IF CCP5IF CCP4IF CCP3IF')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=PIE3 addr=0xFA3 size=1 access='u rw rw rw rw rw rw rw')
    reset (por='-0000000' mclr='-0000000')
    bit (names='- BCL2IE RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=IPR2 addr=0xFA2 size=1 access='rw rw rw rw rw u rw rw')
    reset (por='11111-11' mclr='11111-11')
    bit (names='OSCFIP CMIP ETNIP WOLIP BCLIP1 - TMR3IP CCP2IP')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=PIR2 addr=0xFA1 size=1 access='rw rw rw rw rw u rw rw')
    reset (por='00000-00' mclr='00000-00')
    bit (names='OSCFIF CMIF ETNIF WOLIF BCLIF1 - TMR3IF CCP2IF')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=PIE2 addr=0xFA0 size=1 access='rw rw rw rw rw u rw rw')
    reset (por='00000-00' mclr='00000-00')
    bit (names='OSCFIE CMIE ETNIE WOLIE BCLIE1 - TMR3IE CCP2IE')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=IPR1 addr=0xF9F size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11111111' mclr='11111111')
    bit (names='PSPIP ADIP RC1IP TX1IP SSPIP1 CCP1IP TMR2IP TMR1IP')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=PIR1 addr=0xF9E size=1 access='rw rw r r rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='PSPIF ADIF RC1IF TX1IF SSPIF1 CCP1IF TMR2IF TMR1IF')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=PIE1 addr=0xF9D size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='PSPIE ADIE RC1IE TX1IE SSPIE1 CCP1IE TMR2IE TMR1IE')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=MEMCON addr=0xF9C size=1 access='rw u rw rw u u rw rw')
    reset (por='0-00--00' mclr='0-00--00')
    bit (names='EBDIS - WAIT - - WM' width='1 1 2 1 1 2')
    stimulus (scl=rwb regfiles=w pcfiles=rw)

                               # ---------------------#
#------------------------------# Oscillator Registers #----------------------------------------------------------------------------#
                               # ---------------------#

sfr (key=OSCCON addr=0xFD3 size=1 access='rw u u u rw u rw rw')
# The access masks and reset values for this register are guesses. 
# The current DOS-00539 A.3 does not provide them.
    reset (por='0---0-00' mclr='0---0-00')
    bit (names='IDLEN - - - OSTS - SCS' width='1 1 1 1 1 1 2')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=OSCTUNE addr=0xF9B size=1 access='rw rw rw rw u u u u')
    reset (por='00000000' mclr='00000000')
    bit (names='PPST1 PLLEN PPST0 PPRE - - - -' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb regfiles=w pcfiles=rw)

                               # ----------------#
#------------------------------# PORTA Registers #-------------------------------------------------#
                               # ----------------#

# The reset values are guesses because latest DOS-00539 A.3 doesn't have reset values.

sfr (key=PORTA addr=0xF80 size=1 access='u u rw rw rw rw rw rw')
    reset (por='--0x0000' mclr='--0u0000')
    bit (names='- - RA5 RA4 RA3 RA2 RA1 RA0')
    bit (tag=scl names='RA' width='8')
    stimulus (scl=rwb regfiles=rw pcfiles=rw)
sfr (key=LATA addr=0xF89 size=1 access='u u rw rw rw rw rw rw')
    reset (por='--xxxxxx' mclr='--uuuuuu')
    bit (names='- - LATA5 LATA4 LATA3 LATA2 LATA1 LATA0')
    bit (tag=scl names='LATA' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=TRISA addr=0xF92 size=1 access='u u rw rw rw rw rw rw')
    reset (por='--111111' mclr='--111111')
    bit (names='- - TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0')
    bit (tag=scl names='TRISA' width='8')
    stimulus (scl=rwb regfiles=w)

                               # ----------------#
#------------------------------# PORTB Registers #-----------------------------------------------------------------------------------------#
                               # ----------------#

# The reset values are guesses because latest DOS-00539 A.3 doesn't have reset values.

sfr (key=PORTB addr=0xF81 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0')
    bit (tag=scl names='RB' width='8')
    stimulus (scl=rwb regfiles=rw pcfiles=rw)
sfr (key=TRISB addr=0xF93 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11111111' mclr='11111111')
    bit (names='TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0')
    bit (tag=scl names='TRISB' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=LATB addr=0xF8A size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0')
    bit (tag=scl names='LATB' width='8')
    stimulus (scl=rwb regfiles=w)

                               # ----------------#
#------------------------------# PORTC Registers #---------------------------------------#
                               # ----------------#

sfr (key=PORTC addr=0xF82 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0')
    bit (tag=scl names='RC' width='8')
    stimulus (scl=rwb regfiles=rw pcfiles=rw)
sfr (key=LATC addr=0xF8B size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0')
    bit (tag=scl names='LATC' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=TRISC addr=0xF94 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11111111' mclr='11111111')
    bit (names='TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0')
    bit (tag=scl names='TRISC' width='8')
    stimulus (scl=rwb regfiles=w)

                               # ----------------#
#------------------------------# PORTD Registers #-----------------------------------------------------------------------------------------#
                               # ----------------#

sfr (key=PORTD addr=0xF83 size=1 access='u u u u u rw rw rw')
    reset (por='-----xxx' mclr='-----uuu')
    bit (names='- - - - - RD2 RD1 RD0')
    bit (tag=scl names='RD' width='8')
    stimulus (scl=rwb regfiles=rw pcfiles=rw)
sfr (key=LATD addr=0xF8C size=1 access='u u u u u rw rw rw')
    reset (por='-----xxx' mclr='-----uuu')
    bit (names='- - - - - LATD2 LATD1 LATD0')
    bit (tag=scl names='LATD' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=TRISD addr=0xF95 size=1 access='u u u u u rw rw rw')
    reset (por='-----111' mclr='-----111')
    bit (names='- - - - - TRISD2 TRISD1 TRISD0')
    bit (tag=scl names='TRISD' width='8')
    stimulus (scl=rwb regfiles=w)

                               # ----------------#
#------------------------------# PORTE Registers #------------------------------------------------------#
                               # ----------------#

sfr (key=PORTE addr=0xF84 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='RE7 RE6 RE5 RE4 RE3 RE2 RE1 RE0')
    bit (tag=scl names='RE' width='8')
    stimulus (scl=rwb regfiles=rw pcfiles=rw)
sfr (key=LATE addr=0xF8D size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='LATE7 LATE6 LATE5 LATE4 LATE3 LATE2 LATE1 LATE0')
    bit (tag=scl names='LATE' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=TRISE addr=0xF96 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11111111' mclr='11111111')
    bit (names='TRISE7 TRISE6 TRISE5 TRISE4 TRISE3 TRISE2 TRISE1 TRISE0')
    bit (tag=scl names='TRISE' width='8')
    stimulus (scl=rwb regfiles=w)

                               # ----------------#
#------------------------------# PORTF Registers #-------------------------------------------------#
                               # ----------------#

# The reset values are guesses because latest DOS-00539 A.3 doesn't have reset values.

sfr (key=PORTF addr=0xF85 size=1 access='rw rw rw rw rw rw rw u')
    reset (por='0000000-' mclr='0000000-')
    bit (names='RF7 RF6 RF5 RF4 RF3 RF2 RF1 -')
    bit (tag=scl names='RF' width='8')
    stimulus (scl=rwb regfiles=rw pcfiles=rw)
sfr (key=LATF addr=0xF8E size=1 access='rw rw rw rw rw rw rw u')
    reset (por='xxxxxxx-' mclr='uuuuuuu-')
    bit (names='LATF7 LATF6 LATF5 LATF4 LATF3 LATF2 LATF1 -')
    bit (tag=scl names='LATF' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=TRISF addr=0xF97 size=1 access='rw rw rw rw rw rw rw u')
    reset (por='1111111-' mclr='1111111-')
    bit (names='TRISF7 TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1 -')
    bit (tag=scl names='TRISF' width='8')
    stimulus (scl=rwb regfiles=w)

                               # ----------------#
#------------------------------# PORTG Registers #-------------------------------------------------#
                               # ----------------#

sfr (key=PORTG addr=0xF86 size=1 access='u u u rw rw rw rw rw')
    reset (por='---xxxxx' mclr='---uuuuu')
    bit (names='- - - RG4 RG3 RG2 RG1 RG0')
    bit (tag=scl names='RG' width='8')
    stimulus (scl=rwb regfiles=rw pcfiles=rw)
sfr (key=TRISG addr=0xF98 size=1 access='u u u rw rw rw rw rw')
    reset (por='---11111' mclr='---11111')
    bit (names='- - - TRISG4 TRISG3 TRISG2 TRISG1 TRISG0')
    bit (tag=scl names='TRISG' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=LATG addr=0xF8F size=1 access='u u u rw rw rw rw rw')
    reset (por='---xxxxx' mclr='---uuuuu')
    bit (names='- - - LATG4 LATG3 LATG2 LATG1 LATG0')
    bit (tag=scl names='LATG' width='8')
    stimulus (scl=rwb regfiles=w)

                               # ----------------#
#------------------------------# PORTH Registers #-------------------------------------------------#
                               # ----------------#

sfr (key=PORTH addr=0xF87 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='RH7 RH6 RH5 RH4 RH3 RH2 RH1 RH0')
    bit (tag=scl names='RH' width='8')
    stimulus (scl=rwb regfiles=rw pcfiles=rw)
sfr (key=TRISH addr=0xF99 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11111111' mclr='11111111')
    bit (names='TRISH7 TRISH6 TRISH5 TRISH4 TRISH3 TRISH2 TRISH1 TRISH0')
    bit (tag=scl names='TRISH' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=LATH addr=0xF90 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='LATH7 LATH6 LATH5 LATH4 LATH3 LATH2 LATH1 LATH0')
    bit (tag=scl names='LATH' width='8')
    stimulus (scl=rwb regfiles=w)

                               # ----------------#
#------------------------------# PORTJ Registers #-------------------------------------------------#
                               # ----------------#

sfr (key=PORTJ addr=0xF88 size=1 access='u u rw rw u u u u')
    reset (por='--xx----' mclr='--uu----')
    bit (names='- - RJ5 RJ4 - - - -')
    bit (tag=scl names='RJ' width='8')
    stimulus (scl=rwb regfiles=rw pcfiles=rw)
sfr (key=TRISJ addr=0xF9A size=1 access='u u rw rw u u u u')
    reset (por='--11----' mclr='--11----')
    bit (names='- - TRISJ5 TRISJ4 - - - -')
    bit (tag=scl names='TRISJ' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=LATJ addr=0xF91 size=1 access='u u rw rw u u u u')
    reset (por='--xx----' mclr='--uu----')
    bit (names='- - LATJ5 LATJ4 - - - -')
    bit (tag=scl names='LATJ' width='8')
    stimulus (scl=rwb regfiles=w)

                               # --------------#
#------------------------------# ADC Registers #----------------------------------------------------------------------------#
                               # --------------#

sfr (key=ADRES addr=0xFC3 size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='ADRES' width='16')
sfr (key=ADRESH addr=0xFC4 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='ADRESH' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=ADRESL addr=0xFC3 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='ADRESL' width='8')
    stimulus (scl=rwb regfiles=r)

sfr (key=ADCON0 addr=0xFC2 size=1 access='u u rw rw rw rw rw rw')
    reset (por='--000000' mclr='--000000')
    bit (names='- - CHS GO/nDONE ADON' width='1 1 4 1 1')
    bit (tag=scl names='- - CHS GO_nDONE ADON' width='1 1 4 1 1')
    stimulus (scl=rwb regfiles=w)
sfr (key=ADCON1 addr=0xFC1 size=1 access='u u rw rw rw rw rw rw')
    reset (por='--00qqqq' mclr='--000000')
    bit (names='- - VCFG PCFG' width='1 1 2 4')
    stimulus (scl=rwb regfiles=w)
sfr (key=ADCON2 addr=0xFC0 size=1 access='rw u rw rw rw rw rw rw')
    reset (por='0-000000' mclr='0-000000')
    bit (names='ADFM - ACQT ADCS' width='1 1 3 3')
    stimulus (scl=rwb regfiles=w)

                               # ---------------#
#------------------------------# ECCP Registers #----------------------------------------------------------------------------#
                               # ---------------#

sfr (key=CCPR1 addr=0xFBE size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='CCPR1' width='16')
sfr (key=CCPR1H addr=0xFBF size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='CCPR1H' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=CCPR1L addr=0xFBE size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='CCPR1L' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=CCP1CON addr=0xFBD size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='P1M DC1B CCP1M' width='2 2 4')
    stimulus (scl=rwb regfiles=w)
sfr (key=ECCP1AS addr=0xFB6 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='ECCPASE ECCPAS PSSAC PSSBD' width='1 3 2 2')
    stimulus (scl=rwb regfiles=w)
sfr (key=ECCP1DEL addr=0xF79 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='PRSEN PDC' width='1 7')
    stimulus (scl=rwb regfiles=w)

sfr (key=CCPR2 addr=0xFBB size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='CCPR2' width='16')
sfr (key=CCPR2H addr=0xFBC size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='CCPR2H' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=CCPR2L addr=0xFBB size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='CCPR2L' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=CCP2CON addr=0xFBA size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='P2M DC2B CCP2M' width='2 2 4')
    stimulus (scl=rwb regfiles=w)
sfr (key=ECCP2AS addr=0xF68 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='ECCPASE ECCPAS PSSAC PSSBD' width='1 3 2 2')
    stimulus (scl=rwb regfiles=w)
sfr (key=ECCP2DEL addr=0xF67 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='PRSEN PDC' width='1 7')
    stimulus (scl=rwb regfiles=w)


sfr (key=CCPR3 addr=0xFB8 size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='CCPR3' width='16')
sfr (key=CCPR3H addr=0xFB9 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='CCPR3H' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=CCPR3L addr=0xFB8 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='CCPR3L' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=CCP3CON addr=0xFB7 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='P3M DC3B CCP3M' width='2 2 4')
    stimulus (scl=rwb regfiles=w)
sfr (key=ECCP3AS addr=0xF6A size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='ECCPASE ECCPAS PSSAC PSSBD' width='1 3 2 2')
    stimulus (scl=rwb regfiles=w)
sfr (key=ECCP3DEL addr=0xF69 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='PRSEN PDC' width='1 7')
    stimulus (scl=rwb regfiles=w)



                               # --------------#
#------------------------------# CCP Registers #----------------------------------------------------------------------------#
                               # --------------#


sfr (key=CCPR4 addr=0xF74 size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='CCPR4' width='16')
sfr (key=CCPR4H addr=0xF75 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='CCPR4H' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=CCPR4L addr=0xF74 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='CCPR4L' width='8')
    stimulus (scl=rwb type=int regfiles=w)

sfr (key=CCP4CON addr=0xF73 size=1 access='u u rw rw rw rw rw rw')
    reset (por='--000000' mclr='--000000')
    bit (names='- - DC4B CCP4M' width='1 1 2 4')
    stimulus (scl=rwb regfiles=w)

sfr (key=CCPR5 addr=0xF71 size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='CCPR5' width='16')
sfr (key=CCPR5H addr=0xF72 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='CCPR5H' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=CCPR5L addr=0xF71 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='CCPR5L' width='8')
    stimulus (scl=rwb type=int regfiles=w)

sfr (key=CCP5CON addr=0xF70 size=1 access='u u rw rw rw rw rw rw')
    reset (por='--000000' mclr='--000000')
    bit (names='- - DC5B CCP5M' width='1 1 2 4')
    stimulus (scl=rwb regfiles=w)

                               # --------------#
#------------------------------# SSP Registers #----------------------------------------------------------------------------#
                               # --------------#

sfr (key=SSP1BUF addr=0xFC9 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='SSPBUF' width='8')
    stimulus (scl=rwb regfiles=rw pcfiles=rw)
sfr (key=SSP1ADD addr=0xFC8 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='SSPADD' width='8')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
# All bits are rw so they can be simulated
# sfr (key=SSP1STAT addr=0xFC7 size=1 access='rw rw r r r r r r')
sfr (key=SSP1STAT addr=0xFC7 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='SMP CKE D/nA P S R/nW UA BF')
#    bit (tag=scl names='SMP CKE D_nA P S R_nW UA BF')
sfr (key=SSP1CON1 addr=0xFC6 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='WCOL SSPOV SSPEN CKP SSPM' width='1 1 1 1 4')
    stimulus (scl=rwb regfiles=w pcfiles=rw)
sfr (key=SSP1CON2 addr=0xFC5 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN')
    stimulus (scl=rwb regfiles=w pcfiles=rw)

UnusedRegs (0xF62-0xF66) #SSP2


                               # -----------------#
#------------------------------# TIMER0 Registers #-------------------------------------------------#
                               # -----------------#

sfr (key=TMR0 addr=0xFD6 size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='TMR0' width='16')
sfr (key=TMR0H addr=0xFD7 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='TMR0H' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=TMR0L addr=0xFD6 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='TMR0L' width='8')
    stimulus (scl=rwb type=int regfiles=w)

sfr (key=T0CON addr=0xFD5 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11111111' mclr='11111111')
    bit (names='TMR0ON T08BIT T0CS T0SE T0PS' width='1 1 1 1 4')
    stimulus (scl=rwb regfiles=w)

                               # -----------------#
#------------------------------# TIMER1 Registers #-------------------------------------------------#
                               # -----------------#

sfr (key=TMR1 addr=0xFCE size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='TMR1' width='16')
sfr (key=TMR1H addr=0xFCF size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='TMR1H' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=TMR1L addr=0xFCE size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='TMR1L' width='8')
    stimulus (scl=rwb type=int regfiles=w)

sfr (key=T1CON addr=0xFCD size=1 access='rw r rw rw rw rw rw rw')
    reset (por='00000000' mclr='uuuuuuuu')
    bit (names='RD16 T1RUN T1CKPS T1OSCEN nT1SYNC TMR1CS TMR1ON' width='1 1 2 1 1 1 1')
    stimulus (scl=rwb regfiles=w)

                               # -----------------#
#------------------------------# TIMER2 Registers #-------------------------------------------------#
                               # -----------------#

sfr (key=TMR2 addr=0xFCC size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='TMR2' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=PR2 addr=0xFCB size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11111111' mclr='11111111')
    bit (names='PR2' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=T2CON addr=0xFCA size=1 access='u rw rw rw rw rw rw rw')
    reset (por='-0000000' mclr='-0000000')
    bit (names='- TOUTPS TMR2ON T2CKPS' width='1 4 1 2')
    stimulus (scl=rwb regfiles=w)

                               # -----------------#
#------------------------------# TIMER3 Registers #-------------------------------------------------#
                               # -----------------#

sfr (key=TMR3 addr=0xFB2 size=2 flags=j)
    # NOTE: The j flag means all these registers together form one larger register
    bit (names='TMR3' width='16')
sfr (key=TMR3H addr=0xFB3 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='TMR3H' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=TMR3L addr=0xFB2 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='xxxxxxxx' mclr='uuuuuuuu')
    bit (names='TMR3L' width='8')
    stimulus (scl=rwb type=int regfiles=w)

sfr (key=T3CON addr=0xFB1 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='uuuuuuuu')
    bit (names='RD16 T3CCP2 T3CKPS T3CCP1 nT3SYNC TMR3CS TMR3ON' width='1 1 2 1 1 1 1')
    stimulus (scl=rwb regfiles=w)

                               # -----------------#
#------------------------------# TIMER4 Registers #-------------------------------------------------#
                               # -----------------#

sfr (key=TMR4 addr=0xF78 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='TMR4' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=PR4 addr=0xF77 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11111111' mclr='11111111')
    bit (names='PR4' width='8')
    stimulus (scl=rwb type=int regfiles=w)
sfr (key=T4CON addr=0xF76 size=1 access='u rw rw rw rw rw rw rw')
    reset (por='-0000000' mclr='-0000000')
    bit (names='- T4OUTPS TMR4ON T4CKPS' width='1 4 1 2')
    stimulus (scl=rwb regfiles=w)

                               # --------------#
#------------------------------# PSP Registers #----------------------------------------------------------------------------#
                               # --------------#

UnusedRegs (0xFB0-0xFB0)

                               # ---------------------#
#------------------------------# Comparator Registers #----------------------------------------------------------------------------#
                               # ---------------------#

sfr (key=CVRCON addr=0xFB5 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='CVREN CVROE CVRR CVRSS CVR' width='1 1 1 1 4')
    stimulus (scl=rwb regfiles=w)
sfr (key=CMCON addr=0xFB4 size=1 access='r r rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='C2OUT C1OUT C2INV C1INV CIS CM' width='1 1 1 1 1 3')
    stimulus (scl=rwb regfiles=w)

                               # ----------------#
#------------------------------# UART1 Registers #-------------------------------------------------#
                               # ----------------#

sfr (key=BAUDCON1 addr=0xF7E size=1 access='u r u rw rw u rw rw')
    reset (por='-1-00-00' mclr='-1-00-00')
    bit (names='- RCMT - SCKP BRG16 - WUE ABDEN')
    stimulus (scl=rwb regfiles=w)
sfr (key=SPBRGH1 addr=0xF7F size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='SPBRGH1' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=SPBRG1 addr=0xFAF size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='SPBRG1' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=RCREG1 addr=0xFAE size=1 access='r r r r r r r r')
    reset (por='00000000' mclr='00000000')
    bit (names='RCREG1' width='8')
    stimulus (scl=rwb regfiles=rp)
sfr (key=TXREG1 addr=0xFAD size=1 access='w w w w w w w w')
    reset (por='00000000' mclr='00000000')
    bit (names='TXREG1' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=TXSTA1 addr=0xFAC size=1 access='rw rw rw rw u rw r rw')
    reset (por='0000-010' mclr='0000-010')
    bit (names='CSRC TX9 TXEN SYNC - BRGH TRMT TX9D')
    stimulus (scl=rwb regfiles=w)
sfr (key=RCSTA1 addr=0xFAB size=1 access='rw rw rw rw rw r r r')
    reset (por='0000000x' mclr='0000000x')
    bit (names='SPEN RX9 SREN CREN ADDEN FERR OERR RX9D')
    stimulus (scl=rwb regfiles=w)

                               # ----------------#
#------------------------------# UART2 Registers #-------------------------------------------------#
                               # ----------------#

sfr (key=BAUDCON2 addr=0xF7C size=1 access='u r u rw rw u rw rw')
    reset (por='-1-00-00' mclr='-1-00-00')
    bit (names='- RCMT - SCKP BRG16 - WUE ABDEN')
    stimulus (scl=rwb regfiles=w)
sfr (key=SPBRGH2 addr=0xF7D size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='SPBRGH2' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=SPBRG2 addr=0xF6F size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='SPBRG2' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=RCREG2 addr=0xF6E size=1 access='r r r r r r r r')
    reset (por='00000000' mclr='00000000')
    bit (names='RCREG2' width='8')
    stimulus (scl=rwb regfiles=rp)
sfr (key=TXREG2 addr=0xF6D size=1 access='w w w w w w w w')
    reset (por='00000000' mclr='00000000')
    bit (names='TXREG2' width='8')
    stimulus (scl=rwb regfiles=w)
sfr (key=TXSTA2 addr=0xF6C size=1 access='rw rw rw rw u rw r rw')
    reset (por='0000-010' mclr='0000-010')
    bit (names='CSRC TX9 TXEN SYNC - BRGH TRMT TX9D')
    stimulus (scl=rwb regfiles=w)
sfr (key=RCSTA2 addr=0xF6B size=1 access='rw rw rw rw rw r r r')
    reset (por='0000000x' mclr='0000000x')
    bit (names='SPEN RX9 SREN CREN ADDEN FERR OERR RX9D')
    stimulus (scl=rwb regfiles=w)



                               #------------#
#------------------------------#  ETHERNET  #------------------------------#
                               #------------#

sfr (key=ECON1 addr=0xFD2 size=1 access='rw rw rw rw rw rw u u')
    reset (por='000000--' mclr='000000--')
    bit (names='TXRST RXRST DMAST CSUMEN TXRTS RXEN - -' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=ERDPTH addr=0xF7B size=1 access='u u u rw rw rw rw rw')
    reset (por='xxx00101' mclr='uuu00101')
    bit (names='- - - ERDPTH' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=ERDPTL addr=0xF7A size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='ERDPTL' width='8')
    stimulus (scl=rwb)
sfr (key=EDATA addr=0xF61 size=1 flags=i access='u u u u u u u u')
    reset (por='--------' mclr='--------')
    bit (names='EDATA' width='8')
sfr (key=EIR addr=0xF60 size=1 access='u r rc r rc u rc rc')
    reset (por='-0000-00' mclr='-0000-00')
    bit (names='- PKTIF DMAIF LINKIF TXIF - TXERIF RXERIF' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=ECON2 addr=0xEFE size=1 access='rw rw rw u u u u u')
    reset (por='100-----' mclr='100-----')
    bit (names='AUTOINC PKTDEC ETHEN - - - - -' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=ESTAT addr=0xEFD size=1 access='u rc u rc u r rc rw')
    reset (por='-0-0-000' mclr='-0-0-000')
    bit (names='- BUFER - LATECOL - RXBUSY TXABRT PHYRDY' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=EIE addr=0xEFB size=1 access='u rw rw rw rw u rw rw')
    reset (por='-0000-00' mclr='-0000-00')
    bit (names='- PKTIE DMAIE LINKIE TXIE - TXERIE RXERIE' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=EDMASCH addr=0xEF7 size=1 access='r r r r r r r r')
    reset (por='00000000' mclr='00000000')
    bit (names='EDMASCH' width='8')
    stimulus (scl=rwb)
sfr (key=EDMASCL addr=0xEF6 size=1 access='r r r r r r r r')
    reset (por='00000000' mclr='00000000')
    bit (names='EDMASCL' width='8')
    stimulus (scl=rwb)
sfr (key=EDMADSTH addr=0xEF5 size=1 access='u u u rw rw rw rw rw')
    reset (por='---00000' mclr='---00000')
    bit (names='- - - EDMADSTH' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=EDMADSTL addr=0xEF4 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='000000000')
    bit (names='EDMADSTL' width='8')
    stimulus (scl=rwb)
sfr (key=EDMANDH addr=0xEF3 size=1 access='u u u rw rw rw rw rw')
    reset (por='---00000' mclr='---00000')
    bit (names='- - - EDMANDH' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=EDMANDL addr=0xEF2 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='000000000')
    bit (names='EDMANDL' width='8')
    stimulus (scl=rwb)
sfr (key=EDMASTH addr=0xEF1 size=1 access='u u u rw rw rw rw rw')
    reset (por='---00000' mclr='---00000')
    bit (names='- - - EDMASTH' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=EDMASTL addr=0xEF0 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='000000000')
    bit (names='EDMASTL' width='8')
    stimulus (scl=rwb)
sfr (key=ERXWRPTH addr=0xEEF size=1 access='u u u rw rw rw rw rw')
    reset (por='---00000' mclr='---00000')
    bit (names='- - - ERXWRPTH' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=ERXWRPTL addr=0xEEE size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='000000000')
    bit (names='ERXWRPTL' width='8')
    stimulus (scl=rwb)
sfr (key=ERXRDPTH addr=0xEED size=1 access='u u u rw rw rw rw rw')
    reset (por='---00101' mclr='---00101')
    bit (names='- - - ERXRDPTH' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=ERXRDPTL addr=0xEEC size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11111010' mclr='111110101')
    bit (names='ERXRDPTL' width='8')
    stimulus (scl=rwb)
sfr (key=ERXNDH addr=0xEEB size=1 access='u u u rw rw rw rw rw')
    reset (por='---11111' mclr='---11111')
    bit (names='- - - ERXNDH' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=ERXNDL addr=0xEEA size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11111111' mclr='111111111')
    bit (names='ERXNDL' width='8')
    stimulus (scl=rwb)
sfr (key=ERXSTH addr=0xEE9 size=1 access='u u u rw rw rw rw rw')
    reset (por='---00101' mclr='---00101')
    bit (names='- - - ERXSTH' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=ERXSTL addr=0xEE8 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='11111010' mclr='111111010')
    bit (names='ERXSTL' width='8')
    stimulus (scl=rwb)
sfr (key=ETXNDH addr=0xEE7 size=1 access='u u u rw rw rw rw rw')
    reset (por='---00000' mclr='---00000')
    bit (names='- - - ETXNDH' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=ETXNDL addr=0xEE6 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='000000000')
    bit (names='ETXNDL' width='8')
    stimulus (scl=rwb)
sfr (key=ETXSTH addr=0xEE5 size=1 access='u u u rw rw rw rw rw')
    reset (por='---00000' mclr='---00000')
    bit (names='- - - ETXSTH' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=ETXSTL addr=0xEE4 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='000000000')
    bit (names='ETXSTL' width='8')
    stimulus (scl=rwb)
sfr (key=EWRPTH addr=0xEE3 size=1 access='u u u rw rw rw rw rw')
    reset (por='---00000' mclr='---00000')
    bit (names='- - - EWRPTH' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=EWRPTL addr=0xEE2 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='000000000')
    bit (names='EWRPTL' width='8')
    stimulus (scl=rwb)
sfr (key=EPKTCNT addr=0xED9 size=1 access='r r r r r r r r')
    reset (por='00000000' mclr='00000000')
    bit (names='EPKTCNT' width='8')
    stimulus (scl=rwb)
sfr (key=ERXFCON addr=0xED8 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='10100001' mclr='10100001')
    bit (names='UCEN ANDOR CRCEN PMEN MPEN HTEN MCEN BCEN' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=EPMOH addr=0xED5 size=1 access='u u u rw rw rw rw rw')
    reset (por='---00000' mclr='---00000')
    bit (names='- - - EPMOH' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=EPMOL addr=0xED4 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='000000000')
    bit (names='EPMOL' width='8')
    stimulus (scl=rwb)
sfr (key=EPMCSH addr=0xED1 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EPMCSH' width='8')
    stimulus (scl=rwb)
sfr (key=EPMCSL addr=0xED0 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EPMCSL' width='8')
    stimulus (scl=rwb)
sfr (key=EPMM7 addr=0xECF size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EPMM7' width='8')
    stimulus (scl=rwb)
sfr (key=EPMM6 addr=0xECE size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EPMM6' width='8')
    stimulus (scl=rwb)
sfr (key=EPMM5 addr=0xECD size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EPMM5' width='8')
    stimulus (scl=rwb)
sfr (key=EPMM4 addr=0xECC size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EPMM4' width='8')
    stimulus (scl=rwb)
sfr (key=EPMM3 addr=0xECB size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EPMM3' width='8')
    stimulus (scl=rwb)
sfr (key=EPMM2 addr=0xECA size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EPMM2' width='8')
    stimulus (scl=rwb)
sfr (key=EPMM1 addr=0xEC9 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EPMM1' width='8')
    stimulus (scl=rwb)
sfr (key=EPMM0 addr=0xEC8 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EPMM0' width='8')
    stimulus (scl=rwb)
sfr (key=EHT7 addr=0xEC7 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EHT7' width='8')
    stimulus (scl=rwb)
sfr (key=EHT6 addr=0xEC6 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EHT6' width='8')
    stimulus (scl=rwb)
sfr (key=EHT5 addr=0xEC5 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EHT5' width='8')
    stimulus (scl=rwb)
sfr (key=EHT4 addr=0xEC4 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EHT4' width='8')
    stimulus (scl=rwb)
sfr (key=EHT3 addr=0xEC3 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EHT3' width='8')
    stimulus (scl=rwb)
sfr (key=EHT2 addr=0xEC2 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EHT2' width='8')
    stimulus (scl=rwb)
sfr (key=EHT1 addr=0xEC1 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EHT1' width='8')
    stimulus (scl=rwb)
sfr (key=EHT0 addr=0xEC0 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EHT0' width='8')
    stimulus (scl=rwb)
sfr (key=MIRDH addr=0xEB9 size=1 access='r r r r r r r r')
    reset (por='00000000' mclr='00000000')
    bit (names='MIRDH' width='8')
    stimulus (scl=rwb)
sfr (key=MIRDL addr=0xEB8 size=1 access='r r r r r r r r')
    reset (por='00000000' mclr='00000000')
    bit (names='MIRDL' width='8')
    stimulus (scl=rwb)
sfr (key=MIWDH addr=0xEB7 size=1 access='w w w w w w w w')
    reset (por='00000000' mclr='00000000')
    bit (names='MIWDH' width='8')
    stimulus (scl=rwb)
sfr (key=MIWDL addr=0xEB6 size=1 access='w w w w w w w w')
    reset (por='00000000' mclr='00000000')
    bit (names='MIWDL' width='8')
    stimulus (scl=rwb)
sfr (key=MIREGADR addr=0xEB4 size=1 access='- - - rw rw rw rw rw')
    reset (por='---00000' mclr='---00000')
    bit (names='- - - MIREGADR' width='1 1 1 5')
    stimulus (scl=rwb)
sfr (key=MICMD addr=0xEB2 size=1 access='u u u u u u rw rw')
    reset (por='------00' mclr='-------00')
    bit (names='- - - - - - MIISCAN MIIRD' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=MICON addr=0xEB1 size=1 access='rw u u u u u u u')
    reset (por='0-------' mclr='0-------')
    bit (names='RSTMII - - - - - - -' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=MAMXFLH addr=0xEAB size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000110' mclr='00000110')
    bit (names='MAMXFLH' width='8')
    stimulus (scl=rwb)
sfr (key=MAMXFLL addr=0xEAA size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='MAMXFLL' width='8')
    stimulus (scl=rwb)
sfr (key=MACLCON2 addr=0xEA9 size=1 access='u u rw rw rw rw rw rw')
    reset (por='--110111' mclr='--110111')
    bit (names='- - COLWIN' width='1 1 6')
    stimulus (scl=rwb)
sfr (key=MACLCON1 addr=0xEA8 size=1 access='u u u u rw rw rw rw')
    reset (por='----1111' mclr='----1111')
    bit (names='- - - - RETMAX' width='1 1 1 1 4')
    stimulus (scl=rwb)
sfr (key=MAIPGH addr=0xEA7 size=1 access='u rw rw rw rw rw rw rw')
    reset (por='-0000000' mclr='-0000000')
    bit (names='- MAIPGH' width='1 7')
    stimulus (scl=rwb)
sfr (key=MAIPGL addr=0xEA6 size=1 access='u rw rw rw rw rw rw rw')
    reset (por='-0000000' mclr='-0000000')
    bit (names='- MAIPGL' width='1 7')
    stimulus (scl=rwb)
sfr (key=MABBIPG addr=0xEA4 size=1 access='u rw rw rw rw rw rw rw')
    reset (por='-0000000' mclr='-0000000')
    bit (names='- BBIPG6 BBIPG5 BBIPG4 BBIPG3 BBIPG2 BBIPG1 BBIPG0' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=MACON4 addr=0xEA3 size=1 access='u rw rw rw u u u u')
    reset (por='-000--00' mclr='-000--00')
    bit (names='- DEFER BPEN NOBKOFF - - - -' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=MACON3 addr=0xEA2 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='PADCFG2 PADCFG1 PADCFG0 TXCRCEN PHDREN HFRMEN FRMLNEN FULDPX' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=MACON1 addr=0xEA0 size=1 access='u u u u rw rw rw rw')
    reset (por='---00000' mclr='---00000')
    bit (names='- - - - TXPAUS RXPAUS PASSALL MARXEN' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
# rw or r or w? Not speficied in DS
sfr (key=EPAUSH addr=0xE99 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00010000' mclr='00010000')
    bit (names='EPAUSH' width='8')
    stimulus (scl=rwb)
sfr (key=EPAUSL addr=0xE98 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='EPAUSL' width='8')
    stimulus (scl=rwb)
sfr (key=EFLOCON addr=0xE97 size=1 access='u u u u u r rw rw')
    reset (por='-----000' mclr='-----000')
    bit (names='- - - - - FULDPXS FCEN1 FCEN0' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=MISTAT addr=0xE8A size=1 access='u u u u r r r r')
    reset (por='----0000' mclr='----0000')
    bit (names='- - - - LINKFL NVALID SCAN BUSY' width='1 1 1 1 1 1 1 1')
    stimulus (scl=rwb)
sfr (key=MAADR2 addr=0xE85 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='MAADR2' width='8')
    stimulus (scl=rwb)
sfr (key=MAADR1 addr=0xE84 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='MAADR1' width='8')
    stimulus (scl=rwb)
sfr (key=MAADR4 addr=0xE83 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='MAADR4' width='8')
    stimulus (scl=rwb)
sfr (key=MAADR3 addr=0xE82 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='MAADR3' width='8')
    stimulus (scl=rwb)
sfr (key=MAADR6 addr=0xE81 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='MAADR6' width='8')
    stimulus (scl=rwb)
sfr (key=MAADR5 addr=0xE80 size=1 access='rw rw rw rw rw rw rw rw')
    reset (por='00000000' mclr='00000000')
    bit (names='MAADR5' width='8')
    stimulus (scl=rwb)


                        #--------------------#
#-----------------------# Configuration Bits #-----------------------#
                        #--------------------#

cfgbits (key=CONFIG1L addr=0x0fff8 unused=0x00)
    field (key=WDTEN mask=0x01 desc="Watchdog Timer Enable")
        setting (req=0x01 value=0x01 desc="Enabled")
        setting (req=0x01 value=0x00 desc="Disabled")
    field (key=STVREN mask=0x20 desc="Stack Overflow Reset Enable")
        setting (req=0x20 value=0x20 desc="Enabled")
        setting (req=0x20 value=0x00 desc="Disabled")
    field (key=ENHCPU mask=0x40 desc="Enhanced CPU Enable")
        setting (req=0x40 value=0x40 desc="Enabled")
        setting (req=0x40 value=0x00 desc="Disabled")
    field (key=BACKBUG mask=0x80 desc="Background Debug" flags=h)
        setting (req=0x80 value=0x80 desc="Disabled")
        setting (req=0x80 value=0x00 desc="Enabled")

cfgbits (key=CONFIG1H addr=0x0fff9 unused=0x00)
    field (key=CP_0 mask=0x4 desc="Code Protect 000000-00FFFF")
        setting (req=0x4 value=0x4 desc="Disabled")
            checksum (type=0x0 protregion=0x00-0x00)
        setting (req=0x4 value=0x00 desc="Enabled")
            checksum (type=0x27 protregion=0x0-0x00FFFD)     
    #This field has no effect if changed by the user, only meaningful when read from cfg loc               
#    field (key=SIGN mask=0x8 desc="Config Word Signature Bit" init=0 flags=h)
#        setting (req=0x8 value=0x8 desc="Bulk erase of memory not conducated")
#        setting (req=0x8 value=0x0 desc="Bulk erase of memory area complete")

# new behavior: cannot use _CONFIG directives, is not saved to workspace.
#   cannot be modified via display (read only), has new calls to clear mem obj,
#   can be modified by user's program at run time (display must look for updates)

cfgbits (key=CONFIG2L addr=0x0fffa unused=0x00)
    field (key=FOSC mask=0x07 desc="Oscillator Select" init=0x07)
        setting (req=0x07 value=0x07 desc="OSC1/OSC2 as Primary, EC+PLL Osc with CLKOUT Function")
        setting (req=0x07 value=0x06 desc="OSC1/OSC2 as Primary, EC Osc with CLKOUT Function")
        setting (req=0x07 value=0x05 desc="OSC1/OSC2 as primary, HS+PLL Osc")
        setting (req=0x07 value=0x04 desc="OSC1/OSC2 as primary, HS Osc")
        setting (req=0x07 value=0x03 desc="INTOSC as Primary, EC+PLL Osc with CLKOUT")
        setting (req=0x07 value=0x02 desc="INTOSC as Primary, EC Osc with CLKOUT")
        setting (req=0x07 value=0x01 desc="INTOSC as Primary, HS+PLL Osc")
        setting (req=0x07 value=0x00 desc="INTOSC as Primary, HS Osc")
#        setting (req=0x03 value=0x03 desc="OSC1/OSC2 as Primary, EC Osc with CLKOUT Function")
#        setting (req=0x03 value=0x02 desc="OSC1/OSC2 as primary, HS Osc")
#        setting (req=0x03 value=0x01 desc="INTOSC as Primary, EC Osc with CLKOUT")
#        setting (req=0x03 value=0x00 desc="INTOSC as Primary, HS Osc")
    field (key=FCMEN mask=0x40 desc="Fail Safe Monitor Clock Enable")
        setting (req=0x40 value=0x40 desc="Enabled")
        setting (req=0x40 value=0x00 desc="Disabled")
    field (key=IESO mask=0x80 desc="Internal Exteranl Switch Over Enable")
        setting (req=0x80 value=0x80 desc="Enabled")
        setting (req=0x80 value=0x00 desc="Disabled")

cfgbits (key=CONFIG2H addr=0x0fffb unused=0x00)
    field (key=WDTPS mask=0x0f desc="Watchdog Timer Postscale")
        setting (req=0x000f value=0x000f desc="1:32,768")
        setting (req=0x000f value=0x000e desc="1:16,384")
        setting (req=0x000f value=0x000d desc="1:8,192")
        setting (req=0x000f value=0x000c desc="1:4,096")
        setting (req=0x000f value=0x000b desc="1:2,048")
        setting (req=0x000f value=0x000a desc="1:1,024")
        setting (req=0x000f value=0x0009 desc="1:512")
        setting (req=0x000f value=0x0008 desc="1:256")
        setting (req=0x000f value=0x0007 desc="1:128")
        setting (req=0x000f value=0x0006 desc="1:64")
        setting (req=0x000f value=0x0005 desc="1:32")
        setting (req=0x000f value=0x0004 desc="1:16")
        setting (req=0x000f value=0x0003 desc="1:8")
        setting (req=0x000f value=0x0002 desc="1:4")
        setting (req=0x000f value=0x0001 desc="1:2")
        setting (req=0x000f value=0x0000 desc="1:1")

#cfgbits (key=CONFIG3L addr=0x0fffc unused=0x00)
#    field (key=EASHFT mask=0x08 desc="External Address Bus Shift Enable")
#        setting (req=0x08 value=0x08 desc="Enabled")
#        setting (req=0x08 value=0x00 desc="Disabled")
#    field (key=EMB mask=0x30 desc="External Memory Bus Address Mode")
#        setting (req=0x30 value=0x30 desc="Microcontroller Mode, External Bus Disabled")
#        setting (req=0x30 value=0x20 desc="Extended Microcontroller Mode, 12-Bit Addr")
#        setting (req=0x30 value=0x10 desc="Extended Microcontroller Mode, 16-Bit Addr")
#        setting (req=0x30 value=0x00 desc="Extended Microcontroller Mode, 20-Bit Addr")
#    field (key=BW mask=0x40 desc="Data Bus Width Select")
#        setting (req=0x40 value=0x40 desc="16-Bit")
#        setting (req=0x40 value=0x00 desc="8-Bit")
#    field (key=WAIT mask=0x80 desc="External Bus Wait Enable")
#        setting (req=0x80 value=0x80 desc="Ignore MEMCON.WAIT, Device Will Not Wait")
#        setting (req=0x80 value=0x00 desc="Observe MEMCON.WAIT")

cfgbits (key=CONFIG3H addr=0x0fffd unused=0x00)
    field (key=CCP2MX mask=0x01 desc="CCP2 Mux")
        setting (req=0x01 value=0x01 desc="ECCP2 I/O Muxed With RC1")
        setting (req=0x01 value=0x00 desc="ECCP2 IP Muxed With RE7")
    field (key=ECCPXM mask=0x02 desc="ECCP Mux")
        setting (req=0x02 value=0x02 desc="P1B/P1C On RE6/RE5, P3B/P3C On RE4/RE3")
        setting (req=0x02 value=0x00 desc="P1B/P1C On RH7/RH6, P3B/P3C Onto RH5/RH4")
    field (key=ETHLED mask=0x04 desc="Ethernet LED Enable")
        setting (req=0x04 value=0x04 desc="LEDA/LEDB On RA0/RA1 With Ethernet, RA0/AN0 Without")
        setting (req=0x04 value=0x00 desc="RA0 On RA0/AN0), RA1 On RA1/AN1")

#cfgbits (key=CONFIG4L addr=0x0fffe unused=0x00)

#cfgbits (key=CONFIG4H addr=0x0ffff unused=0x00)

                               # -------------------#
#------------------------------# Configuration WORM #------------------------------------#
                               # -------------------#

                               # ------------#
#------------------------------# Peripherals #------------------------------------#
                               # ------------#

#--------------------------------------------------------------------------------
# 				CM
#--------------------------------------------------------------------------------

peripheral18 (key=CM sfrs='CMCON CVRCON')
    pinfunc (key=C1INN port=RF6 dir=in)
    pinfunc (key=C1INP port=RF5 dir=in)
    pinfunc (key=C2INN port=RF4 dir=in)
    pinfunc (key=C2INP port=RF3 dir=in)
    pinfunc (key=C1OUT port=RF2 dir=out)
    pinfunc (key=C2OUT port=RF1 dir=out)
    interrupt (name=CMINT enreg=PIE2 enmask=0x40 flgreg=PIR2 flgmask=0x40 prireg=IPR2 primask=0x40)

#--------------------------------------------------------------------------------
# 				TIMERs
#--------------------------------------------------------------------------------

peripheral18 (key=TMR0 sfrs='TMR0H TMR0L T0CON')
    pinfunc (key=T0CKI port=RA4 dir=in)
    interrupt (name=TMR0INT enreg=INTCON enmask=0x20 flgreg=INTCON flgmask=0x04 prireg=INTCON2 primask=0x04)

peripheral18 (key=TMR1 sfrs='TMR1H TMR1L T1CON')
    pinfunc (key=T1CKI port=RC0 dir=in)
    interrupt (name=TMR1INT enreg=PIE1 enmask=0x01 flgreg=PIR1 flgmask=0x01 prireg=IPR1 primask=0x01)

peripheral18 (key=TMR2 sfrs='TMR2 PR2 T2CON')
    interrupt (name=TMR2INT enreg=PIE1 enmask=0x02 flgreg=PIR1 flgmask=0x02 prireg=IPR1 primask=0x02)

peripheral18 (key=TMR3 sfrs='TMR3H TMR3L T3CON')
    pinfunc (key=T3CKI port=RC0 dir=in)
    interrupt (name=TMR3INT enreg=PIE2 enmask=0x02 flgreg=PIR2 flgmask=0x02 prireg=IPR2 primask=0x02)

peripheral18 (key=TMR4 sfrs='TMR4 PR4 T4CON')
    interrupt (name=TMR4INT enreg=PIE3 enmask=0x08 flgreg=PIR3 flgmask=0x08 prireg=IPR3 primask=0x08)

#--------------------------------------------------------------------------------
# 				ADC
#--------------------------------------------------------------------------------

peripheral18 (key=ADC sfrs='ADCON0 ADCON1 ADCON2 ADRESL ADRESH')
    pinfunc (key=AN0 port=RA0 dir=in)
    pinfunc (key=AN1 port=RA1 dir=in)
    pinfunc (key=AN2 port=RA2 dir=in)
    pinfunc (key=AN3 port=RA3 dir=in)
    pinfunc (key=AN4 port=RA5 dir=in)
    pinfunc (key=AN6 port=RF1 dir=in)
    pinfunc (key=AN7 port=RF2 dir=in)
    pinfunc (key=AN8 port=RF3 dir=in)
    pinfunc (key=AN9 port=RF4 dir=in)
    pinfunc (key=AN10 port=RF5 dir=in)
    pinfunc (key=AN11 port=RF6 dir=in)
    pinfunc (key=AN12 port=RH4 dir=in)
    pinfunc (key=AN13 port=RH5 dir=in)
    pinfunc (key=AN14 port=RH6 dir=in)
    pinfunc (key=AN15 port=RH7 dir=in)
    access (key=ADCON1 mode=AD_PCFG_HEXSEL)
    access (key=ADCON2 mode=AD_ACQUISITION)
    interrupt (name=ADC enreg=PIE1 enmask=0x40 flgreg=PIR1 flgmask=0x40 prireg=IPR1 primask=0x40)

#--------------------------------------------------------------------------------
# 				UARTs
#--------------------------------------------------------------------------------

peripheral18 (key=UART1 sfrs='BAUDCON1 SPBRGH1 SPBRG1 RCREG1 TXREG1 TXSTA1 RCSTA1')
    pinfunc (key=U1RX port=RC7 dir=in)
    pinfunc (key=U1TX port=RC6 dir=out)
    interrupt (name=RXINT1 enreg=PIE1 enmask=0x20 flgreg=PIR1 flgmask=0x20 prireg=IPR1 primask=0x20)
    interrupt (name=TXINT1 enreg=PIE1 enmask=0x10 flgreg=PIR1 flgmask=0x10 prireg=IPR1 primask=0x10)

peripheral18 (key=UART2 sfrs='BAUDCON2 SPBRGH2 SPBRG2 RCREG2 TXREG2 TXSTA2 RCSTA2')
    pinfunc (key=U2RX port=RG2 dir=in)
    pinfunc (key=U2TX port=RG1 dir=out)
    interrupt (name=RXINT2 enreg=PIE3 enmask=0x20 flgreg=PIR3 flgmask=0x20 prireg=IPR3 primask=0x20)
    interrupt (name=TXINT2 enreg=PIE3 enmask=0x10 flgreg=PIR3 flgmask=0x10 prireg=IPR3 primask=0x10)

#--------------------------------------------------------------------------------
# 				PORTA
#--------------------------------------------------------------------------------

peripheral18 (key=PORTA sfrs='TRISA LATA PORTA' type=port)
    iopin (key=RA0 dir=inout)
    iopin (key=RA1 dir=inout)
    iopin (key=RA2 dir=inout)
    iopin (key=RA3 dir=inout)
    iopin (key=RA4 dir=inout)
    iopin (key=RA5 dir=inout)

#--------------------------------------------------------------------------------
# 				PORTB
#--------------------------------------------------------------------------------

peripheral18 (key=PORTB sfrs='TRISB LATB PORTB' type=port)
    iopin (key=RB0 dir=inout)
        extint (key=INT0 enreg=INTCON enmask=0x10 flgreg=INTCON flgmask=0x02 prireg=NONE primask=0x00)
#Not required as FLT0 is also INT0 and CCP uses the INT0 as a Fault line.
#	cnpin (key=PWMFLTA notify=ECCP1)
    iopin (key=RB1 dir=inout)
        extint (key=INT1 enreg=INTCON3 enmask=0x08 flgreg=INTCON3 flgmask=0x01 prireg=INTCON3 primask=0x40)
    iopin (key=RB2 dir=inout)
        extint (key=INT2 enreg=INTCON3 enmask=0x10 flgreg=INTCON3 flgmask=0x02 prireg=INTCON3 primask=0x80)
    iopin (key=RB3 dir=inout)
        extint (key=INT3 enreg=INTCON3 enmask=0x20 flgreg=INTCON3 flgmask=0x04 prireg=INTCON2 primask=0x02)
        cnpin (key=ECCP2CN notify=ECCP2)
    iopin (key=RB4 dir=inout)
        cnint (key=KBIRQ enreg=INTCON enmask=0x08 flgreg=INTCON flgmask=0x01 prireg=INTCON2 primask=0x01 cnkey=KBI0)
    iopin (key=RB5 dir=inout)
        cnint (key=KBIRQ enreg=INTCON enmask=0x08 flgreg=INTCON flgmask=0x01 prireg=INTCON2 primask=0x01 cnkey=KBI1)
    iopin (key=RB6 dir=inout)
        cnint (key=KBIRQ enreg=INTCON enmask=0x08 flgreg=INTCON flgmask=0x01 prireg=INTCON2 primask=0x01 cnkey=KBI2)
    iopin (key=RB7 dir=inout)
        cnint (key=KBIRQ enreg=INTCON enmask=0x08 flgreg=INTCON flgmask=0x01 prireg=INTCON2 primask=0x01 cnkey=KBI3)

#--------------------------------------------------------------------------------
# 				PORTC
#--------------------------------------------------------------------------------

peripheral18 (key=PORTC sfrs='TRISC LATC PORTC' type=port)
    iopin (key=RC0 dir=inout)
    iopin (key=RC1 dir=inout)
        cnpin (key=ECCP2CN notify=ECCP2)
    iopin (key=RC2 dir=inout)
        cnpin (key=ECCP1CN notify=ECCP1)
    iopin (key=RC3 dir=inout)
    iopin (key=RC4 dir=inout)
    iopin (key=RC5 dir=inout)
    iopin (key=RC6 dir=inout)
    iopin (key=RC7 dir=inout)

#--------------------------------------------------------------------------------
# 				PORTD
#--------------------------------------------------------------------------------

peripheral18 (key=PORTD sfrs='TRISD LATD PORTD' type=port)
    iopin (key=RD0 dir=inout)
    iopin (key=RD1 dir=inout)
    iopin (key=RD2 dir=inout)

#--------------------------------------------------------------------------------
# 				PORTE
#--------------------------------------------------------------------------------

peripheral18 (key=PORTE sfrs='TRISE LATE PORTE' type=port)
    iopin (key=RE0 dir=inout)
    iopin (key=RE1 dir=inout)
    iopin (key=RE2 dir=inout)
    iopin (key=RE3 dir=inout)
    iopin (key=RE4 dir=inout)
    iopin (key=RE5 dir=inout)
    iopin (key=RE6 dir=inout)
    iopin (key=RE7 dir=inout)
        cnpin (key=ECCP2CN notify=ECCP2)

#--------------------------------------------------------------------------------
# 				PORTF
#--------------------------------------------------------------------------------

peripheral18 (key=PORTF sfrs='TRISF LATF PORTF' type=port)
    iopin (key=RF1 dir=inout)
    iopin (key=RF2 dir=inout)
    iopin (key=RF3 dir=inout)
        cnpin (key=C2INP notify=CM)
    iopin (key=RF4 dir=inout)
        cnpin (key=C2INN notify=CM)
    iopin (key=RF5 dir=inout)
        cnpin (key=C1INP notify=CM)
    iopin (key=RF6 dir=inout)
        cnpin (key=C1INN notify=CM)
    iopin (key=RF7 dir=inout)

#--------------------------------------------------------------------------------
# 				PORTG
#--------------------------------------------------------------------------------

peripheral18 (key=PORTG sfrs='TRISG LATG PORTG' type=port)
    iopin (key=RG0 dir=inout)
        cnpin (key=ECCP3CN notify=ECCP3)
    iopin (key=RG1 dir=inout)
    iopin (key=RG2 dir=inout)
    iopin (key=RG3 dir=inout)
        cnpin (key=CCP4CN notify=CCP4)
    iopin (key=RG4 dir=inout)
        cnpin (key=CCP5CN notify=CCP5)

#--------------------------------------------------------------------------------
# 				PORTH
#--------------------------------------------------------------------------------

peripheral18 (key=PORTH sfrs='TRISH LATH PORTH' type=port)
    iopin (key=RH0 dir=inout)
    iopin (key=RH1 dir=inout)
    iopin (key=RH2 dir=inout)
    iopin (key=RH3 dir=inout)
    iopin (key=RH4 dir=inout)
    iopin (key=RH5 dir=inout)
    iopin (key=RH6 dir=inout)
    iopin (key=RH7 dir=inout)

#--------------------------------------------------------------------------------
# 				PORTJ
#--------------------------------------------------------------------------------

peripheral18 (key=PORTJ sfrs='TRISJ LATJ PORTJ' type=port)
    iopin (key=RJ4 dir=inout)
    iopin (key=RJ5 dir=inout)

#--------------------------------------------------------------------------------
# 				CCP
#--------------------------------------------------------------------------------

peripheral18 (key=ECCP1 sfrs='CCP1CON CCPR1L CCPR1H ECCP1AS ECCP1DEL')
    pinfunc (key=ECCPA port=RC2 dir=inout)
    pinfunc (key=ECCPB port=multi dir=out)
        portpins (muxaddr=0x300005 muxmask=0x02)
            setting (muxval=0x00 port=RH7 dir=inout)
            setting (muxval=0x02 port=RE6 dir=inout)
    pinfunc (key=ECCPC port=multi dir=out)
        portpins (muxaddr=0x300005 muxmask=0x02)
            setting (muxval=0x00 port=RH6 dir=inout)
            setting (muxval=0x02 port=RE5 dir=inout)
    pinfunc (key=ECCPD port=RG4 dir=out)
    interrupt (name=ECCP1INT enreg=PIE1 enmask=0x04 flgreg=PIR1 flgmask=0x04 prireg=IPR1 primask=0x04)
    timers (addr=0xFB1 mask=0x48)
        setting (val=0x48 cc=TMR3 pwm=TMR4)
        setting (val=0x40 cc=TMR1 pwm=TMR2)
        setting (val=0x08 cc=TMR1 pwm=TMR2)
        setting (val=0x00 cc=TMR1 pwm=TMR2)
    deadband (key=ECCP1DEL mask=0x7F)
    pwmshutdown (key=ECCP1AS)


peripheral18 (key=ECCP2 sfrs='CCP2CON CCPR2L CCPR2H ECCP2AS ECCP2DEL')
    pinfunc (key=ECCPA port=multi dir=inout)
        portpins (muxaddr=0x300005 muxmask=0x01)
            setting (muxval=0x00 port=RE7 dir=inout)
            setting (muxval=0x01 port=RC1 dir=inout)
    pinfunc (key=ECCPB port=RE2 dir=out)
    pinfunc (key=ECCPC port=RE1 dir=out)
    pinfunc (key=ECCPD port=RE0 dir=out)
    interrupt (name=ECCP2INT enreg=PIE2 enmask=0x01 flgreg=PIR2 flgmask=0x01 prireg=IPR2 primask=0x01)
    specialevent (key=ADC)
    timers (addr=0xFB1 mask=0x48)
        setting (val=0x48 cc=TMR3 pwm=TMR4)
        setting (val=0x40 cc=TMR1 pwm=TMR2)
        setting (val=0x08 cc=TMR3 pwm=TMR4)
        setting (val=0x00 cc=TMR1 pwm=TMR2)
    deadband (key=ECCP1DEL mask=0x7F)
    pwmshutdown (key=ECCP2AS)

peripheral18 (key=ECCP3 sfrs='CCP3CON CCPR3L CCPR3H ECCP3AS ECCP3DEL')
    pinfunc (key=ECCPA port=RG0 dir=inout)
    pinfunc (key=ECCPB port=multi dir=out)
        portpins (muxaddr=0x300005 muxmask=0x02)
            setting (muxval=0x00 port=RH5 dir=inout)
            setting (muxval=0x02 port=RE4 dir=inout)
    pinfunc (key=ECCPC port=multi dir=out)
        portpins (muxaddr=0x300005 muxmask=0x02)
            setting (muxval=0x00 port=RH4 dir=inout)
            setting (muxval=0x02 port=RE3 dir=inout)
    pinfunc (key=ECCPD port=RG3 dir=out)
    interrupt (name=ECCP3INT enreg=PIE3 enmask=0x01 flgreg=PIR3 flgmask=0x01 prireg=IPR3 primask=0x01)
    timers (addr=0xFB1 mask=0x48)
        setting (val=0x48 cc=TMR3 pwm=TMR4)
        setting (val=0x40 cc=TMR3 pwm=TMR4)
        setting (val=0x08 cc=TMR3 pwm=TMR4)
        setting (val=0x00 cc=TMR1 pwm=TMR2)
    deadband (key=ECCP3DEL mask=0x7F)
    pwmshutdown (key=ECC3PAS)

peripheral18 (key=CCP4 sfrs='CCP4CON CCPR4L CCPR4H')
    pinfunc (key=CCP4 port=RG3 dir=inout)
    interrupt (name=CCP4INT enreg=PIE3 enmask=0x02 flgreg=PIR3 flgmask=0x02 prireg=IPR3 primask=0x02)
    timers (addr=0xFB1 mask=0x48)
        setting (val=0x48 cc=TMR3 pwm=TMR4)
        setting (val=0x40 cc=TMR3 pwm=TMR4)
        setting (val=0x08 cc=TMR3 pwm=TMR4)
        setting (val=0x00 cc=TMR1 pwm=TMR2)

peripheral18 (key=CCP5 sfrs='CCP5CON CCPR5L CCPR5H')
    pinfunc (key=CCP5 port=RG4 dir=inout)
    interrupt (name=CCP5INT enreg=PIE3 enmask=0x04 flgreg=PIR3 flgmask=0x04 prireg=IPR3 primask=0x04)
    timers (addr=0xFB1 mask=0x48)
        setting (val=0x48 cc=TMR3 pwm=TMR4)
        setting (val=0x40 cc=TMR3 pwm=TMR4)
        setting (val=0x08 cc=TMR3 pwm=TMR4)
        setting (val=0x00 cc=TMR1 pwm=TMR2)

#--------------------------------------------------------------------------------
# 				OSC
#--------------------------------------------------------------------------------

peripheral18 (key=OSC sfrs='OSCCON')
    pinfunc (key=T1OSCI port=RC1 dir=in)
        nextp (nextperiph=ECCP2 nextpin=ECCP2)
    pinfunc (key=T1OSCO port=RC0 dir=out)
        nextp (nextperiph=TMR1 nextpin=T1CKI)
        nextp (nextperiph=TMR3 nextpin=T3CKI)

#--------------------------------------------------------------------------------
# 				SSP
#--------------------------------------------------------------------------------

peripheral18 (key=SSP1)

#--------------------------------------------------------------------------------
# 				ETHERNET
#--------------------------------------------------------------------------------

peripheral18 (key=ETHERNET)
